Linux 환경의 장치 관리자란 무엇입니까? 즉, 장치 관리자는 실제로 무엇을 합니까?
https://en.wikipedia.org/wiki/Udev설명하다
우데브(사용자 공간 /dev)는 Linux 커널의 장치 관리자입니다.
그게 무슨 뜻이야?
위키피디아는 계속됩니다:
Udev는 devfsd 및 hotplug의 후속 버전으로, 주로
/dev
디렉터리의 장치 노드를 관리하고 일부 장치에 필요한 펌웨어 로딩을 포함하여 하드웨어 장치가 시스템에 추가되거나 제거될 때 발생하는 모든 사용자 공간 이벤트를 처리합니다.
이 문장은 나에게 아무런 의미가 없습니다. 먼저, "디렉토리에서 장치 노드를 관리한다 /dev
"는 것은 무엇을 의미합니까?
장치 드라이버를 자동으로 활성화하거나 비활성화하는 소프트웨어입니다. "자동" 부분은 일반적으로 새 장치가 기계에 연결되었음을 감지하여 수행됩니다. 장치 드라이버를 활성화하는 것 외에도 장치를 자동으로 구성합니다(예를 들어 디스크 관리자를 열거나 드라이브를 마운트하는 명령을 실행하지 않고도 USB 드라이브를 감지하면 자동으로 마운트합니다).
"장치 드라이버를 자동으로 활성화 또는 비활성화"하는 목적은 무엇입니까? 그러면 커널이 장치나 프로그램과 대화할 수 있습니까? 그렇다면 장치가 사용자 공간이나 커널 공간에서 실행될 수 있습니까?
답변1
Udev는 새로 감지된 모든 장치(시스템 시작 후 "핫 플러그" 장치 및 시스템 시작 시 영구적으로 연결된 "콜드 플러그" 장치 포함)의 설정을 처리합니다.
커널이 새로 감지된 장치를 알릴 때마다 필요에 따라 커널 모듈(드라이버)을 로드합니다.
이러한 장치의 장치 노드를 업데이트합니다
/dev
. 소유권, 그룹, 권한을 설정합니다. 또한 기호 링크도 생성합니다/dev/disk/by-uuid
.과거에는 udev도 사용되었습니다.만들다/dev에 있는 모든 장치 노드("mknod" 사용) 및 장치 연결이 끊어지면 해당 노드를 제거합니다. 이는 현재 Linux에서는 더 이상 필요하지 않습니다. 대신 커널에 "devtmpfs"가 있고 장치가 자동으로 표시되지만 udev는 여전히 권한 변경 및 심볼릭 링크 생성을 담당합니다.
장치를 초기화하기 위해 실행할 수 있는 도우미(예: 코드 스캔을 위해 키보드를 다시 매핑하거나 프린터에 펌웨어를 업로드하거나 /sys 노브를 찌르는 등) 또는 장치의 메타데이터를 향상할 수 있는 도우미와 같은 사용자 지정 규칙을 처리합니다. 사용자 공간 프로그램용(예: libinput의 터치패드 크기, systemd-hwdb 참조)
일반적인 프로세스는 다음과 같습니다.
커널은 장치(예: USB 버스의 하위 수준 "USB 장치 VID:PID")를 감지하고 Netlink를 통해 uevent를 발행합니다.
Udev의
/{etc,lib,usr/lib}/udev/rules.d/
.module 로딩 처리는 udev가 수행하는 거의 모든 것과 마찬가지로 그곳에서 발견되는 특별한 규칙입니다.Udev는 사용자 공간이 반응할 수 있도록 Netlink를 통해 향상된 uevent를 내보냅니다.
대부분의 프로그램은 의도적으로 초기 커널 이벤트를 무시하지만 udev의 부스트 이벤트를 기다립니다. 이러한 방식으로 규칙이 필요한 작업을 완료한 후에만 장치 사용을 시작합니다.
Udev는 엄격하게 적용되지 않습니다. 필요한 모든 드라이버가 포함된 커널을 수동으로 컴파일하거나 로드하면 modprobe
대부분의 작업이 작동합니다. (드라이버가 로드되자마자 인식된 장치에 자동으로 연결됩니다. 이는 udev에서 처리되지 않습니다.)
새로 감지된 장치를 알리거나 추가 메타데이터를 제공하기 위해 udev에 의존하는 소프트웨어는 작동하지 않습니다. 예를 들어 X11은 새 모니터나 마우스를 연결할 때 이를 알아차리지 못합니다.