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

如何防止linux初始化USB HID设备,linux,raspberry-pi,usb,hid,libusb,Linux,Raspberry Pi,Usb,Hid,Libusb,我有一个USB HID设备,可以在两种不同的模式下工作。模式的选择基于发送给它的USB枚举/初始化数据包的顺序 我使用的是运行Raspbian的Raspberry Pi 3,但是如果我为我的桌面Ubuntu发行版编译代码,我也会看到同样的问题 我遇到的问题是,linux将USB设备识别为HID设备,然后发送它认为启动设备所需的命令序列,这将正常工作并以“模式1”启动设备 但是,我需要在“模式2”下启动设备,为此,我需要发送一组稍有不同的枚举/初始化命令 我是linux新手,但对windows下的

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

然后拔掉电源插头,重新插上电源,你可以正常使用它

是不是从内核中分离出来,自己变魔术来推迟模式2的更改?