Linux · udev 및 devtmpfs 사용 환경

장치 노드와 드라이버를 따로 확인합니다

lsmod, /proc/devices, sysfs, Device Tree에 나타나는 정보의 차이입니다.

/dev에 이름이 있다고 드라이버가 동작하는 것은 아닙니다

lsmod
cat /proc/devices
ls -l /dev/null
udevadm info --query=all --name=/dev/null
위치보여 주는 것
lsmod현재 로드된 모듈입니다. 커널에 내장한 드라이버는 목록에 나오지 않습니다.
/proc/devices등록된 문자/블록 장치 major 번호와 이름입니다. 개별 장치의 정상 동작 목록은 아닙니다.
/dev의 특수 파일major/minor로 커널의 장치 기능을 연결하는 경로입니다. mknod는 드라이버 등록이 아닙니다.
sysfs의 driver 링크장치와 바인딩된 드라이버를 찾는 데 사용합니다.

lsmod의 사용 수를 사용자 프로세스가 open한 횟수와 항상 같다고 보지 않습니다. 다른 모듈의 참조나 드라이버의 수명 처리도 영향을 줍니다.

커널 이벤트와 사용자 공간의 처리를 구분합니다

udevadm monitor --kernel --udev --property

장치 변화 때 커널 이벤트와 udev 처리 결과를 관찰합니다. devtmpfs가 노드를 만들고 udev가 권한·링크를 정리하는 구성도 있습니다. Android의 ueventd, BusyBox mdev, systemd-udevd는 서로 다른 사용자 공간 구현입니다. 특정 시스템의 코드를 모든 Linux의 유일한 절차로 설명하지 않습니다.

장치가 사용자 공간에 보이는 과정
  1. 커널의 장치 등록버스와 장치 모델에 장치가 등록됩니다.
  2. 장치 노드와 이벤트devtmpfs 및 uevent 경로가 관여합니다.
  3. 사용자 공간 정책udev 같은 관리자가 권한과 심벌릭 링크 등을 적용합니다.

일반적인 구성의 역할을 나타냅니다. 모든 환경이 세 단계를 같은 프로그램이나 같은 시점에 수행하는 것은 아닙니다.

실행 중인 Device Tree를 읽습니다

dtc -I fs -O dts -o running.dts /sys/firmware/devicetree/base

Device Tree로 부팅했고 해당 경로를 제공하는 시스템에서 사용할 수 있습니다. /proc/device-tree는 이 트리를 가리키는 링크로 제공되기도 합니다. 덤프한 DTS는 원본의 include, 주석, 라벨을 그대로 복원한 파일은 아닙니다. 부트로더가 수정한 최종 정보가 반영될 수 있습니다.

clocks 속성은 보통 provider의 phandle과 specifier를 담습니다. 바이트를 숫자로 출력했다고 바로 CPU 주파수가 되지는 않습니다. 해당 binding의 #clock-cells와 provider 정의를 함께 읽어야 합니다. 속성 값의 바이트 순서도 고려해야 하므로 od의 호스트 정수 해석만으로 의미를 단정하지 않습니다.

미디어 그래프는 연결 관계를 보여 줍니다

media-ctl -p -d /dev/media0
media-ctl --print-dot -d /dev/media0 > graph.dot
dot -Tsvg graph.dot -o graph.svg

장치가 제공하는 entity, pad, link 관계를 확인하는 예입니다. 그래프의 선은 미디어 링크이며 데이터가 현재 흐른다는 측정 결과가 아닙니다. 스트리밍 상태와 포맷·링크 활성화는 별도로 확인합니다. v4l2-ctl의 지원 옵션과 대상 video/subdev 노드도 설치 버전에 맞춰 확인합니다.

확인한 문서

Linux · udev 및 devtmpfs 사용 환경