【问题标题】:How can I prevent linux from initializing a USB HID device如何防止 linux 初始化 USB HID 设备
【发布时间】:2016-08-02 04:24:05
【问题描述】:

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

非常感谢任何帮助

【问题讨论】:

  • 是否要从内核中分离出来并自己施展魔法才能更改到模式 2?

标签: linux raspberry-pi usb hid libusb


【解决方案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

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

【讨论】:

    猜你喜欢
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2016-10-28
    相关资源
    最近更新 更多