2010-10-15 149 views
22

我正在爲linux編寫USB設備驅動器。這是一個遊戲杆。每次插入它時,linux會加載一個隱藏的驅動程序。有沒有辦法告訴Linux在我插入時加載我的?或者至少不加載默認的?如何將驅動程序與USB設備綁定?

我可以在默認驅動程序的解除綁定中回顯id並在我的驅動程序的綁定中回顯它;但我想更自動的東西.. 謝謝

+0

「linux lad hid driver」是什麼意思? – 2010-10-16 00:06:53

+0

@Marcelo Cantos:我認爲他的意思是寫「Linux加載HID驅動程序」。 HID =人機界面設備。 – 2010-10-16 02:19:38

+0

如果您可以完全訪問內核源代碼樹,則可以將驅動程序添加到'drivers/hid/hid-core.c'中的'hid_have_special_driver'數組中。這會導致'hid-generic'忽略設備。但我非常希望有一種解決方案可以在不修改現有模塊的情況下工作,因此適用於通過DKMS或類似設備添加的額外模塊。不幸的是,這個用例似乎沒有'usbhid'怪癖。 – MvG 2015-05-06 22:16:21

回答

10

自己的USB驅動器優先於USBHID

如果你想阻止綁定到usbhid驅動程序,您可以使用它HID_QUIRK_IGNORE(= 4)設置。要堅持使用的示例卡爾比勒費爾特,加

options usbhid quirks=0x15c2:0x0043:0x04 

一些/etc/modprobe.d/*.conf文件(或許重新創建initramfs的)。這將告訴hid-core忽略該設備。所以usbhid會看看它,而不是其他的驅動程序。

自己的HID驅動程序優先於HID-通用

但是,如果你的其他驅動程序是HID驅動程序不是一個USB驅動器,那麼你需要usbhid結合的USB級驅動程序,和你需要您自己的HID驅動程序優先於hid-generic。這就是我面對自我的問題,對此我還沒有找到解決方案,以後未解綁並重新綁定設備。

4

Here's一個線程與修復類似的問題。總之,您可以添加類似下面你/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'" 
1

http://lwn.net/Articles/143397/非常類似於上面的回答,也許一些更多的細節。

+0

在StackOverflow上不鼓勵使用僅限鏈接的答案。答案本身應該包含基本的有用信息。鏈接是很好的參考。 – 2016-01-20 23:10:50