1. 程式人生 > >樹莓派串列埠配置

樹莓派串列埠配置

由於樹莓派的uart不夠使用,所以我們採用的是usb轉串列埠。但是這個就出現了一個問題。當usb裝置根據插入的順序不同時,其裝置節點會不同,有時候是ttyUSB0,有時候是ttyUSB1或者其他。根據這個問題,經過百度找到了簡單的解決辦法。那就是通過udev來靜態設定檔案節點的名稱。關於udev這裡不做討論。我是直接套用的。

首先以ttyUSB0 為例:

輸入udevadm info -a /dev/ttyUSB0

列印資訊如下:

looking at device

'/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.0/ttyUSB0/tty/ttyUSB0':

KERNEL=="ttyUSB0"

    SUBSYSTEM=="tty"

    DRIVER==""

  looking at parent device

'/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.0/ttyUSB0':

KERNELS=="ttyUSB0"

    SUBSYSTEMS=="usb-serial"

    DRIVERS=="ch341-uart"

    ATTRS{port_number}=="0"

  looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.0':

    KERNELS=="1-1.4:1.0"

    SUBSYSTEMS=="usb"

    DRIVERS=="ch341"

    ATTRS{bInterfaceClass}=="ff"

    ATTRS{bInterfaceSubClass}=="01"

    ATTRS{bInterfaceProtocol}=="02"

    ATTRS{bNumEndpoints}=="03"

    ATTRS{authorized}=="1"

    ATTRS{supports_autosuspend}=="1"

    ATTRS{bAlternateSetting}==" 0"

    ATTRS{bInterfaceNumber}=="00"

  looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4':

 KERNELS=="1-1.4"

SUBSYSTEMS=="usb"

    DRIVERS=="usb"

    ATTRS{bDeviceSubClass}=="00"

    ATTRS{bDeviceProtocol}=="00"

    ATTRS{devpath}=="1.4"

 ATTRS{idVendor}=="1a86"

    ATTRS{speed}=="12"

    ATTRS{bNumInterfaces}==" 1"

    ATTRS{bConfigurationValue}=="1"

    ATTRS{bMaxPacketSize0}=="8"

    ATTRS{busnum}=="1"

    ATTRS{devnum}=="4"

    ATTRS{configuration}==""

    ATTRS{bMaxPower}=="96mA"

    ATTRS{authorized}=="1"

    ATTRS{bmAttributes}=="80"

    ATTRS{bNumConfigurations}=="1"

    ATTRS{maxchild}=="0"

    ATTRS{bcdDevice}=="0254"

    ATTRS{avoid_reset_quirk}=="0"

    ATTRS{quirks}=="0x0"

    ATTRS{version}==" 1.10"

    ATTRS{urbnum}=="20"

    ATTRS{ltm_capable}=="no"

    ATTRS{removable}=="removable"

 ATTRS{idProduct}=="7523"

    ATTRS{bDeviceClass}=="ff"

ATTRS{product}=="USB2.0-Serial"

.........列印資訊後面還有,但是這裡不需要,所以沒有貼出來........

好了,上面的藍色字型就是我們需要的資訊。

至於為什麼要選擇這個

looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4':裡面的資訊,而不是其他的,我的理解是,系統是根據這個裡面的idVendoridProduct來區分ttyUSB0ttyUSB1....USB轉串列埠裝置。

然後以同樣的方法得到其他的資訊。然後在目錄/etc/udev/rules.d下新建檔案188-usbtty.rules這個檔案命名可以不同,但是需要是.rules檔案。

在檔案裡面輸入內容

KERNEL=="ttyUSB*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", KERNELS=="1-1.2",NAME="ttyUSB0", SYMLINK+="myuart0"

KERNEL=="ttyUSB*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", KERNELS=="1-1.3",NAME="ttyUSB1", SYMLINK+="myuart1"

KERNEL=="ttyUSB*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", KERNELS=="1-1.4",NAME="ttyUSB2", SYMLINK+="myuart2"

KERNEL=="ttyUSB*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", KERNELS=="1-1.5",NAME="ttyUSB3", SYMLINK+="myuart3"

其中SYMLINK+="myuart0"就是你想要設定的靜態的檔案節點的名稱。重啟系統後可以檢視到如下: