Linux下固定USB串口名称
以 USB 转串口的设备通常节点名为ttyUSBx
(x为0~n),Linux 内核会根据设备插入的顺序进行分配。如果仅仅以设备节点ttyUSBx
来区别是哪个设备,以为串口号是随时会发生改变的,没办法保证设备 A 就是 ttyUSB0,设备 B 就是 ttyUSB1。
我在使用 Rosmaster 驱动小车电机时,出现了串口不稳定的状况,不便于开发。所以我寻找了一个解决方案将 USB 串口名称映射为一个固定值。
udev 是 Linux kernel 的设备管理器,主要管理/dev
目录下的设备节点。遂可以通过自定义 udev 规则为串口设备创建固定的符号链接,例如将需要的电机串口固定为dev/ttyMotor
。
通过udevadm
获取设备路径
1 | udevadm info --query=path --name=/dev/ttyUSB0 |
记录下设备路径1-1.3:1.0
。
创建自定义 udev 设备管理文件
1
sudo nano /etc/udev/rules.d/99-rosmaster-serial.rules
基于前面的设备路径,定义 udev 规则
1
SUBSYSTEM=="tty", KERNELS=="1-1.3:1.0", SYMLINK+="ttyMotor"
需要将
KERNELS
替换为前面的设备路径,作为设备的唯一标识符。重载规则并测试是否可用
1
2
3
4
5sudo udevadm control --reload-rules # 重新加载规则
sudo udevadm trigger # 触发设备重新识别
# 验证符号链接是否创建成功
ls -l /dev/ttyMotor # 应指向实际设备(如ttyUSB0)
这样就可以通过固定的串口名称ttyMotor
映射到电机串口进行开发了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 KiCheng's Blog!