ЗАО «ЗЭО»
Техническая поддержка пользователей => ОС Linux, U-Boot => Тема начата: laborer от 23 Января, 2012, 18:36:22
-
Добрый день
Столкнулся с такой проблемой. Вроде бы usb slave работает и конфигурируется вполне нормально.
Я так думаю потому, что g_file_storage работает у меня вполне сносно на том же интерфейсе.
Делаю на тионе вот так:
# modprobe g_ether
[ 45.760000] pxa27x_udc: version 1.0.0
[ 45.900000] ether gadget: using random self ethernet address
[ 45.910000] ether gadget: using random host ethernet address
[ 46.020000] usb0: Ethernet Gadget, version: May Day 2005
[ 46.030000] usb0: using pxa27x_udc, OUT Bulk-out-2 IN Bulk-in-1 STATUS Interrupt-in-3
[ 46.030000] usb0: MAC 46:9a:70:26:b4:43
[ 46.040000] usb0: HOST MAC d6:e3:0a:a6:3d:8e
[ 46.040000] usb0: RNDIS ready
# ifconfig usb0 192.168.1.20
На host'е с дебианом после подключения по тиона по USB появляются примерно такие надписи:
Jan 13 14:21:30 host17 kernel: [22238.104030] usb 6-1: new full speed USB device number 9 using uhci_hcd
Jan 13 14:21:30 host17 kernel: [22238.298047] usb 6-1: New USB device found, idVendor=0525, idProduct=a4a2
Jan 13 14:21:30 host17 kernel: [22238.298053] usb 6-1: New USB device strings: Mfr=1, Product=2, SerialNumber?=0
Jan 13 14:21:30 host17 kernel: [22238.298058] usb 6-1: Product: RNDIS/Ethernet Gadget
Jan 13 14:21:30 host17 kernel: [22238.298062] usb 6-1: Manufacturer: Linux 2.6.22.19/pxa27x_udc
Jan 13 14:21:30 host17 kernel: [22238.311123] usb 6-1: bad CDC descriptors
Jan 13 14:21:30 host17 kernel: [22238.313191] cdc_subset 6-1:1.0: usb0: register 'cdc_subset' at usb-0000:00:1d.0-1, Linux Device, de:61:e8:c5:42:d0
Jan 13 14:21:30 host17 mtp-probe: checking bus 6, device 9: "/sys/devices/pci0000:00/0000:00:1d.0/usb6/6-1"
Jan 13 14:21:30 host17 mtp-probe: bus: 6, device: 9 was not an MTP device
Особое внимание вот сюда
>bad CDC descriptors
С такой строчкой не удивительно, что пинги не идут.
Ядро у меня 2.6.22.19.
-
Раскомментируйте
#define DEBUG
#define VERBOSE
в файле drivers/net/usb/cdc_ether.c
-
в файле drivers/net/usb/cdc_ether.c
На хосте и пересоберите cdc_ether.ko
-
На хосте и пересоберите cdc_ether.ko
Ok. Сейчас этим и занимаюсь как раз.
Вот эту ошибку
>bad CDC descriptors
вроде победил - просто загрузил модуль cdc_subset перед физическим коннектом (без загруженного cdc_ether - он сам потом загружается).
Но пинги по-прежнему не идут.
Вот на всякий случай моя полная последовательность действий. Инструкции с https://www.ridgerun.com/developer/wiki/index.php/How_to_use_USB_device_networking
На тион270
# echo 1 > /proc/sys/net/ipv4/ip_forward
# modprobe g_ether
[ 361.260000] pxa27x_udc: version 1.0.0
[ 361.350000] ether gadget: using random self ethernet address
[ 361.360000] ether gadget: using random host ethernet address
[ 361.390000] usb0: Ethernet Gadget, version: May Day 2005
[ 361.400000] usb0: using pxa27x_udc, OUT Bulk-out-2 IN Bulk-in-1 STATUS Interrupt-in-3
[ 361.410000] usb0: MAC 76:77:99:2c:19:4e
[ 361.410000] usb0: HOST MAC 76:57:ad:96:ef:c9
[ 361.420000] usb0: RNDIS ready
# HOST_USB_IP=10.0.1.1
# TARGET_USB_IP=10.0.1.2
# ifconfig usb0 $TARGET_USB_IP netmask 255.255.255.0
# route add default gw $HOST_USB_IP
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.1.0 * 255.255.255.0 U 0 0 0 usb0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default 10.0.1.1 0.0.0.0 UG 0 0 0 usb0
# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
usb0 Link encap:Ethernet HWaddr 76:77:99:2C:19:4E
inet addr:10.0.1.2 Bcast:10.0.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
На хосте (с дебианом):
# echo 1 > /proc/sys/net/ipv4/ip_forward
# modprobe cdc_subset
# HOST_USB_IP=10.0.1.1
# ifconfig usb0 $HOST_USB_IP netmask 255.255.255.0
# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2102 errors:0 dropped:0 overruns:0 frame:0
TX packets:2102 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1677168 (1.5 MiB) TX bytes:1677168 (1.5 MiB)
usb0 Link encap:Ethernet HWaddr 3a:78:98:af:53:57
inet addr:10.0.1.1 Bcast:10.0.1.255 Mask:255.255.255.0
inet6 addr: fe80::3878:98ff:feaf:5357/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:52 dropped:0 overruns:0 frame:0
TX packets:0 errors:12 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 usb0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
-
> Но пинги по-прежнему не идут.
Wireshark?
-
> Но пинги по-прежнему не идут.
Wireshark?
Только запросы от хоста
24 44.495897 3a:78:98:af:53:57 Broadcast ARP 42 Who has 10.0.1.2? Tell 10.0.1.1
-
Т.е. если делать ping с Тиона, то пакетов нет?
-
Т.е. если делать ping с Тиона, то пакетов нет?
Да. А до этого я пинговал с хоста тион.
-
Раскомментируйте
#define DEBUG
#define VERBOSE
в файле drivers/net/usb/cdc_ether.c
Сделал. Но ничего в логе не увидел. Этот же подход применил к файлу drivers/net/usb/usbnet.c, как результат в логе вижу постоянно надписи
(при воткнутом кабеле)
Jan 25 12:27:00 host17 kernel: [ 340.836058] cdc_subset 6-1:1.0: usb0: rxqlen 0 --> 4
Jan 25 12:27:00 host17 kernel: [ 340.837146] cdc_subset 6-1:1.0: usb0: rx throttle -84
Jan 25 12:27:00 host17 kernel: [ 340.960044] cdc_subset 6-1:1.0: usb0: rxqlen 0 --> 4
Jan 25 12:27:00 host17 kernel: [ 340.961144] cdc_subset 6-1:1.0: usb0: rx throttle -84
Jan 25 12:27:00 host17 kernel: [ 341.084049] cdc_subset 6-1:1.0: usb0: rxqlen 0 --> 4
Jan 25 12:27:00 host17 kernel: [ 341.085146] cdc_subset 6-1:1.0: usb0: rx throttle -84
Jan 25 12:27:01 host17 kernel: [ 341.208051] cdc_subset 6-1:1.0: usb0: rxqlen 0 --> 4
Jan 25 12:27:01 host17 kernel: [ 341.209144] cdc_subset 6-1:1.0: usb0: rx throttle -84
Ядро у меня 3.1.10 и вот что в этом месте.
/* we get controller i/o faults during khubd disconnect() delays.
* throttle down resubmits, to avoid log floods; just temporarily,
* so we still recover when the fault isn't a khubd delay.
*/
case -EPROTO:
case -ETIME:
case -EILSEQ:
dev->net->stats.rx_errors++;
if (!timer_pending (&dev->delay)) {
mod_timer (&dev->delay, jiffies + THROTTLE_JIFFIES);
netif_dbg(dev, link, dev->net,
"rx throttle %d\n", urb_status);
}
Нехороший комментарий.