参考
下固定USB串口设备号(防止设备重复挂载、保证对外接设备信息稳定读取)
linux下多个usb设备固定名称方法
为 USB设备绑定固定的设备名
最近,研究下了如何在linux绑定串口号,不然每次插拔后串口号可能变,就特别麻烦.
在csdn上参考了一些博客发现了两种方式,但都有各自的弊端.
1. 串口信息查询
查看有哪些串口
python -m serial.tools.list_ports
查看串口信息,测试了发现没有USB串口独立的特征信息, 唯一一个不变的3-3:1.0, 而这个实际上是代表电脑上这个USB口编号,也就是说只是连在这个USB端口上的串口都叫这个ID.
udevadm info /dev/ttyUSB0
2. 创建配置文件
创建规则, 文件名称随意.其中配置文件有两种方式,各有缺点
2.1 绑定USB端口号
sudo vi /etc/udev/rules.d/com_port.rules
内容, KERNELS表示硬件的usb接口名,不同编号,表示不同的usb接口.
下面是添加修改了三个USB端口
ACTION=="add",KERNELS=="1-1.2:1.0",SUBSYSTEMS=="usb",MODE:="0777",SYMLINK+="imu"
ACTION=="add",KERNELS=="3-3:1.0",SUBSYSTEMS=="usb",MODE:="0777",SYMLINK+="lidar"
ACTION=="add",KERNELS=="3-2:1.0",SUBSYSTEMS=="usb",MODE:="0777",SYMLINK+="my_serial3"
查看变换后的情况
ll /dev | grep ttyUSB
缺点: 只要是插到这个USB端口的串口都会被改为指定名.
2.2 绑定USB串口号
查看设备ID
lsusb
例如第四行的那个ID 10c4:ea60表示TTRS{idVendor}==10c4, ATTRS{idProduct}==ea60
sudo vi /etc/udev/rules.d/com_port.rules
内容, KERNELS表示硬件的usb主分类,.
下面是添加修改了两个个USB端口
KERNEL==”ttyUSB*”, ATTRS{idVendor}==”10c4”, ATTRS{idProduct}==”ea60”, MODE:=”0666”, SYMLINK+=”lidar”
KERNEL==”ttyUSB*”, ATTRS{idVendor}==”1a86”, ATTRS{idProduct}==”7523”, MODE:=”0666”, SYMLINK+=”base”
缺点: 当两个串口芯片相同时会出现ID完全相同的情况, 例如上图的两个串口芯片都为
Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light
ID也都为10c4:ea60.