Udev 규칙은 Linux에서 2개의 동일한 웹캠을 식별합니다.

Udev 규칙은 Linux에서 2개의 동일한 웹캠을 식별합니다.

내 Raspberry Pi에 동일한 웹캠 2개가 연결되어 있습니다. 연결된 USB 포트를 기준으로 어떤 카메라가 어떤 것인지 알고 싶습니다.

이것이 udev의 목적이므로 다음 규칙을 작성했습니다.

SUBSYSTEM=="usb", KERNEL=="1-1.3", ATTR{idVendor}=="05a3", ATTR{idProduct}=="9422", SYMLINK+="klastle/vlvid"
SUBSYSTEM=="usb", KERNEL=="1-1.5", ATTR{idVendor}=="05a3", ATTR{idProduct}=="9422", SYMLINK+="klastle/irvid"

다시 시작하면 다음 장치가 나타납니다.

root@raspberrypi:~# ls -rlt /dev/klastle/
total 0
lrwxrwxrwx 1 root root 18 Feb 18 01:24 irvid -> ../bus/usb/001/007
lrwxrwxrwx 1 root root 18 Feb 18 01:24 vlvid -> ../bus/usb/001/005

문제는 이 비디오가 Linux(V4L2) 장치용 비디오가 아니고 내 응용 프로그램에서 열 수 없다는 것입니다.

실제 /dev/video0 및 /dev/video1을 /dev/klastle/irvid 및 /dev/klastle/vlvid에 심볼릭 링크하기 위해 규칙을 올바르게 작성하려면 어떻게 해야 합니까?

감사해요.

업데이트: 두 장치 모두에 대한 udevadm 쿼리 출력은 다음과 같습니다.

root@raspberrypi:~# udevadm info --query=all --name=/dev/video3
P: /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5:1.0/video4linux/video3
N: video3
S: v4l/by-id/usb-Sonix_Technology_Co.__Ltd._USB_2.0_Camera_SN0001-video-index1
S: v4l/by-path/platform-3f980000.usb-usb-0:1.5:1.0-video-index1
E: DEVLINKS=/dev/v4l/by-path/platform-3f980000.usb-usb-0:1.5:1.0-video-index1 /dev/v4l/by-id/usb-Sonix_Technology_Co.__Ltd._USB_2.0_Camera_SN0001-video-index1
E: DEVNAME=/dev/video3
E: DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5:1.0/video4linux/video3
E: ID_BUS=usb
E: ID_FOR_SEAT=video4linux-platform-3f980000_usb-usb-0_1_5_1_0
E: ID_MODEL=USB_2.0_Camera
E: ID_MODEL_ENC=USB\x202.0\x20Camera
E: ID_MODEL_ID=9422
E: ID_PATH=platform-3f980000.usb-usb-0:1.5:1.0
E: ID_PATH_TAG=platform-3f980000_usb-usb-0_1_5_1_0
E: ID_REVISION=0100
E: ID_SERIAL=Sonix_Technology_Co.__Ltd._USB_2.0_Camera_SN0001
E: ID_SERIAL_SHORT=SN0001
E: ID_TYPE=video
E: ID_USB_DRIVER=uvcvideo
E: ID_USB_INTERFACES=:0e0100:0e0200:010100:010200:
E: ID_USB_INTERFACE_NUM=00
E: ID_V4L_CAPABILITIES=:capture:
E: ID_V4L_PRODUCT=USB 2.0 Camera: H264 USB Camera
E: ID_V4L_VERSION=2
E: ID_VENDOR=Sonix_Technology_Co.__Ltd.
E: ID_VENDOR_ENC=Sonix\x20Technology\x20Co.\x2c\x20Ltd.
E: ID_VENDOR_ID=05a3
E: MAJOR=81
E: MINOR=3
E: SUBSYSTEM=video4linux
E: TAGS=:uaccess:seat:
E: USEC_INITIALIZED=3298533

root@raspberrypi:~# udevadm info --query=all --name=/dev/video0
P: /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/video4linux/video0
N: video0
S: v4l/by-id/usb-Sonix_Technology_Co.__Ltd._USB_2.0_Camera_SN0001-video-index0
S: v4l/by-path/platform-3f980000.usb-usb-0:1.3:1.0-video-index0
E: DEVLINKS=/dev/v4l/by-path/platform-3f980000.usb-usb-0:1.3:1.0-video-index0 /dev/v4l/by-id/usb-Sonix_Technology_Co.__Ltd._USB_2.0_Camera_SN0001-video-index0
E: DEVNAME=/dev/video0
E: DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/video4linux/video0
E: ID_BUS=usb
E: ID_FOR_SEAT=video4linux-platform-3f980000_usb-usb-0_1_3_1_0
E: ID_MODEL=USB_2.0_Camera
E: ID_MODEL_ENC=USB\x202.0\x20Camera
E: ID_MODEL_ID=9422
E: ID_PATH=platform-3f980000.usb-usb-0:1.3:1.0
E: ID_PATH_TAG=platform-3f980000_usb-usb-0_1_3_1_0
E: ID_REVISION=0100
E: ID_SERIAL=Sonix_Technology_Co.__Ltd._USB_2.0_Camera_SN0001
E: ID_SERIAL_SHORT=SN0001
E: ID_TYPE=video
E: ID_USB_DRIVER=uvcvideo
E: ID_USB_INTERFACES=:0e0100:0e0200:010100:010200:
E: ID_USB_INTERFACE_NUM=00
E: ID_V4L_CAPABILITIES=:capture:
E: ID_V4L_PRODUCT=USB 2.0 Camera: H264 USB Camera
E: ID_V4L_VERSION=2
E: ID_VENDOR=Sonix_Technology_Co.__Ltd.
E: ID_VENDOR_ENC=Sonix\x20Technology\x20Co.\x2c\x20Ltd.
E: ID_VENDOR_ID=05a3
E: MAJOR=81
E: MINOR=0
E: SUBSYSTEM=video4linux
E: TAGS=:seat:uaccess:
E: USEC_INITIALIZED=3289947

답변1

귀하의 규칙은 장치 트리의 잘못된 수준과 일치합니다. SUBSYSTEM=="usb"이는 video4linux 계층이 아닌 전체 USB 장치를 나타내는 심볼릭 링크를 원함을 나타냅니다. 따라서 더 많은 것을 원하기 때문에 and 대신 and (추가 S 포함) SUBSYSTEM=video4linux도 필요합니다.ATTRSKERNELSATTRKERNEL그것들나무의 더 높은 곳에 있습니다. man udev자세히보다.

이 정보를 얻는 방법은 udevadm속성 등을 사용하여 트리 루트까지 전체 경로를 뱉어내는 것입니다.

udevadm info -a -p  $(udevadm info -q path -n /dev/video3)

(질문 편집의 내부 부분을 완료했습니다.)

그래서 규칙은 다음과 같아야합니다

SUBSYSTEM=="video4linux", KERNELS=="1-1.3", ATTRS{idVendor}=="05a3", ATTRS{idProduct}=="9422", SYMLINK+="klastle/vlvid"

또는 이와 유사할 수 있습니다. 아마도 장치 경로에 표시되는 내용에 따라 다를 것입니다.

답변2

비슷한 문제가 있습니다. 4개의 동일한 카메라, 일련번호 없음. 재부팅 시 무작위 재할당이 발생합니다. 작동하지 않도록 이미지에 제목을 추가해야 합니다.

솔루션에는 udev 규칙과 일부 Python 코드가 포함됩니다. video0..3이 아닌 mycam1..4로 카메라 주소를 지정합니다. 따라서 mycam1은 시작 시 할당된 videox 번호에 관계없이 항상 동일한 카메라입니다.

https://unix.stackexchange.com/a/533464/202850

관련 정보