Linux 绑定USB设备端口
1 根据设备ID绑定
方法特点:按照ID绑定的话不需要固定USB接口,它是根据设备自身的ID进行绑定,但是如果有多个设备的串口使用同一款串口芯片的话,会出现紊乱
查看需要绑定的设备的idVendor
和idpProduct
,例如我要绑定一个rplidar
的激光雷达
$ lsusb
新建一个规则文件:
$ sudo gedit /etc/udev/rules.d/com_rplidar.rules
自定义打开文件写入自定义规则。这里最好新建一个文件,不要覆盖以前的文件了。如果是相同设备还需要额外的辨别参数也可以添加额外的参数。我们只取前面的数值10c4
,ea60
,,后面的描述不要。
KERNEL=="ttyUSB*" , ATTRS{idVendor}=="10c4",ATTRS{idProduct}=="ea60",MODE:="0777" ,SYMLINK+="ttyRplidar"
然后使其作用:
$ sudo udevadm trigger
查看是否成功
$ ls -l /dev/ttyRplidar
lrwxrwxrwx 1 root root 7 Nov 12 22:22 /dev/ttyRplidar -> ttyUSB0
或者
ls /dev/tty*
如图,可以看到新增了一个设备,正是我们在规则文件中设置的别名。
如果不行的话先检测规则文件的格式有没有错误,接着将USB拔了再重插。
还有其他额外的设备需要则加一行,方法一样。
2 根据电脑USB硬件端口绑定,只要插入该USB端口即为设定设备名
方法特点:按照USB硬件ID绑定的话必须固定接口对应的设备,因为它只根据电脑自身的USB硬件地址确定,但是它可以解决设备使用同一款串口芯片导致ID相同的问题
有时候我们两个串口设备使用了痛苦的USB芯片,例如激光雷达和机械臂使用了同款的USB芯片,在终端中输入
$ lsusb
会发现两者的USB端口的VID和PID是相同的(10c4:ea60),所以开启了机械臂后,激光雷达启动时会指向到机械臂的端口。
将USB设备的接入的端口进行名称绑定,拔出或关闭USB设备后,在端口中输入
$ ls /dev
再插入或打开USB设备,输入
$ ls /dev
找到USB设备的名称(确定当前各个设备的串口名字,如机械臂是ttyUSB1,激光雷达是ttyUSB0),然后输入
$ udevadm info --attribute-walk --name=/dev/ttyUSB1
可以看到
...
looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.4/1-2.4.4/1-2.4.4:1.0/ttyUSB1/tty/ttyUSB1':
KERNEL=="ttyUSB1"
SUBSYSTEM=="tty"
DRIVER==""
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/ 1-2/1-2.4/1-2.4.4/1-2.4.4:1.0/ttyUSB1':
KERNELS=="ttyUSB1"
SUBSYSTEMS=="usb-serial"
DRIVERS=="cp210x"
ATTRS{port_number}=="0"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/ 1-2/1-2.4/1-2.4.4/1-2.4.4:1.0':
KERNELS=="1-2.4.4:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="cp210x"
ATTRS{authorized}=="1"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceClass}=="ff"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bInterfaceProtocol}=="00"
ATTRS{bInterfaceSubClass}=="00"
ATTRS{bNumEndpoints}=="02"
ATTRS{interface}=="CP2102 USB to UART Bridge Controller"
ATTRS{supports_autosuspend}=="1"
...
可以得知该设备现在使用的端口号为“1-2.4.4:1.0”,接下来开始编写绑定规则
$ sudo gedit /etc/udev/rules.d/ttyUSBLink.rules
在文件中添加
ACTION=="add",KERNELS=="1-2.4.4:1.0",SUBSYSTEMS=="usb",MODE:="0777", SYMLINK+="rplidar"
保存文件并重启PC,在终端中输入
$ ls -l /dev |grep ttyUSB
查看是否成功修改
注意:因为是绑定固定的端口,所以usb的接口不能随意更换位置,考虑以后在HUB上标注各个位置插的设备。