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]