티스토리 뷰

Study/Linux

[Linux] udev (user device)

생각많은 소심남 2016. 5. 3. 23:11



 한번 kernel build를 해보면 알겠지만, kernel쪽 driver폴더를 살펴보면 그 종류가 어마어마하게 많은 것을 알 수 있다. 지금이야 더 많겠지만, kernel 2.4에서의 driver는 약 15000~20000개 정도였다고 한다. 물론 아주 일반적인 driver는 kernel에 포함되어 있겠지만, 그게 아니라면 15000여개라는 숫자는 한꺼번에 담기에는 조금 큰 숫자이다. 물론 이렇게 사이즈가 커버리면 리눅스가 추구하는 Portability, 특히 embedded Linux같은 경우는 큰 영향을 받는다. 따라서 driver는 보통 아주 필수적인 케이스를 제외하고는 수동적으로 선택되며, 자칫하다가는 오류를 야기할 수도 있다. 

 이러한 목적에서 udev라는 것이 나왔다. udev를 사용하면 device node를 사용자가 원하는대로 생성할 수 있어서 앞에서 소개했던 예와 같이 수많은 device를 위한 node를 가지지 않아도 된다. 또한 어떤 node에 대한 생성, 삭제, 수정등이 모두 user level에서 이뤄질 수 있기 때문에 관리상 이점도 있다. 그리고 node 자체를 booting할때뿐만 아니라 dynamic 하게 생성할 수 있기 때문에 devfs나 hotplug 같은 용도로 사용할 수 있다. 이런 동작에 대한 규칙은 udev-rules 라는 이름으로 kernel내에서 가지고 있다.


 udev는 우선 udevd 혹은 systemd-udevd라는 이름의 데몬으로 동작하며, netlink socket를 통해서 device node 동작들을 모니터링한다. 만약 새로운 device가 생성되거나 제거되는 등의 동작이 발생할 경우 uevent 라는게 kernel 내에서 발생해서 udevd에게 해당 동작에 대한 정보를 전달한다. 그러면 udev는 udev rule에 정의되어 있는 device node와 property에 맞는 동작을 취하게 된다.

 udev framework를 구성하는 것은 크게 세가지가 있다.

 - libudev : device에 대한 정보를 접근할 수 있도록 해주는 library

 - udevd : /dev 하위의 device node들을 관리하는 daemon

 - udevadm : device node에 대한 control 및 diagnostic를 관장하는 utility

 

 설정에 대해서 언급을 하자면 udev에 대한 주요 configuration file은 /etc 밑에 있다.



/etc/udev 밑에 해당 configuration file들이 있는데 여기서 유심히 봐야할 것이 rules.d 와 udev.conf 이다. rules.d에 있는 내용이 바로 앞에서 언급했던 udev rule, 즉 device node에 대한 정보를 가지고 있는데, 보통은 device에 대한 naming이나 별도의 동작 등이 정의되어 있다. 그리고 일반적으로 udev.conf에는 device node의 생성 지점과 권한등이 지정되는데, 여기서는 별 내용이 들어있지 않았다.  참고로 위 이미지에서도 나오지만 udev는 initramfs에서 파생된 daemon이기 때문에 rule이 바뀌거나 udev 환경이 바뀔 경우 initramfs 역시 그 환경에 맞춰서 바뀌어야 한다.


 참 rules.d 안에 udev rule은 다음과 같이 되어 있는데, 여기에도 일종의 format이 있다. 이런게 있다정도로만 알아두면 좋을 듯 싶다.


'Study > Linux' 카테고리의 다른 글

[Linux] floating point 관련 삽질중  (0) 2016.05.25
[Linux] ARM gcc-4.7 cross compiler 설치  (0) 2016.05.18
[Linux] Partitioning  (0) 2016.05.17
[Linux] Device node  (6) 2016.05.03
[Linux] Kernel Modules  (0) 2016.04.29
[Linux] FHS를 이루는 폴더들 (2)  (0) 2016.04.27
[Linux] FHS를 이루는 폴더들 (1)  (0) 2016.04.27
댓글