일반적인 Linux 배포판을 쓰지 않고, Kernel source와 Root file system 으로 부터 Linux system 을 구성한 경우,
Linux runtime 에 kernel module을 compile 하여 insmod/rmmod 를 할 수 있다.
Kernel module을 컴파일 하기 위해서는 현재 Linux system 에서 사용되고 있는 kernel source를 필요로 한다.
일반적인 방법과 유사하게 사용하기 위해
kernel source 를 /usr/src 디렉토리에 위치시키고,
/lib/modules/<kernel_version>/build 와 symbolic link 시킨다.
# cd /lib/modules/<kernel_version>
# ln -s /usr/src/<kernel_source_dir> build
커널 모듈을 컴파일 하기 위한 준비 작업은 아래 와 같다.
# cd /usr/src/<kernel_source_dir>
# make <defconfig>
# make prepare
# make scripts
※ 참조: http://www.fun25.co.kr/blog/linux-ubuntu-14-04-kernel-module-compile
kernel module을 컴파일 할 Makefile은 아래와 같이 구성한다.
obj-m := test_module.o
all:
make -C /lib/modules/<kernel_version>/build M=$(PWD) modules
clean:
make -C /lib/modules/<kernel_version>/build M=$(PWD) clean
아래는 테스트를 위한 기본적인 kernel module source code.
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void){
printk(KERN_ALERT"Hello"\n);
return 0;
}
void cleanup_module(void){
printk(KERN_ALERT"Bye"\n);
}
kernel module을 컴파일 하고, insmod/rmmod 를 통해 test 한다.
# make
# insmod <kernel_module>.ko
# rmmod <kernel_module>.ko
※ 이 때, 현재 Linux system 에서 사용되는 kernel 과 다른 source로 부터 kernel module을 컴파일 하게 되면 version 차이로 오류가 나타난다.