Skip to content

Udev

udev는 리눅스 커널을 위한 장치 관리자이다. devfsd와 hotplug를 계승하는 udev는 주로 /dev 디렉터리의 장치 노드를 관리한다. 동시에 udev는 특정 장치에 필요한 펌웨어 적재를 포함하여 하드웨어 장치가 시스템에 추가되거나 제거되는 동안 발생한 모든 사용자 공간 이벤트들을 관리한다.

개요

/dev 디렉터리의 장치 노드들에 정적인 파일들을 모아두는 전통적인 유닉스 시스템과는 달리, 리눅스의 udev 장치 관리자는 시스템에 실제로 존재하는 장치들의 노드들만 동적으로 제공한다. devfs가 비슷한 기능을 제공하는데 사용되지만, 그레그 크로아 하트먼은 devfs 보다 udev를 선호하는 이유를 다수 언급하였다.

  • udev는 영속적인 장치 명명 기능을 지원하는데, 예를 들어 장치가 시스템에 장착된 순서에 의존하지 않는다. 기본 udev의 설정은 장치 이름의 영구적인 이름을 제공한다. 어떠한 하드 디스크라도 고유한 파일 시스템 ID, 디스크의 이름, 하드웨어가 장착된 물리적 위치에 의해 인식된다.
  • devfs의 커널 공간과는 달리 udev는 완전히 사용자 이름 안에서 실행된다. 명명 정책을 커널 밖으로 끄집어내었고, 노드를 만들기 전에 임의의 프로그램들을 실행하여 장치의 속성들로부터 장치의 이름을 구성할 수 있게 하였다. 즉, 모든 과정은 중단이 가능하며 더 낮은 우선에서 동작한다.

udev를 크게 보면 세 가지로 나뉜다:

  • 라이브러리 libudev는 장치 정보의 접근을 허용한다. systemd 소프트웨어 번들에 통합되었다.
  • 가상 /dev를 관리하는 사용자 공간 데몬 udevd.
  • 진단을 위한 관리 명령 줄 유틸리티 udevadm.

시스템은 넷링크 소켓을 통해 커널로부터 호출들을 가져온다. 초기 버전들은 이러한 목적을 위해 hotplug를 사용하여 /etc/hotplug.d/default에서 자기 자신들에 대한 링크를 추가한다.

구동

리눅스 커널 구동 후 init 경유로 udevd라는 데몬을 실행한다. PC에 하드웨어가 삽입된 순간 커널이 sysfs가 작성하는 /sys 아래의 정보를 참고하여 udevd에 하드웨어가 추가되었음을 통보한다. udevd는 이렇게 받은 통보와 미리 자신이 가진 규칙에 근거하여 디바이스에 대한 액션을 실행한다. 규칙은 /etc/udev/rules.d 아래에 들어 있다.

udev의 설정 파일

udev 전체 설정 파일은 두 개의 파라미터를 지정할 수 있다. 다음은 udev.conf에 있는 파라미터 종류이다.

udev_root
파일 시스템상의 어느 위치에 디바이스 파일을 배치할지 지정한다. 기본은 /dev이다.
udev_log
로깅 우선도를 지정한다. syslog의 priority번호나 err, info 등의 문자를 지정한다.

udev 규칙 파일

커널에서 이벤트를 받았을 때 udev가 참조하는 규칙 파일은 다음 3개 디렉터리에 위치한다.

  • /lib/udev/rules.d: 기본 규칙 디렉터리
  • /etc/udev/rules.d: 커스터마이즈용 규칙 디렉터리
  • /run/dev/rules.d: 임시 규칙 디렉터리

Step example

udev 규칙 파일은 생성, 갱신이 감시되고 있기 때문에 저장하는 즉시 적용된다. USB메모리에 관해 생각해보면 쉽다.

  1. USB메모리를 PC소켓에 끼웠더니 /dev/sdg1이 자동으로 할당되었다.
  2. 여기서 udevadm을 실행, 디바이스 정보를 얻는다.
  3. /dev/sdg1로 할당된 것을 힌트로 삼아 sysfs에서의 디바이스 경로를 얻는다.
  4. 이를 사용하여 디바이스 정보를 알아낸다.
  5. USB메모리를 뺐다가 다시 꽂으면 syslog에 커널이 디바이스를 인식했다는 메시지가 적힌 것을 확인할 수 있다.
  6. 그 다음 /dev 아래에 규칙대로 디바이스 파일의 심볼릭 링크가 생성된 것을 확인할 수 있다.

Categories

Favorite site