当前位置:首页>Linux>Linux 环境下让动态的 ttyUSB* 设备使用固定端口

Linux 环境下让动态的 ttyUSB* 设备使用固定端口

  • 2026-09-17 20:28:12
Linux 环境下让动态的 ttyUSB* 设备使用固定端口

在 Ubuntu 22.04 中,无法强制固定 /dev/ttyUSB0、/dev/ttyUSB1 这类动态编号(内核按插入顺序分配),但可以通过 udev 规则 为设备创建固定符号链接(如 /dev/ttyUSB_FIXED),实现 “固定访问路径” 的效果。

一、两种固定方案

方案 1:按设备唯一 ID 绑定(设备换端口仍有效)

用 idVendor(厂商 ID)+ idProduct(产品 ID)+ serial(序列号) 唯一识别设备,适合同型号多设备场景。

方案 2:按物理 USB 端口绑定(端口固定,换设备仍有效,本文介绍这种方式)

用 KERNELS(硬件端口路径) 绑定,适合 “固定端口插固定设备” 的场景

二、USB端口规划

根据板子的USB接口布局,规划分配USB端口功能如下表:

三、操作步骤:方案2按物理端口绑定(换设备不换端口)

1. 获取端口路径(KERNELS)

获取端口路径命令如下:
udevadm info -a -n /dev/ttyUSB0 | grep KERNELS

示例输出:KERNELS=="1-2.3"(代表 USB 物理端口)

2. 编写端口绑定规则

绑定规则文件内容示例如下所示:

创建绑定规则文件命令:
sudo vim /etc/udev/rules.d/99-usb-port-fixed.rules

也可以直接Copy下方的配置文件作为模版,在同一规则文件中添加多条规则,为每个设备 / 端口分配不同固定名:

# ==============================================# ROS 机器人 4路 USB 固定端口规则# 永久固定,插拔/重启/换设备都不变# ==============================================# 端口 1-1 固定名 IMU0SUBSYSTEM=="tty", KERNEL=="ttyUSB*|ttyACM*", KERNELS=="1-1", MODE:="0666", GROUP:="dialout", SYMLINK+="ttyUSB_IMU0"# 端口 5-1.1 固定名 GPS_GPSD_CHRONYSUBSYSTEM=="tty", KERNEL=="ttyUSB*|ttyACM*", KERNELS=="5-1.1", MODE:="0666", GROUP:="dialout", SYMLINK+="ttyUSB_GPS_GPSD_CHRONY"# 端口 5-1.2 固定名 GPS_ROSSUBSYSTEM=="tty", KERNEL=="ttyUSB*|ttyACM*", KERNELS=="5-1.2", MODE:="0666", GROUP:="dialout", SYMLINK+="ttyUSB_GPS_ROS"# 端口 4-1 固定名 OTHERSUBSYSTEM=="tty", KERNEL=="ttyUSB*|ttyACM*", KERNELS=="4-1", MODE:="0666", GROUP:="dialout", SYMLINK+="ttyUSB_OTHER"
3. 加载绑定规则文件
使用如下命令让系统加载配置文件:
sudo udevadm control --reload-rulessudo udevadm triggersudo usermod -aG dialout $USER
4. 绑定设备绑定结果
查看 /dev 目录下挂载的设备清单:
ls -l /dev/ttyUSB_*

四、常见问题

规则不生效:检查 ID / 序列号是否正确、文件后缀为 .rules、重载命令执行完整。

权限不足:确保加入 dialout 组:sudo usermod -aG dialout $USER,重新登录生效。

五、应用配置修改
1. 修改 gpsd 配置文件,指定新映射的端口,修改完成之后,记得重启一下服务,命令如下:
sudo systemctl restart gpsd
2. 修改 ROS GPS包的配置文件
3. 修改 ROS 包的 IMU 设备串口路径
最后,ROS包修改完之后,记得重新编译哦!

最新文章

随机文章