USB-устройство не будет назначать драйвер CP210x

1

Я использую Jessie Lite на RPi2. Когда я подключаю USB к последовательному устройству, он появляется, однако драйвер не назначен.

lsusb -t

/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M
        |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M
        |__ Port 3: Dev 13, If 0, Class=Vendor Specific Class, Driver=, 12M

Кажется, установлен драйвер CP210x от Silicon Labs:

lsmod

Module                  Size  Used by
cp210x                  9419  0 
usbserial              29964  1 cp210x

Теперь я попытался связать вручную безуспешно:

echo -n "1-1.3:1.0" > /sys/bus/usb/drivers/cp210x/bind

write error: No such device

Поскольку я довольно новичок в Linux и мне нужно, чтобы эта штука работала, буду благодарен за предложения. Примечание: у меня есть небольшой скрипт Python, работающий на компьютере с Windows, который может нормально общаться с самим устройством ...

Устройство есть, я не могу понять, почему оно не было найдено:

tree /sys/bus/usb/devices/

├── 1-1.3 -> ../../../devices/platform/soc/20980000.usb/usb1/1-1/1-1.3
├── 1-1.3:1.0 -> ../../../devices/platform/soc/20980000.usb/usb1/1-1/1-1.3/1-1.3:1.0

Может ли дополнительная информация usb-devicesпомочь найти проблему?

T:  Bus=01 Lev=02 Prnt=02 Port=04 Cnt=02 Dev#=  6 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=18ef ProdID=e030 Rev=01.00
S:  Manufacturer=Silicon Labs
S:  Product=ALC 8500 Expert
S:  SerialNumber=3ENAEFJAVJCO9AQQ
C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
Матиас Фрей
источник
Что находится под каталогом /sys/bus/usb/drivers/cp210x? Есть ли new_idфайл?
jc__
Там просто привязка, модуль, событие и отмена. То же самое касается usbserial.
Матиас Фрей
Дважды проверьте идентификатор вашего устройства и попробуйте выполнить повторную привязку. (1-1: 1.3).
jc__
Просто проходя сегодня ... Вот страница помощи в моих заметках: ( lwn.net/Articles/143397 )
jc__
Вы работаете с корневой оболочки? Помните, что sudo echo...это не сработает.
jc__

Ответы:

0

Добавьте в udev правило, которое будет автоматически загружать драйвер для USB-устройства.

Информация, необходимая:

  • Номера устройств USB PID / VID. lsusbвыход. Не отображается в режиме дерева. lsusb -t
  • modprobeКоманда драйвера устройства ./sbin/modprobe usb-storage

Создать правило udev .

Добавьте свой собственный файл правил в /etc/udev/rules.d

sudo vi /etc/udev/rules.d/80-serialToUsb_PID-VID.rules

Когда вы добавляете правило для udev. Это позволит udev автоматически загружать драйвер после вставки USB для любого устройства с указанным pid / vid.

  • Замените # PID # на PID вашего устройства.
  • Замените # VID # на VID вашего устройства.
  • Замените # DRIVER # командой для загрузки модуля.
  • Замените # SYS # расположением драйвера в /sys каталоге.

ACTION=="add", ATTRS{idVendor}=="#VID#", ATTRS{idProduct}=="#PID#", RUN+="#DRIVER#" RUN+="/bin/sh -c 'echo #PID# #VID# > #SYS#'"

Перезапустите Удев

sudo /etc/init.d/udev restart

Подключите устройство и используйте dmesgдля проверки


Вот пример, который я использовал для пользовательского mp3-плеера.

ACTION=="add", ATTRS{idVendor}=="a000", ATTRS{idProduct}=="a000", RUN+="/sbin/modprobe usb-storage" RUN+="/bin/sh -c 'echo a000 a000 > /sys/bus/usb/drivers/usb-storage/new_id'"

Это работает на Debian 8 и Ubuntu 14.

Вы используете Debian Lite. Так что я не уверен на 100%, что это сработает для вас.

У меня есть встроенное устройство Freescale, mx23, которое использует mdevвместо, udevи процедура немного отличается.

jc__
источник
Для большинства драйверов у меня есть subdir new_id (например, для usb-хранилища или smc95xx). Также мне не разрешено это делать, и при этом я не буду создавать его автоматически, когда я напишу правило, как вы описали ?! PI использует, udevхотя.
Матиас Фрей
new_id предоставляется драйвером, а не вами. Кроме того, вам может потребоваться sudo suразрешение echo для bind или new_id.
jc__
Замените строку ... new_id используемой вами командой ... bind.
jc__
Я перепробовал все вышеперечисленное - все равно ничего. Помогает ли добавленный вывод отредактированного вопроса проверить проблему?
Матиас Фрей
Это должно отображаться как ttyUSB или другой tty?
jc__