如何防止 linux 初始化 USB HID 设备

How can I prevent linux from initializing a USB HID device

我有一个可以在两种不同模式下工作的 USB HID 设备。模式的选择基于发送给它的 USB enumeration/initialization 数据包的顺序。

我正在使用 Raspberry Pi 3 运行 Raspbian,但是如果我为桌面 Ubuntu 发行版编译代码,我也会遇到同样的问题。

我遇到的问题是 linux 将 USB 设备识别为 HID 设备,然后发送它认为启动设备所必需的命令序列,这可以正常工作并启动设备"Mode 1".

但是我需要在 "Mode 2" 中启动设备,为此我需要发送一组略有不同的 enumeration/initialization 命令。

我是 linux 的新手,但在 windows 下对 LibUSB 和 LibUSBDotNet 非常有经验,并且可以在 windows 下获得我想要的行为。

Windows 与 linux 有相似的行为,它会枚举,将设备识别为 USB HID 设备,然后在它认为合适的情况下初始化它,导致设备进入 "Mode 1".为了防止 windows 这样做,我可以为设备创建一个 LibUSB 过滤驱动程序,然后替换默认驱动程序,所以 windows 现在将进行初始枚举,意识到设备的 VID 和 PID 是由 LibUSB 过滤器驱动程序(而不是 windows HID 驱动程序)管理,然后停止 enumeration/initialization - 这允许我的代码接管并完成对 "Mode 2".

的初始化

如何完全停止 Linux 这个设备(就像我对 windows 所做的那样)。也许我需要用 udev 规则做一些事情,但我不知道我是 linux.

的新手。

非常感谢任何帮助

你说得对,你必须遵守 udev 规则。

首先您必须识别您的设备。找到您设备的 idProduct 和 idVendor。您可以使用:

lsusb

然后在 rules.d 文件夹 (/etc/udev/rules.d) 中创建一个名为:

的新文件
10-my-usb.rules

在此文件中添加此行

SUBSYSTEM=="usb",ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="XXXX", MODE="666", GROUP+="plugdev"

将XXXX替换为之前得到的值

然后重启你的 udev 规则:

sudo udevadm trigger

然后拔下重插就可以正常使用了