首页 文章

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

提问于
浏览
1

我有一个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 回答

  • 1

    你没事,你必须遵守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
    

    然后拔掉并重新插入,你可以使用它

相关问题