본문 바로가기

Hop the wag during working

LKM - Loadable Kernel Module

리눅스 디바이스 드라이버를 만들다 보면 수도 없이 커널을 컴파일해야 하는 경우가 발생한다. 이는 프로그래머로 하여금 많은 작업시간을 낭비하도록 만든다.

이를 위해 커널 개발자는 module이라는 것을 만들어 커널이 실행 중에 디바이스 드라이버를 모듈화하여 동적으로 적재되고 제거되도록 하였다.

Makefile을 직접 작성하여 디바이스 드라이버의 모듈화는 방법은 많은 문서와 서적으로 나와 있으니 그것을 참-_-고 하도록 하자.

이번 포스트는 커널 컴파일 시에 configuration에서 특정 드라이버를 "m"으로 지정해 놓고 그것을 insmod등으로 적재하는 방법에 대한 것이다.

거창해보이지만 방법은 간단하다.

1. Kernel configuration
Enable loadable module support를 체크하고, module test를 위해 Cryptographic options의 ECB support와 PCBC support를 "m"으로 체크한다.
  

2. kernel compile
make를 통해 커널을 컴파일한다. - embedded에서는 주로 uImage를 생성하기 위해 make uImage를 하는데 이는 module파일인 .ko파일을 생성하지 않는 것에 주의한다.

컴파일이 완료되면 module로 체크한 것의 해당 디렉토리에 .ko파일이 생성되어 있음을 확인할 수 있다.

3. module install
make modules_install
을 실행하면 /lib/modules/커널버전/kernel에 module파일이 복사된다.
여기에 복사되 .ko파일들을 insmod등의 module util을 이용하여 커널에 적재하고 제거할 수 있다.

-Southlife-