如果有两个以上的USB设备,他们的Vendor ID和Product ID都一样,那么无法通过Vendor ID和Product ID来区分它们。需要采取其他方式来指定对应的USB插口和/dev/ttyUSB的序号。有以下两条思路:
1,通过设备的序列号(Serial Number)来区分它们。每个USB设备都有一个唯一的序列号,可以在设备的属性中找到。可以通过在udev规则中设置SYMLINK选项来为每个设备指定一个独特的符号链接名,从而将其与/dev/ttyUSB的特定序号关联起来。
2,在插入USB设备时,手动将其插入到特定的USB插口中。然后可以通过udev规则中的ATTRS选项来匹配设备的属性,以便将其与特定的/dev/ttyUSB序号关联起来。例如,可以使用ATTRS{serial}属性来匹配设备的序列号。
需要注意的是,这种方法需要手动操作USB插口,一旦设备被插入到不同的插口中,它们的/dev/ttyUSB序号可能会发生变化。因此,最好将每个设备插入到固定的USB插口中,以确保它们始终与相同的/dev/ttyUSB序号关联。
具体如何指定某个物理上usb插口为给定的/dev/ttyUSB序号
要将特定的物理USB插口与给定的/dev/ttyUSB序号绑定,可以使用udev规则。
首先,需要确定要绑定的USB设备的Vendor ID 和 Product ID,以及设备的序列号(Serial Number),可以使用lsusb命令查看:
$ lsusb
Bus 001 Device 003: ID 0c45:7603 Microdia USB Camera (Asus F3SA notebook integrated webcam)
Bus 001 Device 002: ID 064e:a101 Suyin Corp. Acer CrystalEye Webcam
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
将要绑定的USB设备插入到要绑定的物理USB插口中。
创建一个udev规则文件,例如/etc/udev/rules.d/99-usb-serial.rules:
$ sudo vi /etc/udev/rules.d/99-usb-serial.rules
在规则文件中添加以下内容,将设备的Vendor ID、Product ID替换成实际的值,将ATTRS{devnum}替换为要绑定的物理USB插口的编号(可以使用lsusb -t命令查看):
SUBSYSTEM=="tty", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="xxxx", ATTRS{devnum}=="xx", SYMLINK+="ttyUSB0"
其中,SUBSYSTEM=="tty"表示只对tty设备进行匹配,ATTRS{idVendor}和ATTRS{idProduct}分别指定设备的Vendor ID和Product ID,ATTRS{devnum}指定设备所在的物理USB插口编号,SYMLINK+="ttyUSB0"表示将匹配的设备链接到/dev/ttyUSB0。
重载udev规则,使其生效:
$ sudo udevadm control --reload-rules
重新插入设备,检查设备是否被正确地链接到/dev/ttyUSB0:
$ ls -l /dev/ttyUSB0
lrwxrwxrwx 1 root root 15 Jul 28 10:35 /dev/ttyUSB0 -> ttyACM0
如果设备被正确地链接到/dev/ttyUSB0,那么就可以使用这个设备了。如果需要绑定多个设备,可以创建多个规则文件,每个文件为一个设备指定一个唯一的链接名称。