前言
在Ubuntu中,有时使用多个USB设备时,出现USB端口号混乱;
比如:A设备本来对应 /dev/ttyUSB0,B设备对应 /dev/ttyUSB1;
发现重启系统后,A设备本来对应 /dev/ttyUSB1,B设备对应 /dev/ttyUSB0,两个设备的分配的端口号不固定的情况。
Linux是按照插入顺序对设备进行编号的;这种不稳定因素,使得编写驱动时麻烦,于是本文参考了linux社区和博客文章的方法,绑定各个USB设备的端口号。
一、查看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
二、创建配置文件
在/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。
三、查看绑定情况
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 就可以一直准确的打开指定的串口设备了;可以使用了。
四、使用绑定后的USB设备
例如使用ultrasound_serial 设备;打开串口,python代码:
u_serial = serial.Serial('/dev/ultrasound_serial', 9600)
直接使用/dev/ultrasound_serial ,相当于使用/dev/ttyUSB1
参考
1)https://www.cnblogs.com/long5683/p/11144420.html
2)https://blog.csdn.net/qq_32618327/article/details/103937933