Привязка устройства к модулю драйвера

Я пытаюсь лучше понять процесс привязки устройства к его драйверу. У меня есть USB-инструмент (In System Programmer для Arduino), чей Id (Product и Vendor) известен. Драйвер cdc_acm.ko не распознает его (конечно, его нет в списке внутренних устройств!). Итак... Я загрузил модуль

sudo modprobe cdc_acm
lsmod | grep cdc
$>cdc_acm

$>dmesg
...
[41244.510906] usbcore: registered new interface driver cdc_acm
[41244.510915] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

Отлично. Затем я вставляю устройство и вывод dmesg выглядит следующим образом:

...
[41447.794431] usb 2-1.2: new full-speed USB device number 17 using ehci-pci
[41447.887680] usb 2-1.2: New USB device found, idVendor=03eb, idProduct=2ff7
[41447.887690] usb 2-1.2: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[41447.887695] usb 2-1.2: Product: Arduino USB-Serial DFU

Мне кажется, что USB драйвер имеет дело с. Позвольте мне проверить соответственно следующим http://lwn.net/Articles/143397/

$>ls -la /sys/bus/usb/drivers/usb/usb2/2-1/2-1.2/2-1.2\:1.0/
total 0
drwxr-xr-x 3 root root    0 gen 20 19:29 .
drwxr-xr-x 5 root root    0 gen 20 12:51 ..
-r--r--r-- 1 root root 4096 gen 20 12:58 bAlternateSetting
-r--r--r-- 1 root root 4096 gen 20 12:51 bInterfaceClass
-r--r--r-- 1 root root 4096 gen 20 12:51 bInterfaceNumber
-r--r--r-- 1 root root 4096 gen 20 12:58 bInterfaceProtocol
-r--r--r-- 1 root root 4096 gen 20 12:58 bInterfaceSubClass
-r--r--r-- 1 root root 4096 gen 20 12:58 bNumEndpoints
-r--r--r-- 1 root root 4096 gen 20 12:58 modalias
drwxr-xr-x 2 root root    0 gen 20 12:58 power
lrwxrwxrwx 1 root root    0 gen 20 12:58 subsystem -> ../../../../../../../bus/usb
-r--r--r-- 1 root root 4096 gen 20 12:58 supports_autosuspend
-rw-r--r-- 1 root root 4096 gen 20 12:51 uevent

ссылка на модуль не существует, поэтому кажется, что устройство не связано с драйвером USB-модуля. Приятно отметить, что содержимое файла modalias - это то, что я ожидал:

 usb:v03EBp2FF7d0000dc00dsc00dp00icFEisc01ip02in00

Теперь я пытаюсь связать устройство с модулем cdc_acm с помощью следующей команды:

$>sudo echo -n "2-1.2:1.0" > sudo /sys/bus/usb/drivers/cdc_acm/bind

Вывод dmesg не показывает ничего специфического для только что выполненной команды.

Что я здесь не так делаю? Я ожидал бы хоть какой-нибудь отладочный вывод, если бы я выдал оскорбительный запрос, я бы ожидал хотя бы обратного сообщения ядра... По крайней мере, наличие какой-то обратной связи с системой поможет мне понять, в чем проблема... Кто-нибудь может мне помочь? Благодарю. PS. Я использую Ubuntu 14.10 64bit на ноутбуке Intel Core i3 ASUS F552C.

1 ответ

Это очень популярная ситуация, использование перенаправления оболочки с sudo записать в корневой файл. Вы можете запустить его как:

sudo sh -c 'echo -n "2-1.2:1.0" > /sys/bus/usb/drivers/cdc_acm/bind'

Которые запускают shell как root и используют redirect внутри него. Есть много других способов, см. При использовании sudo с перенаправлением я получаю "Отказано в доступе"

Другие вопросы по тегам