커널이나 udev가 장치 노드를 생성했는지 확인하는 방법은 무엇입니까?

커널이나 udev가 장치 노드를 생성했는지 확인하는 방법은 무엇입니까?

누가 장치 노드를 생성했는지 알 수 있는 방법이 있나요? 그렇다면 udev커널 자체입니까?

제 경우에는 두 개의 웹캠이 있습니다. 이를 위해 생성된 노드는 /dev/video0및 입니다 /dev/video1. 불행하게도 이는 지속적인 할당이 아닙니다. 이제 를 사용할 때 이런 경우가 될 것이라고 생각했지만 규칙을 udev생성할 때 더 일정한 노드(예:)를 할당할 수 있기 전에 노드가 이미 생성된 udev것 같습니다 .video0video1udev/dev/videoLogitech

여기서 무슨 일이 일어나고 있는지 이해하는 데 도움이 될 수 있는 로그 파일이나 명령에 대한 조언이 필요합니다.

답변1

작업 순서를 확인하려면 다음을 사용하십시오.

udevadm monitor --property

이렇게 하면 작업 목록이 표시됩니다. 카메라를 추가할 때 첫 번째 항목은 다음과 같습니다.

KERNEL[110935.814197] add      /devices/.../video4linux/video1 (video4linux)
ACTION=add
DEVNAME=/dev/video1  <<<<---- devname

~처럼@goldilocks가 지적했습니다.:

불행하게도 systemd를 사용하는 경우 udev 버전에는 복잡한 "지속적 이름 지정 체계"가 있습니다.udevd에 하드코딩됨, 당신 말이 맞습니다. 이 rules.d내용을 분석하는 것만으로도 많은 미스터리가 남을 수 있습니다.

또한 man udevsystemd에서 :

다음 키에 할당된 값을 얻을 수 있습니다.

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

관련 정보