ubuntu20.04下如何防止同一类型串口设备插入USB口无法区分到底是从/dev/ttyUSB0还是/dev/ttyUSB1读取数据
设备插入电脑后,分别通过udevadm info -a -n /dev/ttyUSB0和udevadm info -a -n /dev/ttyUSB1指令查看相关USB设备的信息.从中可以看到其中一个设备位于busnum 1上,即总线1上,且位于端口3上,即devpath 3,根据这两个信息,可以有效区分该设备是插在哪个usb口上.
也可以通过lsusb -t指令查看具体情况,也即总线1端口3如下图:
然后在/etc/udev/rules.d/下面新建一个99-my-device-rules.rules的文件,其中99是为了最后加载,因为有很多rules文件是70等小数字开头的,数字越小越先加载.
文件内加入内容:
ACTION=="add", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{busnum}=="1", ATTRS{devpath}=="3", SYMLINK+="my_usb0_device"
这样系统在有USB设备插入id为总线1,端口为3的USB时,系统就会在/dev下建立一个名字为my_usb0_device的文件,我们只需要通过/dev/my_usb0_device读取USB数据就行了,虽然此时也会有/dev/ttyUSB0这个端口,但不影响从/dev/my_usb0_device读取数据.这样就能有效避免只有一个设备时,系统总是先有/dev/ttyUSB0,当第二个设备插入再有/dev/ttyUSB1的情况了,避免了起机冲突的问题.
上面文件输入后,需要
sudo udevadm control --reload-rules
sudo udevadm trigger
来使得新的rules文件生效.
此时重新插拔usb设备就会在/dev下出现my_usb0_device的文件或者输入指令
ls -l /dev | grep my_
就可以看到如下的数据,显示了类似的相应映射关系