如何防止 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
然后拔下重插就可以正常使用了
我有一个可以在两种不同模式下工作的 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
然后拔下重插就可以正常使用了