【Linux】下固定USB串口设备号(防止设备重复挂载、保证对外接设备信息稳定读取)

查询串口号

  1. python -m serial.tools.list_ports  

【Linux】下固定USB串口设备号(防止设备重复挂载、保证对外接设备信息稳定读取)

查询串口号后,根据串口号列出串口详细信息,如:

  1. udevadm info /dev/ttyUSB0  

返回:

 【Linux】下固定USB串口设备号(防止设备重复挂载、保证对外接设备信息稳定读取)

根据这些信息重写串口设备命名规则,采用Linux的udev来自定义规则来管理设备名称

 【Linux】下固定USB串口设备号(防止设备重复挂载、保证对外接设备信息稳定读取)

打开文件sudo vi /etc/udev/rules.d/98-com.rules

如98-com.rules文件,根据串口信息

E: ID_SERIAL_SHORT=FTH7R3JS

E: SUBSYSTEM=tty

修改里面内容为下面

SUBSYSTEM=="tty",

ENV{ID_SERIAL_SHORT}=="A1051JVT",

SYMLINK+="ttyUSBname"     #这里为自定义的串口名字

 

注意:这里自定义名称不能跟原来的ttyUSB0等之类的相同,不然会错误的!!!!!!

 【Linux】下固定USB串口设备号(防止设备重复挂载、保证对外接设备信息稳定读取)

参考网址:http://superuser.com/questions/536478/how-to-lock-device-ids-to-port-addresses

-----------------------------

为 USB设备绑定固定的设备名
  移动机器人上有两个USB串口设备,分别是激光雷达和机器人底盘,Ubuntu为这两个设备的设备名分配的设备名ttyUSB0和ttyUSB1,但是设备名与设备之间的对应关系并不是固定的,是按设备接入系统的顺序依次分配的。先插入一个设备再插另一个设备可以确定设备与设备名的关系,但每次系统启动都需要插拔设备,十分麻烦。
  可以将串口映射到一个固定的设备名上,不论插入顺序如何都会讲设备映射到新的设备名上,我们只要使用新的设备名对设备进行读写操作就可以了。

实现步骤如下:
(1) 查看USB端口信息

  第一个设备是移动机器人底盘,第二个设备是激光雷达。我们需要的是这两个设备的ID,分别是1a86:7523和10c4:ea60。

(2) 建立端口映射关系

$ sudo touch /etc/udev/rules.d/base.rules
$ sudo vim /etc/udev/rules.d/base.rules
1
2
在文件中添加如下内容:
KERNEL==”ttyUSB*”, ATTRS{idVendor}==”1a86”, ATTRS{idProduct}==”7523”, MODE:=”0666”, SYMLINK+=”base”

$ sudo touch /etc/udev/rules.d/lidar.rules
$ sudo vim /etc/udev/rules.d/lidar.rules
1
2
在文件中添加如下内容:
KERNEL==”ttyUSB*”, ATTRS{idVendor}==”10c4”, ATTRS{idProduct}==”ea60”, MODE:=”0666”, SYMLINK+=”lidar”

查看映射结果:

————————————————