将设备绑定到驱动模块

将设备绑定到驱动模块

我正在尝试更好地理解将设备绑定到其驱动程序的过程。我有一个 USB 工具(Arduino 的系统内编程器),其 ID(产品和供应商)已知。驱动程序 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。我在英特尔酷睿 i3 华硕笔记本电脑 F552C 上使用 Ubuntu 14.10 64 位。

答案1

这是非常常见的情况,使用 shell 重定向来sudo写入 root 拥有的文件。您可以按如下方式运行它:

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

以 root 身份运行 shell 并在其中使用重定向。还有许多其他方法,请参阅当使用 sudo 进行重定向时,出现“权限被拒绝”的情况

相关内容