方法一:
根据设备芯片的设备ID来确定插入设备的名字
第一步:创建自定义rules
sudo vim /etc/udev/rules.d/port.rules
第二步:按照Udev规则写入rules
KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="ea60", MODE:="6001", SYMLINK+="water"
注:KERNEL==”ttyUSB*” ,kernel代表设备在内核的名称,ttyUSB*代表ttyUSB开头的USB端口总称
ATTRS{idVendor}==”0403” ,"0403"对应水位计串口模块端口信息中ID 0403:6001中:前的地址
ATTRS{idProduct}==”6001” , "6001"对应水位计串口模块端口信息中ID 0403:6001中:后的地址
MODE:=”0777” ,MODE代表赋予串口端口的权限,"0777"是具体的权限
SYMLINK+=”water” ,SYMLINK代表别名,"water"=是具体的别名
第三步:重新插拔串口,就可以使用水位计的别名water了
例如:ROS launch文件里的名字<type=“string” value="/dev/ttyUSB1"/>改为type=“string” value="/dev/water"/>
方法二:
有时同厂家的产品,设备对应的VID和PID(供应商ID和产品识别ID)一致,无法通过上述方式绑定USB口,可采用如下方式。
# 查看usb口对应的kernels
udevadm info --attribute-walk --name=/dev/ttyUSB0 |grep KERNELS
在/etc/udev/rules.d目录下,创建usb.rules规则文件
sudo vim /etc/udev/rules.d/usb.rules
写入如下内容:
KERNEL=="ttyUSB*",KERNELS==“1-12:1.0”, MODE:=“0777”, GROUP:="dialout",SYMLINK+=“water”
KERNEL=="ttyUSB*",KERNELS==“1-10:1.0”, MODE:=“0777”, GROUP:="dialout",SYMLINK+=“voltage”
运行以下命令使修改立即生效:
sudo service udev reload
sudo service udev restart
# 上面两个命令不管用,可采用如下命令,本人尝试上述命令不管用,
# 又尝试下面这条命令,但仍不管用
sudo udevadm trigger
本人尝试上述各种方法,都不能生效,后创建规则文件后直接拔插USB,竟然可以了。
运行以下命令查看USB设备名更改情况,出现如下即为更改成功。
ls -l /dev |grep ttyUSB
采用以上方式,依次绑定所有的设备
参考链接 Linux系统下,绑定USB串口设备号,解决上电USBID随机情况_干拉白给然后玩手机的博客-CSDN博客
linux固定串口别名的两种方法_beiguodexuecsdn的博客-CSDN博客
ubuntu下绑定USB设备的串口名称(KERNELS硬件端口号绑定)_对神明认栽xb.的博客-CSDN博客_ubuntu绑定usb端口