LINUX.ORG.RU

MotoTRBO RNDIS linux драйвер


0

1

Вопрос к опытным людям.

Имеется: цифровая радиостанция стандарта MotoTRBO
с интерфейсом USB.

Есть драйвер под Windows XP, при установке которого образуется
сетевой интерфейс, подключенный к сети. IP адрес выдается
автоматически,но всегда один и тот же. Можно его задать и руками.
К примеру, IP адрес 192.168.10.11, основной шлюз 192.168.10.10
(заносится в радиостанцию вручную спец. программой)
Драйвера под Linux нет.

В документации на радиостанцию указано, что используется RNDIS.
Под Windows драйвер именно такой.

Но lsusb -v
выдает:
====================================

Bus 001 Device 003: ID 0cad:1021 Motorola CGISS
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 2 Communications
bDeviceSubClass 2 Abstract (modem)
bDeviceProtocol 0 None
bMaxPacketSize0 8
idVendor 0x0cad Motorola CGISS
idProduct 0x1021
bcdDevice 1.00
iManufacturer 1 Motorola Corporation
iProduct 2 Motorola LTD Device
iSerial 3 038THQ3788
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 67
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 4mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 2 Communications
bInterfaceSubClass 2 Abstract (modem)
bInterfaceProtocol 1 AT-commands (v.25ter)
iInterface 0
CDC Header:
bcdCDC 1.10
CDC Call Management:
bmCapabilities 0x00
bDataInterface 0
CDC ACM:
bmCapabilities 0x00
CDC Union:
bMasterInterface 0
bSlaveInterface 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 10 CDC Data
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x03 EP 3 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Device Status: 0x0001
=============

Непонятно.   
Поле bInterfaceProtocol = 1 : AT-commands (v.25ter)
(для RNDIS оно должно быть равно 0xff.)

linux( Fedora 14) соответственно использует драйвер cdc_acm,
появляется устройство /dev/ttyACM0

Но никакого модема там нет!
Если открыть устройство терминалом, ответы на AT-команды отсутствуют.

Хорошо, верим документации, ищем в драйверах RNDIS.
В дистрибутиве есть 2 упоминания RNDIS:
в ветке /drivers/usb/gadget/
и
/drivers/net/usb - rndis_host.

Для rndis_host нужно загрузить cdc_ether. Он не «видит» устройства
по причине несоответствия bInterfaceProtocol.

Эксперимент:
Патчим cdc_ether, чтобы устройство 0cad:1021 распознавалось, как
поддерживающее RNDIS.
Понятно, что никакой гарантии работы нет.

Устанавливаем:
rmmod cdc_acm
modprobe usbnet
insmod cdc_ether.ko - тут появляется сетевой интерфейс usb0
insmod rndis_host.ko

Конфигурим:
ifconfig usb0 192.168.10.11 netmask 255.255.255.0 up

Ну и собственно на этом всё.
----
ping 192.168.10.10 -I usb0
Warning: cannot bind to specified iface, falling back: Операция не позволяется
---


Куда копать?

В железе, USB, низкоуровневых драйверах разбираюсь, как работает
usbnet и rndis host понимаю плохо.


Автор проблему решил?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.