연결할 때 직렬 장치의 사용자 정의 이름을 지정하는 방법은 무엇입니까?

연결할 때 직렬 장치의 사용자 정의 이름을 지정하는 방법은 무엇입니까?

연구 중이에요활성산소종아래에우분투14.04안에올드 로이 XU3(ARM 개발 보드).

두 개의 USB 장치를 보드에 연결했는데 다음과 같이 인식되었습니다.ttyACM0그리고ttyACM1접속한 시간을 기준으로 합니다.

이러한 장치(Arduino 및 PixHawk)에는 서로 다른 PID/VID가 있으므로 이를 "사용자 정의 이름" tty에 바인딩하고 싶습니다.ttycontroller0&tty 위치 0예를 들어.

이에 따르면주제, PID 및 VID를 기반으로 링크 장치를 시뮬레이션할 수 있습니다.ttyUSB0.

결정적 이름에 대한 연결을 어떻게 시뮬레이션해야 합니까? /etc/udev/rules.d/99-custom.rulesSimlink의 4가지 규칙이 작동할 수 있나요?

ACTION=="add", ATTRS{idVendor}=="0123", ATTRS{idProduct}=="0001", RUN+="/bin/ln -s /dev/ttyACM0 /dev/ttyController"


ACTION=="remove", ATTRS{idVendor}=="0123", ATTRS{idProduct}=="0001", RUN+="/bin/rm /dev/ttyController"


ACTION=="add", ATTRS{idVendor}=="3210", ATTRS{idProduct}=="0002", RUN+="/bin/ln -s /dev/ttyACM0 /dev/ttyPosition"


ACTION=="remove", ATTRS{idVendor}=="3210", ATTRS{idProduct}=="0002", RUN+="/bin/rm /dev/ttyPosition"

아니면 맞춤형 PID 및 VID와 함께 Udev를 사용할 수 있나요?

답변1

귀하의 구성은 기본적으로 작동하지만 몇 가지 제안을 드리고 싶습니다.

먼저 ATTR.ATTRSATTRS일치하는 (상위) 장치를 찾기 위해 전체 장치 트리를 검색합니다. 이것은 당신이 원하는 것이 아닐 가능성이 높습니다. ATTR실제로 이벤트를 트리거하는 장치에는 지정된 속성이 있어야 합니다.

둘째, 장치 노드에 대한 심볼릭 링크를 생성하는 것은 매우 일반적인 작업이므로 이를 수행하기 위한 전용 명령문이 있습니다. 즉, SYMLINK+="newname""외부" 명령에 의존하지 않도록 합니다. 게다가 이 지시문을 사용하면 "add" 이벤트만 일치시키면 됩니다. udevd장치가 사라지면 관련 심볼릭 링크가 자동으로 삭제되기 때문입니다.

따라서 귀하의 규칙은 다음과 같아야 합니다.

ACTION=="add", ATTR{idVendor}=="0123", ATTR{idProduct}=="0001", SYMLINK+="ttyController"
ACTION=="add", ATTR{idVendor}=="3210", ATTR{idProduct}=="0002", SYMLINK+="ttyPosition"

마지막으로 추가 SUBSYSTEM 제약 조건(예: Add )을 추가하여 일치 범위를 좁힐 것을 권장합니다 SUBSYSTEM=="usb". 장치 및 공급업체 ID는 해당 범위 내에서만 (희망적으로) 고유하므로 하위 시스템 일치를 무시하면 다른 장치 클래스(예: PCI 장치). 이 시나리오는 가능성이 낮지만 일반적으로 udev 규칙에서는 좋은 스타일로 간주됩니다.

SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0123", ATTR{idProduct}=="0001", SYMLINK+="ttyController"
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="3210", ATTR{idProduct}=="0002", SYMLINK+="ttyPosition"

관련 정보