我有一个 USB HID 设备,可以在两种不同的模式下工作。模式的选择基于发送给它的 USB 枚举/初始化数据包的顺序。
我使用的是运行 Raspbian 的 Raspberry Pi 3,但是如果我为桌面 Ubuntu 发行版编译代码,我也会看到同样的问题。
我遇到的问题是,linux 将 USB 设备识别为 HID 设备,然后发送它认为启动设备所需的命令序列,并且这可以正常工作并以“模式 1”启动设备。
不过,我需要在“模式 2”下启动设备,为此我需要发送一组略有不同的枚举/初始化命令。
我是 Linux 新手,但对 Windows 下的 LibUSB 和 LibUSBDotNet 非常有经验,并且可以在 Windows 下获得我想要的行为。
Windows 与 Linux 具有类似的行为,它会枚举设备并将其识别为 USB HID 设备,然后根据其认为合适的情况对其进行初始化,从而使设备进入“模式 1”。为了防止Windows这样做,我可以为设备创建一个LibUSB过滤驱动程序,然后替换默认驱动程序,因此Windows现在将进行初始枚举,意识到设备的VID和PID是由LibUSB过滤驱动程序管理的(而不是比 Windows HID 驱动程序)然后停止枚举/初始化 - 这允许我的代码接管并完成“模式 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
然后拔掉重新插上就可以正常使用了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)