在开发过程中,需要用一个树莓派链接多个串口转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=FT232R\x20USB\x20UART
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-RS232\x20Cable
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

最新文章

  1. dagger2系列之Scope
  2. wpf 保存控件中的内容为图片格式
  3. 挑灯熬夜看《Build 2015 Keynote》图文笔记
  4. CentOS 7下载地址(ISO文件)
  5. 15、SQL Server 触发器
  6. penetration testers渗透测试,hack,vnc,nat,
  7. oracle生成随机数
  8. zookeeper 安装
  9. Log4j、Log4j 2、Logback、SFL4J、JUL、JCL的比较
  10. 从无到有-在create-react-app基础上接入react-router、redux-saga
  11. 常见模块(七) re模块
  12. [Big Data - Kafka] Kafka设计解析(五):Kafka Benchmark
  13. websql的使用/phonegap操作数据库 sqlite
  14. Oracle创建禁止DDL的触发器
  15. Power Of Two leetcode java
  16. const typedef 和指针的问题(这里必须初始化的才初始化了,不必须的则没有初始化)
  17. Capacity To Ship Packages Within D Days LT1011
  18. 利用Makefile安装helloworld模块(速成)
  19. C#.NET常见问题(FAQ)-如何使用变量动态添加控件
  20. R的any和all

热门文章

  1. POJ 1000
  2. 三维重建面试4:Jacobian矩阵和Hessian矩阵
  3. OpenCV:OpenCV图像旋转的代码
  4. JSP_内置对象_out
  5. js消息框
  6. 浅析Python3中的bytes和str类型 (转)
  7. python的多版本安装以及常见错误(长期更新)
  8. 《奋斗吧!菜鸟》 第八次作业:Alpha冲刺 Scrum meeting 2
  9. (转载)关于初学者上传文件到github的方法
  10. Spring Cloud-hystrix使用例子(七)