따라서 USB-직렬 장치에 몇 가지 문제가 있습니다. 라즈베리 파이 컴퓨팅 모듈이 부팅될 때 먼저 이 특정 USB-직렬 장치를 열거합니다. 이 특정 USB-직렬 장치는 다른 USB-직렬 장치 포트(나중에 생성되어 나타냄)와 "충돌"합니다. 모뎀/GPS의 여러 포트.
따라서 기본적으로 USB-직렬 장치가 연결되지 않은 경우 포트는 다음과 같습니다.
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3
이 USB를 직렬 장치에 연결하면 다음과 같이 추가됩니다.
/dev/ttyUSB4
그러나 재부팅하거나 종료한 다음 백업을 시작하면 이전에 ttyUSB4였지만 현재는 ttyUSB0인 USB-직렬 장치를 제외하고 목록에 동일하게 표시됩니다. 이것이 포트가 "충돌"된다는 의미입니다.
다음 줄을 추가하여 udev local.rules 파일을 편집해 보았습니다.
ACTION=="추가",ATTRS{idVendor}=="0403",ATTRS{idProduct}=="6015",SYMLINK+="usbgps"
나는 또한 이 라인을 시도했지만 작동하지 않는 것 같습니다.
작업 == "추가", ATTRS {idVendor} == "0403", ATTRS {idProduct} == "6015", NAME +="usbgps"
심볼릭 링크를 생성하는 첫 번째 줄은 /dev/usbgps에 새로운 장치/링크를 생성합니다.
이것은 작동하지만 원래 장치는 그대로 유지됩니다. 즉, usbgps 심볼릭 링크를 생성하지만 /dev/ttyUSB4 장치도 생성합니다. 재부팅한 후에는 /dev/ttyUSB0으로 표시되고 다른 포트를 "범프"하여 내가 가지고 있는 다른 소프트웨어를 엉망으로 만듭니다.
장기적으로는 내 소프트웨어가 액세스하는 장치에 특정 정적 이름을 사용하려고 노력할 것입니다. 문제는 ttyUSB0/1/2/3 포트가 모뎀 제조업체의 특수 드라이버에 의해 생성된다는 것입니다. 따라서 직접 심볼릭 링크를 사용하여 4개의 USB-직렬 포트를 표시할 수 있도록 코드를 수정해야 할 수도 있습니다. 즉, ttyUSB2는 pppd/cellular용이므로 cellport로 이름을 붙였고, ttyUSB1은 gps용이므로 gpsport로 이름을 붙였습니다.
드라이버를 수정하지 않고 ttyUSB0/1/2/3 포트에 직접 심볼릭 링크를 만드는 방법을 아는 사람이 있으면 알려주십시오.
그래서 제가 물어봐야 할 마지막 질문은 다음과 같습니다.
USB 장치를 ttyUSB4 또는 ttyUSB0 포트 이름으로 표시하지 않고 usbgps로 표시하려면 어떻게 해야 합니까? 장치가 usbgps로 표시되기를 원합니다. ttyUSB 장치 목록에 추가되는 것을 방지할 수 있다면 포트에 충돌이 발생하고 특정 이름을 가진 포트에 의존하는 다른 응용 프로그램이 엉망이 되는 것을 방지할 수 있습니다.
답변1
글쎄요, 이 글을 보고 그 문제를 해결한 것 같아요.
USB 직렬 "경로별" udev 규칙이 작동하지 않습니다.
연결된 모든 컴퓨팅 모듈을 시작했으며 포트가 무엇을 나타내는지에 대한 설명과 함께 포트가 아래에 표시됩니다.
ttyUSB0 -> USB GPS ttyUSB1 -> 모뎀 포트 0 ttyUSB2 -> 모뎀 GPS 포트 ttyUSB3 -> pppd용 모뎀 셀룰러 포트 ttyUSB4 -> 명령 포트의 모뎀
그런 다음 다음 명령을 실행하고 출력을 기록합니다.
udevadm info /dev/ttyUSB0 | grep "ID_PATH="
udevadm info /dev/ttyUSB1 | grep "ID_PATH="
udevadm info /dev/ttyUSB2 | grep "ID_PATH="
udevadm info /dev/ttyUSB3 | grep "ID_PATH="
udevadm info /dev/ttyUSB4 | grep "ID_PATH="
이 명령의 출력은 다음과 같습니다.
platform-fe980000.usb-usb-0:1.1:1.0
platform-fe980000.usb-usb-0:1.3:1.0
platform-fe980000.usb-usb-0:1.3:1.1
platform-fe980000.usb-usb-0:1.3:1.2
platform-fe980000.usb-usb-0:1.3:1.3
그런 다음 이 정보를 기록하고 /etc/udev/rules.d/local.rules 파일에 다음 줄을 추가했습니다. 앞으로는 이러한 규칙을 local.rules 파일에 넣는 대신 동일한 rule.d 폴더의 다른 규칙 파일에 추가할 것입니다.
SUBSYSTEM=="tty",ENV{ID_PATH}=="platform-fe980000.usb-usb-
0:1.1:1.0",SYMLINK+="usbgps"
SUBSYSTEM=="tty",ENV{ID_PATH}=="platform-fe980000.usb-usb-
0:1.3:1.0",SYMLINK+="modemport0"
SUBSYSTEM=="tty",ENV{ID_PATH}=="platform-fe980000.usb-usb-
0:1.3:1.1",SYMLINK+="modemgpsport"
SUBSYSTEM=="tty",ENV{ID_PATH}=="platform-fe980000.usb-usb-
0:1.3:1.2",SYMLINK+="modemcellularport"
SUBSYSTEM=="tty",ENV{ID_PATH}=="platform-fe980000.usb-usb-
0:1.3:1.3",SYMLINK+="modemcommandport"
이제 컴퓨팅 모듈이 부팅되면 ttyUSB0/1/2/3/4/5 포트를 이동할 수 있지만 심볼릭 링크가 USB 장치의 ID_PATH를 가리키므로 이는 중요하지 않은 것 같습니다. 모듈을 다시 시작하거나 종료했다가 다시 시작하면 모든 것이 예상대로 작동합니다.
예를 들어, usbgps 포트에서 GPS 데이터를 열고 보려는 경우입니다.
USB GPS 데이터를 보기 위해 다음 명령을 실행한 적이 있습니다.
picocom /dev/ttyUSB0 -b 9600
이제 동일한 명령을 실행할 수 있지만 심볼릭 링크를 가리키도록 하면 완벽하게 작동합니다.
picocom /dev/usbgps -b 9600
이것이 최선의 해결책인지는 확실하지 않지만 적어도 잘 작동하는 것 같은 해결책이 있습니다.
더 나은 솔루션에 대한 아이디어가 있으면 게시해 주세요.