我有一个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的新手是什么 .
任何帮助非常感谢
1 回答
你没事,你必须遵守udev规则 .
首先,您必须识别您的设备 . 找到您设备的idProduct和idVendor . 您可以使用:
然后在rules.d文件夹(/etc/udev/rules.d)中创建一个名为的新文件:
在此文件中添加此行
将XXXX替换为之前获得的值
然后重新启动你的udev规则:
然后拔掉并重新插入,你可以使用它