如何将驱动程序与USB设备绑定?

pvi*_*nis 22 linux usb bind driver device

我正在为linux编写USB设备驱动器.这是一个操纵杆.每次插入时,linux都会加载一个hid驱动程序.有什么方法可以告诉Linux在我插入时加载我的?或者至少不加载默认值?

我可以在默认驱动程序的unbind中回显id,并在我的驱动程序绑定中回显它; 但我想要一些更自动的东西..谢谢

MvG*_*MvG 11

自己的USB驱动程序优先于usbhid

如果要阻止绑定到usbhid驱动程序,可以使用其HID_QUIRK_IGNORE(= 4)设置.坚持使用Karl Bielefeldt的例子,添加

options usbhid quirks=0x15c2:0x0043:0x04
Run Code Online (Sandbox Code Playgroud)

到一些/etc/modprobe.d/*.conf文件(也许重新创建你的initramfs).这将告诉hid-core忽略该设备.所以请usbhid看看它,但留给其他司机代替.

自己的HID驱动程序优先于hid-generic

但是,如果您的其他驱动程序是HID驱动程序而不是USB驱动程序,那么您需要 usbhid绑定到USB级别的驱动程序,并且您需要自己的HID驱动程序才能优先使用hid-generic.这是我面临的问题,我还没有找到解决方案,缺少解绑和重新绑定设备.


Kar*_*ldt 7

这是一个修复类似问题的线程。总而言之,您将如下内容添加到您的/etc/udev/rules.d文件之一:

SYSFS{idVendor}=="15c2", SYSFS{idProduct}=="0043", MODE="0666", PROGRAM="/bin/sh -c 'echo -n $id:1.0 >/sys/bus/usb/drivers/usbhid/unbind;\
echo -n $id:1.1 >/sys/bus/usb/drivers/usbhid/unbind'"
Run Code Online (Sandbox Code Playgroud)

  • udev 规则的语法似乎已经改变。现在是: `SUBSYSTEM=="usb" ATTR{idVendor}=="15c2", ATTR{idProduct}=="0043", MODE="0666", PROGRAM="/bin/sh -c 'echo - n $id:1.0 >/sys/bus/usb/drivers/usbhid/unbind; echo -n $id:1.1 >/sys/bus/usb/drivers/usbhid/unbind'"`。请注意,这也适用于其他驱动程序,例如“uvcvideo”,而不仅仅是“usbhid”。 (2认同)