일부 bash 출력을 기반으로 udev 규칙을 추가할 수 있습니까?

일부 bash 출력을 기반으로 udev 규칙을 추가할 수 있습니까?

내 로봇에는 Jetson에 연결된 두 개의 LiDAR가 있습니다. 앞면에 하나, 뒷면에 하나. 어떤 LiDAR가 어디에 있는지 추적하는 것이 중요합니다. 그러나 LiDAR는 일종의 UART 브리지를 통해 USB 포트에 연결됩니다. 이는 Linux가 브리지 뒤의 LiDAR가 아닌 브리지만 볼 수 있음을 의미합니다. 이러한 브리지는 속성 측면에서 동일해 보이므로 이에 대한 udev 규칙을 만드는 것은 평소보다 조금 더 복잡합니다.

C++에서 실행되는 Lidar SDK에서 올바른 일련 번호에 액세스할 수 있습니다. 나는 USB 포트가 주어지면 해당 LiDAR에 사용하고 싶은 올바른 심볼릭 링크 이름을 제공하는 프로그램을 작성했습니다. 하지만 일부 bash 스크립트를 기반으로 udev 규칙을 트리거하는 방법을 모르기 때문에 심볼릭 링크를 만드는 데 문제가 있습니다.

현재 스크립트 경로는 다음과 같습니다. udev 규칙은 내 스크립트를 호출하고 장치 이름을 전달합니다. -> 스크립트는 SDK에 일련 번호를 쿼리하고 올바른 위치를 찾습니다. -> 스크립트는 이 논리를 기반으로 새 udev 규칙을 추가합니다. > 스크립트가 실행됩니다 udevadm control --reload-rules && udevadm trigger. 그러면 올바른 udev 규칙이 생성되지만 트리거되지 않으므로 심볼릭 링크가 생성되지 않습니다. 이 단계에서 LiDAR를 다시 삽입하면 심볼릭 링크가 생성됩니다. 하지만 이 프로세스가 더욱 자동화되었으면 좋겠습니다.

올바른 접근 방식은 무엇입니까? 수동으로 심볼릭 링크를 만드는 것이 합리적입니까 ln -s /dev/ttyUSB1 /dev/ttyLIDAR_FRONT? bash 스크립트가 udev 규칙을 강제로 실행할 수 있습니까? 아니면 udevadm이 cli에서 규칙을 실행할 수 있습니까?

감사해요.

답변1

새 규칙을 생성하고 로드하지 않고 이 문제를 해결하는 방법에는 최소한 두 가지가 있습니다.

  1. 스크립트가 새 udev규칙을 생성하도록 하지 말고 적절한 심볼릭 링크를 직접 생성하십시오.

    udev내가 아는 한, 이렇게 하면 손실되는 것은 심볼릭 링크 생성이 아니라 후속 규칙 및 링크 우선순위 관리에서 생성된 심볼릭 링크를 조회하는 능력뿐입니다 .udevudev

  2. 스크립트에서 변수 할당을 출력하고 IMPORT{program} udev이를 규칙에서 사용한 다음 스크립트에서 설정한 변수를 참조하는 심볼릭 링크를 만듭니다.

    여기에는 스크립트 출력 TARGET=symlinkname(가급적이면 더 구체적인 변수 이름 포함)과 SYMLINK참조 생성 등이 포함됩니다 %E{TARGET}.udev수동;또한 /lib/udev/rules.d시스템의 기존 규칙 중에서 예를 찾을 수도 있습니다.

관련 정보