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

时间:2016-04-11 20:09:41

标签: linux raspberry-pi usb hid libusb

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

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

我遇到的问题是linux正在将USB设备识别为HID设备,然后发送它认为启动设备所需的命令序列,这样可以正常工作并在"模式1&启动设备#34;

但是我需要在"模式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 个答案:

答案 0 :(得分: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

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