防止 usbhid 声明 USB 设备

防止 usbhid 声明 USB 设备

直接相关:防止 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 记录器。

相关内容