저는 IMU, GPS 및 2개의 LIDAR에 연결된 모바일 장치에서 Ubuntu Mate와 함께 Raspberry Pi 3 Model B를 사용하고 있습니다.
우분투 16.04.2
커널 버전 4.4.38-v7+
전원이 공급된 후 장치가 부팅된 다음 드라이버와 프로그램을 실행하여 데이터를 샘플링합니다. 이러한 프로그램은 장치의 포트(ttyUSB* 또는 기호 링크)를 미리 할당해야 합니다.
부팅할 때마다 USB 장치는 일치하는 임의의 ttyUSB*를 선택합니다. 이는 고유한 일련 ID 등을 갖고 있는 IMU 및 GPS에 적합합니다. 그러나 LIDAR 장치는 모두 동일한 UART-USB 칩을 사용하며 서로 구별할 수 없습니다.
LSSB:
버스 001 장치 005: ID 0403:6014 Future Technology Devices International, Ltd FT232H 단일 HS USB-UART/FIFO I2C
버스 001 장치 004: ID 06c2:0033 Phidgets Inc.(이전 GLAB)
버스 001 장치 007: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART 브리지/myAVR mySmartUSB 표시등
버스 001 장치 006: ID 10c4: ea60 Cygnal Integrated Products, Inc. CP210x UART 브리지/myAVR mySmartUSB 표시등
버스 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 루트 허브
어떻게 구별할 수 있는지 알아보기 위해 기기 정보를 비교해보았습니다.
diff <(udevadm 정보--이름 /dev/ttyUSB1) <(udevadm 정보--이름 /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/플랫폼/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB2/tty/ttyUSB2
+ N: ttyUSB24,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/ttyUSB214,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_028c28
- E: 십진수=1
---
+ E: 십진수=231c31
- E: USEC_INITIALIZED=4706121921
---
+ E: USEC_INITIALIZED=4706424041
이 단계에서 제가 하고 싶은 일은 Raspberry Pi의 각 물리적 USB 포트에 영구 이름을 할당하여 장치가 올바른 소켓에 연결되어 있는 한 작동하도록 하는 것입니다. 나는 많은 규칙을 시도했지만 성공하지 못했습니다. 다양한 조합:
kernel=="ttyUSB*", kernel=="1-1.2", name="ttyUSB0", mode="0666" kernel=="ttyUSB*", kernel=="1-1.2:1.0", name=" ttyUSB0",MODE="0666" kernel=="ttyUSB*",kernel=="1-1.3",NAME="ttyUSB1",MODE="0666" kernel=="ttyUSB*",kernel=="1- 1.3:1.0", name="ttyUSB1", mode="0666" kernel=="ttyUSB*", kernel=="1-1.5", name="ttyUSB2", mode="0666" kernel=="ttyUSB* ", 커널=="1-1.5:1.0", name="ttyUSB2", 모드="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도 시도했습니다).
답변1
해결책을 찾았습니다. 다음 규칙은 특정 장치의 해당 USB 포트에 심볼릭 링크를 할당합니다. idVendor 및 idProduct 용어를 제거할 수도 있습니다.
하위 시스템 == "tty", 커널 == "1-1.2", ATTRS {idVendor} == "10c4", ATTRS {idProduct} == "ea60", SYMLINK+="rplidar1"
하위 시스템 == "tty" , 커널= "1-1.3", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="rplidar2"