我正在尝试在 Linux 下使用 Webusb 连接串行设备。
我已经能够列出设备并打开它,但无法声明该接口。 Chrome 抱怨设备正忙,为了解决这个问题,我需要取消注册 CDC-ACM 驱动程序。
有没有办法在不更改桌面的情况下阻止 CDC-ACM 驱动程序加载设备?也许我可以更改 USB 描述符?
如果您可以更改设备描述符,则修改 CDC-ACM 接口报告的协议、类和子类,以便将其标记为供应商特定 (0xff)。 CDC-ACM 驱动程序将不再识别该接口并绑定到它。
为了完整起见,如果您可以对桌面进行更改,那么您可以在
/etc/modprobe.d/blacklist
中将 USB 串行驱动程序完全列入黑名单,或者您可以编写一个专门针对该设备运行的 udev 规则(被识别为总线路径或供应商)和产品 ID)并执行脚本来解除绑定驱动程序。
我已经能够在设置后(规则的最后几行)使用此 udev 行取消绑定
cdc_acm
接口:
ATTR{idProduct}=="<mypid>", ATTR{idVendor}=="<myvid>", RUN+="/usr/local/bin/unbind-cdc-acm.sh %k:1.0"
unbind-cdc-acm.sh
的内容是:
#!/bin/sh
echo -n $1 > /sys/bus/usb/drivers/cdc_acm/unbind
这可以通过将驱动程序解除绑定到具有productId=
希望有帮助。