不识别usb cdc虚拟串口设备

1.关于你要提交的问题

Q:是否在社区搜索了相关问题 (使用 “x” 选择)

  • [ x] 没有类似的issue

2. 详细叙述

(1) 具体问题

A:插上USB虚拟串口设备(STM32 USB CDC),日志显示USB设备枚举成功,但是设置里不显示新设备连接,lsusb也看不到

(2) 电脑具体配置和固件版本

  • 处理器:r7-4800u
  • 显卡:核显
  • 运行内存与储存内存 :16+512
  • FydeOS 版本:v15.1

(3) 详细日志
2022-11-27T08:39:18.610107Z INFO kernel: [ 3012.696458] usb 1-2: new full-speed USB device number 15 using xhci_hcd
2022-11-27T08:39:18.763116Z INFO kernel: [ 3012.849649] usb 1-2: New USB device found, idVendor=f407, idProduct=4001, bcdDevice= 1.00
2022-11-27T08:39:18.763156Z INFO kernel: [ 3012.849660] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
2022-11-27T08:39:18.763167Z INFO kernel: [ 3012.849665] usb 1-2: Product: MCU
2022-11-27T08:39:18.763174Z INFO kernel: [ 3012.849668] usb 1-2: Manufacturer: QDU-RM
2022-11-27T08:39:18.763177Z INFO kernel: [ 3012.849671] usb 1-2: SerialNumber: 123456
2022-11-27T08:39:18.795094Z INFO kernel: [ 3012.881890] cdc_acm 1-2:1.0: ttyACM0: USB ACM device

A:

找到问题了,chrome os支持连接到linux子系统的usb设备的Pid和Vid是硬编码在系统中的/usr/bin/permission_broker文件中,如果要添加设备只能重新编译整个系统。参考源码:https://chromium.googlesource.com/chromiumos/platform2/+/refs/heads/main/permission_broker/deny_claimed_usb_device_rule.cc 200行左右。
我将这个文件提取出来,使用十六进制编辑器查找某个白名单内的USB设备的pid和vid,并将其替换成为我自己的USB设备的pid和vid,替换原来的文件并重启后,linux子系统就能够正常连接我的虚拟串口设备了。



如图所示,我将 Sparkfun 的 {0x1b4f, 0} 改成了我的设备的ID {0xf407,0x4001},重启之后他就出现在设置里的USB设备管理里面。

1 个赞

看来原生ChromeOS把生成204的网站硬编码到系统里导致在国内网络使用时报错的问题也能通过类似的方法解决 :thinking:

原理上没问题,这比自己重新编译快多了