• 在树莓派下对多个串口转USB设备进行设备名称绑定操作


      在开发过程中,需要用一个树莓派链接多个串口转USB设备(GPS模块,数传模块等),在树莓派linux系统环境下,USB串口设备的命名规则是 /dev/ttyUSB0 ,/dev/ttyUSB1,/dev/ttyUSB2。串口设备的命名规则一般是根据设备插拔顺序进行命名,第一个插入的USB串口设备名称为/dev/ttyUSB0,第二个名称为 /dev/ttyUSB1,以此类推,但是在实验环境中,往往会发生USB设备插拔情况,从而导致串口设备命名混乱,为此,需要对串口设备进行名称绑定,固定串口设备名称。

      在实现串口名称绑定操作前,首先介绍一下udev。udev是Linux系统下的设备管理工具,运行在用户空间下,能够通过侦听内核发出的ueven事件来管理./dev目录下设备文件,当USB设备进行插拔时,udev能够在/dev下添加和删除设备文件。在默认规则下,udev为所有linux设备定义了内核设备名称,比如/dev/sda,/dev/hda。另外,linux用户也可以编写自定义的规则文件,自定义标志设备文件。 udev的规则文件存放在/etc/udev/rule.d 目录,规则的命名以.rules为后缀。

      下面给出树莓派linux环境下进行串口设备自定义命名步骤:

      1.查看串口设备系统自定义的名称

    pi@testclient:~ $ ls /dev | grep 'ttyUSB'
    ttyUSB0
    ttyUSB1
    

      2.根据串口号,查询串口设备的详细信息

      /dev/ttyUSB0

    pi@testclient:~ $ udevadm info /dev/ttyUSB0
    P: /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.0/ttyUSB0/tty/ttyUSB0
    N: ttyUSB0
    S: serial/by-id/usb-FTDI_FT232R_USB_UART_A8008Sxy-if00-port0
    S: serial/by-path/platform-3f980000.usb-usb-0:1.4:1.0-port0
    S: ttyUSB4G
    E: DEVLINKS=/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A8008Sxy-if00-port0 /dev/serial/by-path/platform-3f980000.usb-usb-0:1.4:1.0-port0 /dev/ttyUSB4G
    E: DEVNAME=/dev/ttyUSB0
    E: DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.0/ttyUSB0/tty/ttyUSB0
    E: ID_BUS=usb
    E: ID_MODEL=FT232R_USB_UART
    E: ID_MODEL_ENC=FT232Rx20USBx20UART
    E: ID_MODEL_FROM_DATABASE=FT232 USB-Serial (UART) IC
    E: ID_MODEL_ID=6001
    E: ID_PATH=platform-3f980000.usb-usb-0:1.4:1.0
    E: ID_PATH_TAG=platform-3f980000_usb-usb-0_1_4_1_0
    E: ID_REVISION=0600
    E: ID_SERIAL=FTDI_FT232R_USB_UART_A8008Sxy
    E: ID_SERIAL_SHORT=A8008Sxy
    E: ID_TYPE=generic
    E: ID_USB_DRIVER=ftdi_sio
    E: ID_USB_INTERFACES=:ffffff:
    E: ID_USB_INTERFACE_NUM=00
    E: ID_VENDOR=FTDI
    E: ID_VENDOR_ENC=FTDI
    E: ID_VENDOR_FROM_DATABASE=Future Technology Devices International, Ltd
    E: ID_VENDOR_ID=0403
    E: MAJOR=188
    E: MINOR=0
    E: SUBSYSTEM=tty
    E: TAGS=:systemd:
    E: USEC_INITIALIZED=9427187
    

      /dev/ttyUSB1

     udevadm info /dev/ttyUSB1
    P: /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB1/tty/ttyUSB1
    N: ttyUSB1
    S: serial/by-id/usb-FTDI_USB-RS232_Cable_FT2NUESH-if00-port0
    S: serial/by-path/platform-3f980000.usb-usb-0:1.2:1.0-port0
    S: ttyUSBGPS
    E: DEVLINKS=/dev/serial/by-id/usb-FTDI_USB-RS232_Cable_FT2NUESH-if00-port0 /dev/serial/by-path/platform-3f980000.usb-usb-0:1.2:1.0-port0 /dev/ttyUSBGPS
    E: DEVNAME=/dev/ttyUSB1
    E: DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB1/tty/ttyUSB1
    E: ID_BUS=usb
    E: ID_MODEL=USB-RS232_Cable
    E: ID_MODEL_ENC=USB-RS232x20Cable
    E: ID_MODEL_FROM_DATABASE=FT232 USB-Serial (UART) IC
    E: ID_MODEL_ID=6001
    E: ID_PATH=platform-3f980000.usb-usb-0:1.2:1.0
    E: ID_PATH_TAG=platform-3f980000_usb-usb-0_1_2_1_0
    E: ID_REVISION=0600
    E: ID_SERIAL=FTDI_USB-RS232_Cable_FT2NUESH
    E: ID_SERIAL_SHORT=FT2NUESH
    E: ID_TYPE=generic
    E: ID_USB_DRIVER=ftdi_sio
    E: ID_USB_INTERFACES=:ffffff:
    E: ID_USB_INTERFACE_NUM=00
    E: ID_VENDOR=FTDI
    E: ID_VENDOR_ENC=FTDI
    E: ID_VENDOR_FROM_DATABASE=Future Technology Devices International, Ltd
    E: ID_VENDOR_ID=0403
    E: MAJOR=188
    E: MINOR=1
    E: SUBSYSTEM=tty
    E: TAGS=:systemd:
    E: USEC_INITIALIZED=437296
    

      3 在  /etc/udev/rules.d/ 目录下新建一个规则文件。udev 是根据规则的字母顺序来解析规则文件的命名规则的,并根据匹配的规则进行相应设备的命名,所以解析顺序很关键。在pi中,已经存在一个规则文件99-com.rules,为了能解析新建规则, 把新建的规则文件命名为98-com-udev.rules,并将下面的信息复制到新建规则文件中。ID_SERIAL_SHORT、ID_PATH  字段用于标识设备,由步骤2可以提取出来,SYMLINK 指定需要命名的名称。

    ENV{ID_SERIAL_SHORT}=="A8008Sxy",ENV{ID_PATH}=="platform-3f980000.usb-usb-0:1.4:1.0",SYMLINK+="ttyUSB4G"
    ENV{ID_SERIAL_SHORT}=="FT2NUESH",ENV{ID_PATH}=="platform-3f980000.usb-usb-0:1.2:1.0",SYMLINK+="ttyUSBGPS"
    

      4 设备重启reboot ,重启之后,自定义命名规则将生效。插拔USB串口,自定义名称固定不变。

    pi@testclient:~ $ ls /dev/ | grep "ttyUSB"
    ttyUSB0
    ttyUSB1
    ttyUSB4G
    ttyUSBGPS
    

      5 自定义串口名称测试

    >>> import serial
    >>> ser=serial.Serial('/dev/ttyUSB4G',9600)
    >>> ser=serial.Serial('/dev/ttyUSBGPS',9600)
    >>> print(串口测试通过)
    

      

     参考链接:

    1.https://cloud.tencent.com/info/9ef3d565fa5a45f6ee60e6c996bb5b91.html

    2.http://www.cnblogs.com/lpfuture/p/6027091.html

  • 相关阅读:
    9.1 一周学习总结
    EasyUI(添加购物车小demo)
    助你了解react的小demo
    PHP(一)OOP基础
    继承的三种方式
    jQuery基础应用
    刘强1109 JavaScript基础二(分支与循环结构)
    JavaScript基础一(js基础函数与运算符)
    移动开发与响应式
    css基础语法三
  • 原文地址:https://www.cnblogs.com/mangojun/p/10820481.html
Copyright © 2020-2023  润新知