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

在树莓派下对多个串口转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.查看串口设备系统自定义的名称

1

2

3

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

ttyUSB0

ttyUSB1

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

  /dev/ttyUSB0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

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 指定需要命名的名称。

 

1

2

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串口,自定义名称固定不变。

1

2

3

4

5

pi@testclient:~ $ ls /dev/ grep "ttyUSB"

ttyUSB0

ttyUSB1

ttyUSB4G

ttyUSBGPS

  5 自定义串口名称测试

1

2

3

4

>>> 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

你可能感兴趣的:(在树莓派下对多个串口转USB设备进行设备名称绑定操作)