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

Ubuntu下因Udev规则导致FTDI串口设备接入时断开所有串口

解决FTDI设备Udev规则干扰其他串口的问题

问题核心

你当前使用的Udev规则通过全局卸载ftdi_sio和usbserial模块实现SDK通信,但这会导致所有串口设备断开。本质原因是:SDK依赖libftdi直接访问USB原始设备,不需要系统的串口驱动绑定,而全局卸载模块会影响所有依赖该驱动的设备。

可行解决方案

方案1:阻止特定设备绑定到ftdi_sio驱动(推荐)

使用Udev的PROBE指令,跳过当前设备的驱动探测,避免ftdi_sio绑定,同时不影响其他设备的驱动正常工作。替换原有规则为:

ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE="0666", ENV{MODALIAS}="usb:v0403p6010d*dc*dsc*dp*ic*isc*ip*in*", PROBE="0"
  • PROBE="0":告诉Udev不要为该设备加载任何内核驱动,这样ftdi_sio不会绑定到它
  • MODE="0666":保证SDK有足够权限访问USB原始设备节点
  • 其他设备的ftdi_sio驱动绑定不受影响,不会断开

方案2:仅解绑当前设备的驱动(备选)

如果方案1无效,可以通过sysfs仅解绑当前设备的ftdi_sio驱动,而非全局卸载模块。规则修改为:

ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE="0666", RUN+="/bin/sh -c 'echo -n \"$kernel\" > /sys/bus/usb/drivers/ftdi_sio/unbind'"
  • $kernel是Udev内置环境变量,代表当前设备的内核路径,只会解绑当前设备的驱动,其他串口设备的驱动绑定不受影响
  • 同样保留MODE="0666"确保SDK权限

验证步骤

  1. 替换/etc/udev/rules.d/99-libftdi.rules中的原有规则
  2. 重新加载Udev规则:
    udevadm control --reload-rules && udevadm trigger
    
  3. 重新接入FTDI设备,检查:
    • 其他串口设备(如ttyUSB0)是否仍正常存在于/dev目录
    • SDK是否能正常与FTDI设备通信

为什么SDK无需tty设备也能通信

SDK使用libftdi库直接通过USB总线访问设备(对应/dev/bus/usb/下的原始设备节点),不需要系统串口驱动生成的/dev/ttyUSB*设备。只要设备权限足够,即使没有tty节点,SDK也能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:35:53