ubuntu 下 串口、USB设备绑定固定名称

博客讲述了Linux系统中udev设备管理工具如何解决串口和USB设备命名不固定的问题。udev允许用户定制设备名称,例如通过规则文件设置USB转串口设备如 ttyUSB* 的权限和符号链接,以实现固定命名。当遇到无法打开/dev/ttyUSB0或/dev/ttyS0的错误时,可能是因为用户不属于dialout组,需要将其添加到该组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录[-]


1、为什么串口设备、USB设备有绑定固定名称的需求

• /dev 目录下原有挂在静态设备太多

在/dev目录下存在的静态设备关联文件过于多,并且在系统启动时无法得知哪些设备是真实存在的。

• Linux下设备文件与实际硬件设备的映射关系不是确定的

比如系统中有两个USB转串口设备,每次开机启动时,由于加载顺序存在一定的不确定性,此时则系统中存在的设备文件 /dev/ttyUSB0 与 /dev/ttyUSB1 对应的硬件设备可能是不同的。


2、udev的使用

udev是Linux2.6内核之后默认的设备管理工具,其目标就是解决上面的两个问题,并且以守护进程的形式运行。udev和文件系统是独立的,可以让用户定制自己的系统,比如创建设备连接符,修改设备名称,更改设备属组,权限等。udev的配置文件处于 /etc/udev/udev.conf 目录下,按照配置文件在 /etc/udev/rules.d 目录下添加对应的rule文件即可。


3、设置 usb转串口设备 的例子

KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="imu"

• KERNEL 内核设备的名称,例如 ttyUSB* ,sda,等,是处于/dev 目录下的设备名称

每台设备都有一个idVendor:厂家标示 和 idProduct:产品标示。其中厂家标示是供应商ID,是唯一的,产品标示则是厂家自定义的ID。

通过 lsusb 可以查看USB的设备信息。

• MODE 

赋予设备权限。采用 0777 读写权限即可。

• SYMLINK

SYMLINK为 /dev/下的设备文件产生符号链接。因为 udev 只能为某个设备产生一个设备文件,所以为了不覆盖系统默认的 udev 规则产生的设备文件,推荐使用符号链接。


4、cannot open /dev/ttyUSB0 或 cannot open /dev/ttyS0

原因是因为 tty 属于 dialout 组别,可以先查看下当前用户所属的组别。比图用户名是ubuntu,则可以按下以下指令查看:

groups ubuntu

如果当前用户没有隶属于dialout,则将该用户加进去dialout组别。

sudo gpasswd --add ubuntu dialout

参考链接: www.aikejiao.com

 

Ubuntu系统中,固定USB设备的端口号是一个常见的需求,特别是在使用多个USB串口设备时。由于Linux内核默认为每次插入的USB设备动态分配端口号(如`/dev/ttyUSB0`, `/dev/ttyUSB1`等),当设备被拔出并重新插入后,其对应的设备文件名称可能会发生变化。这会导致应用程序无法正确识别设备或连接失败。 要实现USB设备端口号的固定绑定,通常通过udev规则来完成。这种方法基于设备的唯一属性(如供应商ID、产品ID或序列号)创建符号链接,从而确保设备始终映射到相同的路径。 ### 创建udev规则以固定USB设备端口号 1. **获取设备信息** 使用`lsusb`命令可以查看USB设备的供应商ID和产品ID: ```bash lsusb ``` 输出示例如下: ``` Bus 001 Device 005: ID 10c4:ea60 Silicon Labs CP210x UART Bridge ... ``` 其中`10c4`是供应商ID(`idVendor`),`ea60`是产品ID(`idProduct`)[^1]。 2. **查看设备属性** 使用`udevadm`命令查看设备的具体属性,用于编写更精确的udev规则: ```bash udevadm info --name=/dev/ttyUSB0 --attribute-walk ``` 找出可用于匹配的唯一属性,如`ATTRS{idVendor}`、`ATTRS{idProduct}`或`ATTRS{serial}`等。 3. **创建udev规则文件** 在`/etc/udev/rules.d/`目录下创建一个新的规则文件,例如`99-usb-serial.rules`: ```bash sudo nano /etc/udev/rules.d/99-usb-serial.rules ``` 添加如下格式的规则行,将设备绑定固定的符号链接名称: ```bash KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", SYMLINK+="lidar" ``` 上述规则表示:对于所有匹配`idVendor=10c4`和`idProduct=ea60`的USB串口设备,将其绑定到`/dev/lidar`路径,并设置访问权限为所有用户可读写[^4]。 4. **重启udev服务并验证规则** 更新udev规则并重新加载服务: ```bash sudo udevadm control --reload-rules sudo systemctl restart udev ``` 拔插设备后检查是否生成了正确的符号链接: ```bash ls -l /dev | grep ttyUSB ``` 预期输出应包含类似以下内容: ``` lrwxrwxrwx 1 root root 7 Nov 29 14:03 lidar -> ttyUSB0 crw-rw-rw- 1 root dialout 188, 0 Nov 29 14:03 ttyUSB0 ``` 表明设备已成功绑定至`/dev/lidar`,并且即使设备重新插入,该路径也不会改变[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shawn.zhang.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值