在ubuntu上,绑定usb串口的几种方式(udev)

udev 是通过内核产生设备名增加别名的方式来达到 不管设备连接的顺序而维持一个统一的设备名。内核通常会产生自定义的设备名 如sda1 sdb1等

,但是udev可以通过设备的其他信息如总线 ,生产商等不同来区分不同的硬件设备。在/etc的 目录下。

例如 :ubuntu内核中,产生sda 设备名,可以通过制定 udev规则,让udev 除了产生/dev/sda/ 设备文件外, 另外创建    一个符号链接叫 /dev/name  ,这样在ros串口处理的程序中,就 可以使用 产生的新的 设备名。

通过lsusb  命令可以查看到所有外接usb的接口设备的描述列表,可以得到id product和id VENDOR的数值,来进行后续的绑定。  ls /dev 可以查看所有 外接串口设备的名字列表。

首先 ,所有制定的udev 规则最终 会在 /etc/ udev /rule.d 这个文件夹下面 。 

通过芯片的特定码,来产生软链接别名

可以一个脚本如下: 

echo  'KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0666", GROUP:="dialout",  SYMLINK+="dashgo"' >/etc/udev/rules.d/ch34x.rules

绑定 1a86 7523 的串口设备, 会在/etc/udev/rule.d 下 产生 相应的 规则文件,ttyUSB产生新的别名即 dashgo。

但是有时候, 很多厂商由于特殊原因,在串口芯片上,写入的设备号的名字 都是一样的。

所以要用到 另外一个办法,就是通过绑定设备的硬件端口号 ,如下命令 

echo  'KERNELS=="3-1.1",  MODE:="0666", GROUP:="dialout",  SYMLINK+="usb_0"' >/etc/udev/rules.d/usb.rules  

将硬件上属于 3-1.1 的设备号映射到USB_0上 , 可以通过以下命令 查看 板子上的硬件端口的内核设备名 。

udevadm info --attribute-walk --name=/dev/ttyACM0 ;  

该条命令会将 ttyACM0所对应的硬件端口的kernel设备名 显现出来, 得到KERNEL== '1-5.5.4', 而不是之前的ttyUSB0,因为这个在linux上插拔的时候,会根据先后顺序来产生usb/acm0 ,usb/acm1 ,

所以我们 在利用该值 , 如上 在udev 添加端口设备规则进行串口的绑定,只不过绑定的是 具体的usb硬件对应的 KERNELS值, 这样便可以像在windows一样将端口名与板子的硬件位置绑定。

总的命令如下:

1. 查看各个串口的编号(或者叫做识别码)

dmesg | grep ttyUSB

2. 进入 /etc/udev/rules.d 目录下

新建文件 如: com.rules

编辑文件内容为: 

KERNELS=="1-2.3:1.0",MODE:="0777",GROUP:="dialout",SYMLINK+="com"

保存退出,其中  1-2.3  即为编号

3. 重启服务

sudo service udev reload

sudo service udev restart

4.拔出串口重新插入

sudo service udev reload

sudo service udev restart

### 如何在Ubuntu操作系统中配置和使用串口绑定 #### 权限设置 为了使用户能够访问串口,在Ubuntu系统中需确保当前用户具有足够的权限来操作串口设备。这可以通过将用户添加到`dialout`组实现,命令如下: ```bash sudo gpasswd --add $USER dialout ``` 此命令执行后,建议注销并重新登录以应用新的组成员身份变化[^4]。 #### 自动化串口命名规则 由于每次重启或插拔USB串口适配器时,Linux内核可能会分配不同的文件路径给同一物理接口(如 `/dev/ttyUSB0`, `/dev/ttyUSB1` 等),因此推荐创建基于持久属性的符号链接来进行固定的映射关系设定。具体做法涉及编辑udev规则文件,以便根据特定硬件特征识别相应设备,并为其指定一个恒定不变的名字。 对于CH340芯片这类常见的USB-to-Serial转换器来说,可以按照下面的方式建立稳定连接: 1. 插入目标USB串口模块; 2. 使用 `ls /dev/serial/by-id/*` 或者 `dmesg | grep tty` 查看新加入系统的设备信息及其对应的临时节点名; 3. 创建自定义的udev规则文件,通常位于 `/etc/udev/rules.d/` 目录下,比如命名为 `99-ch340.rules`; 4. 编辑上述规则文件,添加一行类似于这样的内容: ```plaintext SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="my_serial_device" ``` 这里假设 CH340 设备制造商ID(`idVendor`) 和产品 ID (`idProduct`) 分别为 "1a86" 和 "7523". 实际数值可能有所不同,请依据实际情况调整;最后部分 `"SYMLINK+="my_serial_device"` 定义了一个友好的固定名称供后续编程调用[^2]. 完成以上步骤之后,当再次插入相同的 USB串口装置时,它将会被挂载至预设的位置 `/dev/my_serial_device`. #### 测试验证 现在应该可以用任何支持POSIX标准API的应用程序去测试这个静态指派的串行端口了。例如,利用minicom或者cutecom图形界面工具尝试发送接收数据流,确认一切正常工作。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值