Ubuntu USB 转串口设备开机后乱序识别解决方案
在 Linux 系统中,特别是 Ubuntu 中,USB 转串口设备可能会因为内核加载顺序或其他硬件变化而导致设备名称随机分配。这种现象通常表现为 /dev/ttyUSB*
设备编号的变化。
解决方案概述
通过创建 udev 规则来固定 USB 转串口设备的命名方式可以有效解决这一问题。udev 是 Linux 下用于动态管理设备文件的子系统,允许管理员基于特定条件自定义设备路径或符号链接。
实现方法
以下是具体实现步骤:
-
查找设备属性 使用
lsusb
和dmesg | grep tty
命令查看当前连接的 USB 转串口设备及其对应的设备节点。运行以下命令获取设备的具体信息:
Bash
ls -l /sys/class/tty/ttyUSB*/device/driver/
同时可以通过
udevadm info --query=all --name=/dev/ttyUSBX
获取更详细的设备属性(其中 X 表示具体的设备号)。这些属性包括供应商 ID (ID_VENDOR_ID
)、产品 ID (ID_MODEL_ID
) 及序列号等唯一标识符。 -
编写 udev 规则 创建一个新的 udev 规则文件,例如
/etc/udev/rules.d/99-usb-serial.rules
,并添加如下内容作为模板:plaintext
SUBSYSTEM=="tty", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", SYMLINK+="custom_name%d"
将
xxxx
替换为实际的供应商 ID,yyyy
替换为产品的 ID,而%d
则表示自动追加索引以区分多个相同类型的设备。如果需要进一步细化规则,还可以加入其他匹配项如ATTRS{serial}
或者KERNELS
来提高准确性。 -
重新加载 udev 配置 完成编辑之后执行下面两条指令使更改生效:
Bash
sudo udevadm control --reload-rules && sudo udevadm trigger
-
验证结果 断开再重插目标 USB 转串口装置确认其是否被赋予预期固定的别名;或者重启计算机测试启动过程中的稳定性。
示例代码片段
假设某款 USB 转串口模块具有以下特征参数:
- Vendor ID: 067b
- Product ID: 2303
- Serial Number: FTGN1ZQW
那么相应的配置条目应写成这样:
plaintext
SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", ATTRS{serial}=="FTGN1ZQW", SYMLINK+="fixed_serial_port"
此后无论何时何地接入该型号实例都会映射到同一逻辑位置即 /dev/fixed_serial_port
.