物理 USB 埠的永久名稱
我在移動設備上使用帶有 Ubuntu Mate 的 Raspberry Pi 3 Model B,連接到 IMU、GPS 和兩個 LIDAR。
Ubuntu 16.04.2
核心版本 4.4.38-v7+
設備在通電後啟動,然後啟動驅動程序和程序以對數據進行採樣。這些程序必須預先分配設備的埠(ttyUSB* 或符號連結)。
每次我啟動時,USB 設備都會隨機選擇一個 ttyUSB*。這適用於 IMU 和 GPS,因為它們具有唯一的序列號等,但是,LIDAR 設備都使用相同的 UART 到 USB 晶片,彼此無法區分。
lsusb:
匯流排 001 設備 005:ID 0403:6014 Future Technology Devices International, Ltd FT232H 單高速 USB-UART/FIFO IC
匯流排 001 設備 004:ID 06c2:0033 Phidgets Inc.(原 GLAB)
匯流排 001 設備 007:ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light
Bus 001 設備 006:ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light
Bus 001 設備 003:ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514快速乙太網適配器
匯流排 001 設備 002:ID 0424:9514 Standard Microsystems Corp. SMC9514 集線器
匯流排 001 設備 001:ID 1d6b:0002 Linux Foundation 2.0 根集線器
我嘗試比較設備資訊以了解如何區分它們。
差異 <(udevadm 資訊 –name /dev/ttyUSB1) <(udevadm 資訊 –name /dev/ttyUSB2)
1,2c1,2
P: /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB1/tty/ttyUSB1
N: ttyUSB1
P: /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB2/tty/ttyUSB2
N: ttyUSB2
4,7c4,7
S: 串列/按路徑/平台-3f980000.usb-usb-0:1.2:1.0-port0
E: DEVLINKS=/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0 /dev/serial/by-path/platform-3f980000.usb-usb-0:1.2:1.0-port0
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
S: 串列/按路徑/平台-3f980000.usb-usb-0:1.3:1.0-port0
E: DEVLINKS=/dev/serial/by-path/platform-3f980000.usb-usb-0:1.3:1.0-port0 /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0
E:DEVNAME=/dev/ ttyUSB2
E:DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB2/tty/ttyUSB2
14,15c14,15
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_PATH=platform-3f980000.usb-usb -0:1.3:1.0
E: ID_PATH_TAG=platform-3f980000_usb-usb-0_1_3_1_0
28c28
- E:次要=1
- E:次要=2
31c31
- E:USEC_INITIALIZED=4706121921
- E:USEC_INITIALIZED=4706424041
在這個階段我想做的是為 Raspberry Pi 上的每個物理 USB 埠分配一個永久名稱,這樣,只要將設備插入正確的插座,它就可以工作。我嘗試了很多規則都沒有成功。多種組合:
KERNEL==“ttyUSB*",KERNELS==“1-1.2”,NAME=“ttyUSB0”,MODE=“0666” KERNEL==“ttyUSB*",KERNELS==“1-1.2:1.0”,NAME=” ttyUSB0”,MODE=“0666” KERNEL==“ttyUSB*",KERNELS==“1-1.3”,NAME=“ttyUSB1”,MODE=“0666” KERNEL==“ttyUSB*",KERNELS==“1- 1.3:1.0”,NAME=“ttyUSB1”,MODE=“0666” KERNEL==“ttyUSB*",KERNELS==“1-1.5”,NAME=“ttyUSB2”,MODE=“0666” KERNEL==“ttyUSB* “,KERNELS==“1-1.5:1.0”,NAME=“ttyUSB2”,MODE=“0666”
按照這裡的建議;https://askubuntu.com/questions/49910/how-to-distinguish-between-identical-usb-to-serial-adapters
從 udevadm 資訊來看,唯一的其他區別似乎是 MINOR 屬性,但我還沒有弄清楚如何使用這些資訊。到目前為止,我最好的猜測是:
SUBSYSTEM==“tty”, ATTRS{idVendor}==“10c4”, ATTRS{idProduct}==“ea60”, ATTRS{Minor}==“1”, SYMLINK+=“rplidar1”
SUBSYSTEM==“tty”, ATTRS {idVendor}==“10c4”, ATTRS{idProduct}==“ea60”, ATTRS{Minor}==“2”, SYMLINK+=“rplidar2”
但這似乎也不起作用(我也嘗試過 MINOR 和 minor )。
我找到了解決方案。以下規則將符號連結分配給給定設備的相應 USB 埠。您可能會擺脫 idVendor 和 idProduct 條款。
SUBSYSTEM==“tty”, KERNELS==“1-1.2”, ATTRS{idVendor}==“10c4”, ATTRS{idProduct}==“ea60”, SYMLINK+=“rplidar1”
SUBSYSTEM==“tty”, KERNELS= =“1-1.3”, ATTRS{idVendor}==“10c4”, ATTRS{idProduct}==“ea60”, SYMLINK+=“rplidar2”