【问题标题】:How can I bind a driver with a USB device?如何将驱动程序与 USB 设备绑定?
【发布时间】:2011-04-26 04:45:54
【问题描述】:

我正在为 linux 编写一个 USB 设备驱动器。这是一个操纵杆。 每次插入时,linux都会加载一个隐藏驱动程序。当我插入它时,有没有办法告诉 Linux 加载我的?或者至少不加载默认的?

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

【问题讨论】:

  • “linux lad a hid driver”是什么意思?
  • @Marcelo Cantos:我认为他的意思是写“Linux 加载 HID 驱动程序”。 HID = 人机接口设备。
  • 如果您对内核源代码树具有完全访问权限,则可以将驱动程序添加到drivers/hid/hid-core.c 中的hid_have_special_driver 数组中。这将导致hid-generic 忽略该设备。但我非常希望有一个解决方案可以在不修改现有模块的情况下工作,因此适用于通过 DKMS 或类似方式添加的额外模块。不幸的是,这个用例似乎没有usbhid 怪癖。

标签: linux usb driver bind device


【解决方案1】:

自己的USB驱动优先于usbhid

如果您想阻止绑定到usbhid 驱动程序,您可以使用它的HID_QUIRK_IGNORE (= 4) 设置。要坚持使用 Karl Bielefeldt 的示例,请添加

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

到一些/etc/modprobe.d/*.conf 文件(也许重新创建你的initramfs)。这将告诉hid-core 忽略该设备。所以usbhid 会查看它,但将其留给其他驱动程序。

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

但是,如果您的其他驱动程序是 HID 驱动程序而不是 USB 驱动程序,那么您需要 usbhid 绑定到 USB 级别的驱动程序,并且您需要自己的 HID 驱动程序来获取优先于hid-generic。这是我自己面临的问题,但我还没有找到解决方案,只是稍后解除绑定和重新绑定设备。

【讨论】:

  • 这种隐藏通用的重新绑定太麻烦了。我想知道没有人找到更好的解决方案。互联网上的信息非常少,我想知道是否有人真正为 Linux 编写驱动程序。
【解决方案2】:

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'"

【讨论】:

    【解决方案3】:

    http://lwn.net/Articles/143397/ 与上面的答案非常相似,也许还有更多细节。

    【讨论】:

    • 在 StackOverflow 上不鼓励仅链接的答案。答案本身应该包含必要的有用信息。链接作为参考很好。
    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多