You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下如何阻止CDC-ACM驱动加载设备以适配WebUSB连接串口设备?

我来帮你拆解这个问题,分两部分给出具体的解决方案和分析:

方法一:无需修改桌面设置,阻止CDC-ACM驱动绑定目标设备

如果不想动桌面环境设置,你可以通过临时解绑驱动或者永久udev规则两种方式让CDC-ACM不抢占你的设备:

临时解绑(单次生效,重启后恢复)

  1. 先通过lsusb找到设备的VID和PID,比如假设是1234:5678
  2. 定位到CDC-ACM驱动的绑定目录:
    cd /sys/bus/usb/drivers/cdc_acm/
    
  3. 找到对应设备的节点(格式通常是usbX:Y.Z,也可以直接匹配VID:PID对应的路径),执行解绑:
    echo "1-1.2" > unbind  # 替换成你的设备实际路径
    
    解绑后CDC-ACM就不再占用这个设备,此时Chrome的WebUSB应该能正常声明接口。

永久生效(通过udev规则)

这种方式无需修改桌面设置,系统启动时会自动阻止CDC-ACM绑定目标设备:

  1. 创建udev规则文件:
    sudo touch /etc/udev/rules.d/99-block-cdc-acm.rules
    
  2. 编辑文件并写入规则(替换成你的设备VID和PID):
    SUBSYSTEM=="usb", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", ENV{MODALIAS}=""
    
    这条规则会让udev不为该设备生成驱动匹配的alias,从而阻止CDC-ACM自动加载。
  3. 重新加载udev规则生效:
    sudo udevadm control --reload-rules
    sudo udevadm trigger
    
    之后重新插拔设备,CDC-ACM就不会再绑定这个设备了。
方法二:修改USB描述符的可行性

完全可行!而且这是从根源上解决冲突的方法:

CDC-ACM驱动是针对USB设备类为0x02(通信类)、子类0x02(ACM)的设备自动加载的。如果你在设备固件里修改USB描述符,把接口类改成自定义类(0xFF),或者把ACM子类改成其他非标准值,Linux内核就不会识别它为CDC-ACM设备,自然不会加载对应的驱动。

另外,为了让WebUSB能正常访问这个设备,你还需要在描述符里添加WebUSB扩展属性:

  • 设备描述符设置bDeviceClass=0xFF(自定义类)
  • 新增WebUSB扩展描述符,指定允许访问的域名(调试阶段可以用0允许所有域名)

修改描述符后,设备插入Linux时系统不会自动加载CDC-ACM,WebUSB可以直接声明接口,不需要任何系统层面的设置修改。


内容的提问来源于stack exchange,提问作者Mascarpone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:10:16