防止 usbhid 声称新奇的 USB 设备,以便我可以用 libusb 控制它?

cem*_*ate 9 ubuntu kernel usb devices

我有一个 USB 火箭发射器,我希望通过libusb. 但是,libusb 不能声明该接口;大概是因为usb-devices列表“usbhid”的输出作为设备的驱动程序。

通过在互联网上阅读,我得出的结论是,我需要将此驱动程序与设备分离,以便可以将它与 libusb 一起使用。但是,我还没有找到一种明确的方法来做到这一点,只有几种不同的想法和错误报告。

那么,有没有办法将 usbhid 驱动程序与与 Ubuntu 11.04 提供的内核和工具相关的设备分离?

编辑:

我尝试创建文件

/etc/udev/rules.d/10-usbhid.rules
Run Code Online (Sandbox Code Playgroud)

并写下以下内容:

ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0701", OPTIONS=="ignore_device"
Run Code Online (Sandbox Code Playgroud)

保存,然后重新启动。该文件仍然存在,但它似乎根本不起作用。

编辑:

好的,我试过这个:

sudo -i
echo -n "0003:0A81:0701.0006" > /sys/bus/hid/drivers/generic-usb/unbind
Run Code Online (Sandbox Code Playgroud)

之后,导航到 /sys/bus/hid/devices/0003:0A81:0701.0006 和 ls 产生:

drwxr-xr-x 2 root root    0 2011-05-29 15:46 power
lrwxrwxrwx 1 root root    0 2011-05-29 13:19 subsystem ->       ../../../../../../../../../bus/hid
-rw-r--r-- 1 root root 4096 2011-05-29 13:19 uevent
Run Code Online (Sandbox Code Playgroud)

它不再像以前那样列出“驱动程序”符号链接,因此我认为它已解除绑定。然而,所有证据似乎都表明该驱动程序仍然是 usbhid。例如 usb-devices 产量:

T:  Bus=02 Lev=03 Prnt=07 Port=00 Cnt=01 Dev#=  9 Spd=1.5 MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0a81 ProdID=0701 Rev=00.01
S:  Manufacturer=Dream Link
S:  Product=USB Missile Launcher v1.0
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
Run Code Online (Sandbox Code Playgroud)

libusb 仍然在 usb_claim_interface() 上返回 -1。...

cem*_*ate 5

如果您只是以 root 身份运行 libusb 程序,

usb_detach_kernel_driver_np()
Run Code Online (Sandbox Code Playgroud)

实际上按预期工作。