누가 장치 노드를 생성했는지 알 수 있는 방법이 있나요? 그렇다면 udev
커널 자체입니까?
제 경우에는 두 개의 웹캠이 있습니다. 이를 위해 생성된 노드는
/dev/video0
및 입니다 /dev/video1
. 불행하게도 이는 지속적인 할당이 아닙니다. 이제 를 사용할 때 이런 경우가 될 것이라고 생각했지만 규칙을 udev
생성할 때 더 일정한 노드(예:)를 할당할 수 있기 전에 노드가 이미 생성된 udev
것 같습니다 .video0
video1
udev
/dev/videoLogitech
여기서 무슨 일이 일어나고 있는지 이해하는 데 도움이 될 수 있는 로그 파일이나 명령에 대한 조언이 필요합니다.
답변1
작업 순서를 확인하려면 다음을 사용하십시오.
udevadm monitor --property
이렇게 하면 작업 목록이 표시됩니다. 카메라를 추가할 때 첫 번째 항목은 다음과 같습니다.
KERNEL[110935.814197] add /devices/.../video4linux/video1 (video4linux)
ACTION=add
DEVNAME=/dev/video1 <<<<---- devname
불행하게도 systemd를 사용하는 경우 udev 버전에는 복잡한 "지속적 이름 지정 체계"가 있습니다.udevd에 하드코딩됨, 당신 말이 맞습니다. 이
rules.d
내용을 분석하는 것만으로도 많은 미스터리가 남을 수 있습니다.
다음 키에 할당된 값을 얻을 수 있습니다.
NAME 네트워크 인터페이스에 사용되는 이름입니다. 인터페이스 이름 설정에 대한 상위 수준 메커니즘은 systemd.link(5)를 참조하십시오.udev는 장치 노드의 이름을 변경할 수 없으며 추가 기호 링크만 생성할 수 있습니다.
이름 지정 및 디버깅
가장 좋은 방법은 아마도 다음과 같은 것을 사용하는 것입니다.
udevadm test $(udevadm info -q path -n video1)
규칙을 "테스트 실행"하고 오류를 보고할 수 있습니다.
규칙을 추가/변경한 후에는 다시 로드해야 합니다.
udevadm control --reload-rules
그 순간까지이름다음과 같은 결과를 얻을 수 있습니다.
NAME="smile2thecamera" ignored, kernel device nodes can not be renamed;
please fix it in /etc/udev/rules.d/83-webcam.rules:6
다음과 같이 심볼릭 링크(충분한 경우)를 사용할 수 있습니다.
KERNEL=="video[0-9]", .... SYMLINK+="video-logitech"
테스트는 다음과 같은 내용을 제공해야 합니다.
creating link '/dev/video-logitech' to '/dev/video1'
creating symlink '/dev/video-logitech' to 'video1'
DEVLINKS=.... /dev/video-logitech