在樹莓派下對多個串口轉USB設備進行設備名稱綁定操做

  在開發過程當中,須要用一個樹莓派連接多個串口轉USB設備(GPS模塊,數傳模塊等),在樹莓派linux系統環境下,USB串口設備的命名規則是 /dev/ttyUSB0 ,/dev/ttyUSB1,/dev/ttyUSB2。串口設備的命名規則通常是根據設備插拔順序進行命名,第一個插入的USB串口設備名稱爲/dev/ttyUSB0,第二個名稱爲 /dev/ttyUSB1,以此類推,可是在實驗環境中,每每會發生USB設備插拔狀況,從而致使串口設備命名混亂,爲此,須要對串口設備進行名稱綁定,固定串口設備名稱。html

  在實現串口名稱綁定操做前,首先介紹一下udev。udev是Linux系統下的設備管理工具,運行在用戶空間下,可以經過偵聽內核發出的ueven事件來管理./dev目錄下設備文件,當USB設備進行插拔時,udev可以在/dev下添加和刪除設備文件。在默認規則下,udev爲全部linux設備定義了內核設備名稱,好比/dev/sda,/dev/hda。另外,linux用戶也能夠編寫自定義的規則文件,自定義標誌設備文件。 udev的規則文件存放在/etc/udev/rule.d 目錄,規則的命名以.rules爲後綴。linux

  下面給出樹莓派linux環境下進行串口設備自定義命名步驟:bash

  1.查看串口設備系統自定義的名稱工具

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

  2.根據串口號,查詢串口設備的詳細信息測試

  /dev/ttyUSB0spa

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

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 指定須要命名的名稱。code

 

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串口,自定義名稱固定不變。orm

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

  5 自定義串口名稱測試htm

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

相關文章
相關標籤/搜索