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

标签 linux raspberry-pi usb hid libusb

我有一个可以在两种不同模式下工作的 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

然后拔掉再插上就可以正常使用了

关于linux - 如何防止 linux 初始化 USB HID 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36558321/

相关文章:

linux - Puppet:是否可以在不知道我的客户地址的情况下设置主/客户架构?

linux - 进程本地覆盖名称解析?

linux - 如何在 bash 中使用 while 循环自动安排任务?

python - 如何检测树莓派 GPIO 输入的变化

android - USB 调试 - 为 Epson Moverio 安装驱动程序的问题

regex - 从 Unix 中的一行中提取字符串

python - 如何播放随机 WAV。来自 Python 文件夹的示例?

raspberry-pi - 在 RaspberryPi 中捕获/记录音频输入

linux - 蓝牙连接失败,使用 bluetoothctl 命令

android - 在没有 root 的情况下在 Android 上使用 libusb