直接相关:防止 usbhid 声明新颖的 USB 设备,以便我可以使用 libusb 控制它?
我想从使用 libusb-0.1 的程序访问 RFID 读取器(用作 HID 设备)。在代码中,内核驱动程序已正确分离usb_detach_kernel_driver_np
(没有错误),但似乎每当我的程序尝试访问 USB 设备时,usbhid 模块都会回收它。总是出现以下错误dmesg
:
USB 1-1.3:usbfs:接口 0 由 usbhid 声明,而“MyProgram”设置配置 #1
我添加了以下 udev 规则,重新启动 udevd 并重新插入设备,但没有效果。它应该将该设备列入黑名单,防止其被 usbhid 使用。
# I anonymized the vendor/product IDs here
ATTRS{idVendor}=="dead", ATTRS{idProduct}=="beef", OPTIONS=="ignore_device"
除了 dmesg 输出之外,我还可以看到每次都会重新创建/sys/bus/usb/drivers/usbhid/
设备1-1.3:1.0
,因此黑名单似乎不起作用。
我还能尝试什么吗?操作系统是 Raspbian(在 Raspberry Pi 上),内核为 3.2.27。
答案1
我已经解决了这部分问题:
OPTIONS=="ignore_device"
已从内核中删除(犯罪)blacklist usbhid
什么也没做,甚至没有挡住我的键盘- /etc/modprobe.d 中的配置文件
options usbhid quirks=0xdead:0xbeef:0x0004
不起作用,因为 usbhid 未编译为模块
因此,我添加usbhid.quirks=0xdead:0xbeef:0x4
到启动命令行(在 Raspbian 上,位于 /boot/cmdline.txt 中),并且 usbhid 不再绑定设备。
然而,我原来的问题仍然存在。第一次访问 RFID 读取器时,我总是遇到读取/超时错误。
答案2
我遇到了同样的问题,我解决了修改 udev 规则文件的问题,如下所示:
SUBSYSTEM=="input", GROUP="input", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="4242", ATTRS{idProduct}=="e131", MODE:="666", GROUP="users"
现在我可以使用libusb
函数读取 RFID 记录器。