当前位置: 代码网 > it编程>数据库>Mysql > Ubuntu如何固定USB串口设备端口号防止混乱

Ubuntu如何固定USB串口设备端口号防止混乱

2026年09月23日 Mysql 我要评论
前言在ubuntu中,有时使用多个usb设备时,出现usb端口号混乱;比如:a设备本来对应/dev/ttyusb0,b设备对应/dev/ttyusb1;发现重启系统后,a设备本来对应/dev/ttyu

前言

在ubuntu中,有时使用多个usb设备时,出现usb端口号混乱;

  • 比如:a设备本来对应 /dev/ttyusb0,b设备对应 /dev/ttyusb1;
  • 发现重启系统后,a设备本来对应 /dev/ttyusb1,b设备对应 /dev/ttyusb0,两个设备的分配的端口号不固定的情况。

linux是按照插入顺序对设备进行编号的;这种不稳定因素,使得编写驱动时麻烦,于是本文参考了linux社区和博客文章的方法,绑定各个usb设备的端口号。

一、不同串口设备绑定

1.1、查看usb设备端口信息

将串口设备插入usb口,通过lsusb查看端口信息。例如:

接入了两个新的usb设备,如下图红色框中的信息;一个是ft232(id是0403:6001)、一个是hl-340(id是1a86:7523);

id 0403:6001 表示usb设备的id(这个id由芯片制造商设置,可以唯一表示该设备)

0403  usb_device_descriptor.idvendor
6001  usb_device_descriptor.idproduct

1.2、创建配置文件

在/etc/udev/rules.d/下创建任意名称的规则配置文件,如:usb.rules。

命令如下:

sudo vi /etc/udev/rules.d/usb.rules

编辑信息:

kernel=="ttyusb*", attrs{idvendor}=="0403", attrs{idproduct}=="6001", mode:="0777", symlink+="gnss"
kernel=="ttyusb*", attrs{idvendor}=="1a86", attrs{idproduct}=="7523", mode:="0777", symlink+="ultrasound_serial"

匹配sys中内核名为ttyusb*的设备,属性匹配依据生产商编号idvendor和产品号idproduct, 设定读写权限为0777,;

符号链接名为gnss 对应ft232 usb, ultrasound_serial 对应 hl-340串口usb。

1.3、查看绑定情况

idvendor和idproduct由 lsusb  -vvv 命令查看

sudo udevadm control --reload-rules
sudo udevadm trigger

重新拔插两个串口设备

ls -l /dev |grep ttyusb

/dev/ultrasound_serial 指向/dev/ttyusb1;在程序里打开/dev/ultrasound_serial 就可以一直准确的打开指定的串口设备了;可以使用了。

1.4、使用绑定后的usb设备

例如使用ultrasound_serial 设备;打开串口,python代码:

u_serial  = serial.serial('/dev/ultrasound_serial', 9600)  

直接使用/dev/ultrasound_serial ,相当于使用/dev/ttyusb1

二、相同串口设备绑定

如果购买了两个相同的串口设备,比如都是ch341(id是1a86:7523),用上面的方法就无法区分和绑定了。

我们可以通过“kernels”的差异来绑定。

2.1 查询“kernels”

udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyusb0

看到如下信息:(ttyusb0 的“kernels”)

然后查询另一个usb设备,比如他的端口是ttyusb2, ttyusb2的“kernels”(我这里有三个串口,需要区分ttyusb0、ttyusb2 他两是都是ch341)

udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyusb2

 

能看到 ttyusb0 的“kernels”=="1-1:1.0"、 ttyusb2 的“kernels”=="1-2:1.0" 它两是有区别的。

2.2、创建配置文件

在/etc/udev/rules.d/下创建任意名称的规则配置文件,如:usb.rules。

命令如下:

sudo vi /etc/udev/rules.d/usb.rules

编辑信息:

kernel=="ttyusb*", kernels=="1-1:1.0", mode:="0777", symlink+="ultrasound_serial1"
kernel=="ttyusb*", kernels=="1-2:1.0", mode:="0777", symlink+="ultrasound_serial2"

匹配sys中内核名为ttyusb*的设备,根据kernels的号的不同进行绑定, 设定读写权限为0777,;

符号链接名为ultrasound_serial1 对应ttyusb0, ultrasound_serial2 对应ttyusb2。

1.3、查看绑定情况

idvendor和idproduct由 lsusb  -vvv 命令查看

sudo udevadm control --reload-rules
sudo udevadm trigger

重新拔插两个串口设备

ls -l /dev |grep ttyusb

/dev/ultrasound_serial1 指向/dev/ttyusb0;在程序里打开/dev/ultrasound_serial1 就可以一直准确的打开指定的串口设备了;可以使用了。

1.4、使用绑定后的usb设备

例如使用ultrasound_serial 设备;打开串口,python代码:

u_serial  = serial.serial('/dev/ultrasound_serial1', 9600)  

直接使用/dev/ultrasound_serial1 ,相当于使用/dev/ttyusb0

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com