udev의 커널은 재부팅 후에도 지속되지 않습니다.

udev의 커널은 재부팅 후에도 지속되지 않습니다.

udev를 사용하여 장치를 일치시키고 장치가 연결될 때마다 명령을 실행하려고 합니다 RUNS. 장치(V4L2 USB 카메라)는 항상 같은 USB 포트에 연결되어 있기 때문에 그 KERNELS속성에 의존하여 일치시킬 수 있다고 생각했습니다. 나는 항상 장치의 sysfs 경로가 영구적이라고 생각했지만 KERNELS동일한 USB 포트에 연결된 동일한 장치에 대해 다른 경로와 값이 표시됩니다.

$ udevadm info -a /dev/video0
...
  looking at device '/devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1.4/3-1.4:1.0/video4linux/video0':
    KERNEL=="video0"
    SUBSYSTEM=="video4linux"
    DRIVER==""
...

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1.4/3-1.4:1.0':
    KERNELS=="3-1.4:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="uvcvideo"
...

이제 다시 시작한 후 다른 값을 얻습니다.

$ udevadm info -a /dev/video0
...
  looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/video4linux/video0':
    KERNEL=="video0"
    SUBSYSTEM=="video4linux"
    DRIVER==""
...

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0':
    KERNELS=="1-3:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="uvcvideo"
...

해당 USB 포트에 연결된 장치와 일치하는 신뢰할 수 있는 udev 규칙을 어떻게 작성합니까?

경로가 변경되더라도 /dev/v4l/by-path경로는 변경되지 않는다는 것을 알았습니다 /sysfs. /dev/v4l/by-path/pci-0000:00:14.0-usb-0:3:1.0-video-index0(그러나 이것을 어떻게 활용해야 할지 모르겠습니다).

답변1

KERNELS이러한 속성은 USB 포트 기반 매칭에 신뢰할 수 없는 것으로 나타났습니다 . 그러나 나는 by-path심볼릭 링크를 활용하는 방법을 알아냈습니다: Match via SYMLINK=="...".

해당 장치의 경우 다음과 같이 표시됩니다.

SYMLINK=="v4l/by-path/pci-0000:00:14.0-usb-0:3:1.0-video-index0"

ID_PATH비슷한 방식으로 사용할 수 있는 장치 속성 도 있습니다.

심볼릭 링크와 장치 속성은 다음을 사용하여 나열할 수 있습니다.

udevadm info -q all [device_path_or_name]

관련 정보