1、情况说明

当设备接入过的出口设备后,设备的插入次序不同,会导致系统无法确认那个串口是那个设备,因此需要正对每个串口设备重新命名,命名之后将会准确的识别到对应的设备

2、查看设备信息

  1. ls /dev/tty*

image.png

3、查看串口设备信息

  1. udevadm info /dev/ttyUSB0

image.png

4、树莓派多串口设备命名绑定

查询USB串口设备

  1. ls -l /dev/tty*

image.png
获取到当前使用的USB口后,输入代码

  1. udevadm info /dev/ttyUSB0 //设备名视上图输出的usb端口名而定
  1. P: /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1/1-1.1:1.0/ttyUSB0/tty/ttyUSB0
  2. N: ttyUSB0
  3. L: 0
  4. S: serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.1:1.0-port0
  5. S: serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0
  6. E: DEVPATH=/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1/1-1.1:1.0/ttyUSB0/tty/ttyUSB0
  7. E: DEVNAME=/dev/ttyUSB0
  8. E: MAJOR=188
  9. E: MINOR=0
  10. E: SUBSYSTEM=tty
  11. E: USEC_INITIALIZED=18286069882
  12. E: ID_BUS=usb
  13. E: ID_VENDOR_ID=067b
  14. E: ID_MODEL_ID=2303
  15. E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
  16. E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
  17. E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI
  18. E: ID_VENDOR_FROM_DATABASE=Prolific Technology, Inc.
  19. E: ID_MODEL_FROM_DATABASE=PL2303 Serial Port
  20. E: ID_VENDOR=Prolific_Technology_Inc.
  21. E: ID_VENDOR_ENC=Prolific\x20Technology\x20Inc.
  22. E: ID_MODEL=USB-Serial_Controller
  23. E: ID_MODEL_ENC=USB-Serial\x20Controller
  24. E: ID_REVISION=0400
  25. E: ID_SERIAL=Prolific_Technology_Inc._USB-Serial_Controller
  26. E: ID_TYPE=generic
  27. E: ID_USB_INTERFACES=:ff0000:
  28. E: ID_USB_INTERFACE_NUM=00
  29. E: ID_USB_DRIVER=pl2303
  30. E: ID_PATH=platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.1:1.0
  31. E: ID_PATH_TAG=platform-fd500000_pcie-pci-0000_01_00_0-usb-0_1_1_1_0
  32. E: DEVLINKS=/dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.1:1.0-port0 /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0
  33. E: TAGS=:systemd:

你会得到下文类似内容,这就是usb口的内容,其中关键数据是

  1. E: ID_PATH=platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.1:1.0

之后打开规则文件

  1. sudo vim /etc/udev/rules.d/99-com.rules

将下面一段代码插入规则文件最后

  1. SUBSYSTEM=="tty", ENV{ID_PATH}=="platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.1:1.0", SYMLINK+="ttyUSBB" #"ttyUSBB"为人为设置的名称

如下图
image.png
保存退出重启。

  1. sudo reboot

重启后再次输入

  1. ls -l /dev/tty*

可见如下图
image.png
至此命名成功

背后逻辑是:每个物理上的USB口都有唯一的ID_PATH,我们起的名字跟ID_PATH绑定,即我们给每个物理上的USB接口命名。

上图的ttyUSBB->ttyUSB0意思是,我们的命名指向的USB系统命名。
因为有的串口助手,比如cutecom,去打开串口,串口号用的还会是系统的命名。
但是程序里调用接口就直接可以用我们自己改的名字了。
最后贴上命名完之后的图,插了两个usb。
image.png