Section 5. udev
udev는 리눅스 커널용 디바이스 파일 관리 도구이다. 디바이스 파일에 접근하기 위한 특수 파일을 /dev에 동적 파일로 준비해둔다. USB 메모리나 USB 키보느 등 PC를 재부팅하지 않고 바로 쓸 수 있는 핫플러그 기기는 삽입한 순간 /dev에 해당 디바이스 파일이 생성되지 않으면 장치를 사용할 수 없다. udev는 이들 디바이스 파일을 관리하는 것이다.
리눅스 커널 구동 후 init 경유로 udevd라는 데몬을 실행한다. PC에 하드웨어가 삽입된 순간 커널이 sysfs가 작성하는 /sys 아래의 정보를 참고하여 udevd에 하드웨어가 추가되었음을 통보한다. udevd는 이렇게 받은 통보와 미리 자신이 가진 규칙에 근거하여 디바이스에 대한 액션을 실행한다. 규칙은 /etc/udev/rules.d 아래에 들어 있다.
5.1 udev의 설정 파일
udev 전체 설정 파일은 두 개의 파라미터를 지정할 수 있다. 다음은 udev.conf에 있는 파라미터 종류이다.
- udev_root : 파일 시스템상의 어느 위치에 디바이스 파일을 배치할지 지정한다. 기본은 /dev이다.
- udev_log : 로깅 우선도를 지정한다. syslog의 priority번호나 err, info 등의 문자를 지정한다.
5.2 udev 규칙 파일
커널에서 이벤트를 받았을 때 udev가 참조하는 규칙 파일은 다음 3개 디렉터리에 위치한다.
- /lib/udev/rules.d (기본 규칙 디렉터리)
- /etc/udev/rules.d (커스터마이즈용 규칙 디렉터리)
- /run/dev/rules.d (임시 규칙 디렉터리)
예를 들어 1과 2에 같은 이름의 규칙이 존재하는 경우에는 2의 규칙이 유효하며 1의 규칙은 무시된다.
ls /lib/udev/rules.d
를 해보니 숫자로 시작하며 .rules확장자를 가진 규칙 파일이 되게 많다. 규칙 파일을 읽어들이는 순서가 정렬(sort)순이라고 한다. 숫자로 시작하므로 숫자가 작은 쪽부터 규칙 파일을 읽어들이게 되어 있다.
규칙은 한 행에 적어도 한 쌍의 키/값이 들어가도록 기술된다. 책에서는 커스터마이즈용 규칙 디렉터리에 있는 70-persistent-net.rules를 예로 규칙을 설명하였다.
udev 규칙 파일은 생성, 갱신이 감시되고 있기 때문에 저장하는 즉시 적용된다. USB메모리에 관해 생각해보면 쉽다. USB메모리를 PC소켓에 끼웠더니 /dev/sdg1이 자동으로 할당되었다. 여기서 udevadm을 실행, 디바이스 정보를 얻는다. /dev/sdg1로 할당된 것을 힌트로 삼아 sysfs에서의 디바이스 경로를 얻는다. 이를 사용하여 디바이스 정보를 알아낸다. USB메모리를 뺐다가 다시 꽂으면 syslog에 커널이 디바이스를 인식했다는 메시지가 적힌 것을 확인할 수 있다. 그 다음 /dev 아래에 규칙대로 디바이스 파일의 심볼릭 링크가 생성된 것을 확인할 수 있다.