-
반응형
Loadable Kernel Module(이하 LKM이라 축약해서 부름)이란 말 그대로 시스템 운영 중에 커널에 load/unload 가능한 모듈을 의미한다. linux 커널의 장점 중에 하나로써, 시스템 운영 중에 모듈을 올릴 때 재부팅의 과정이 필요하다면 그 자체도 시스템 운영자에게 있어서 신경써야 할 부분이기 때문에 유연한 관리를 위한 기능이기도 하다.
간단한 LKM dummy 코드를 소개한다. 이 dummy 커널 모듈을 일단 만들고 커널 공부한 부분들을 이 모듈에 넣어 테스트 하면 유용하다.
일단 linux 시스템이 있어야 하고, 일단 커널 코드를 다운받아야 한다.
2011/08/18 - [리눅스(Linux)/커널(Kernel)] - linux kernel 소스코드는 어디서 받나요??
자 그러면 소스코드를 위한 디렉토리를 만들어보자.
mkdir dummy_mod
만들어진 디렉토리로 이동 한 후, 컴파일에 필요한 Makefile과 소스코드 파일을 만든다.
cd dummy_mod
touch Makefile
touch dummy_core.c
다음으로 Makefile 파일에 컴파일을 해야 할 소스코드에 대한 오브젝트 파일을 작성 한다.
obj-m += dummy_core.o
마지막으로 소스코드를 작성하면 된다. 기본적으로 사용되는 코드는 다음과 같다.
- linux/module.h 를 include 해주어야 한다.
/** define module configure */ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Dummy module"); MODULE_AUTHOR("morenice"); int init_dummy_mod(void) { printk(KERN_INFO "init called.\n"); return 0; } void cleanup_dummy_mod(void) { printk(KERN_INFO "cleanup called. module is now unloaded.\n"); } /** register entry function. */ module_init(init_dummy_mod); /** register exit function. */ module_exit(cleanup_dummy_mod);
- MODULE_ 로 시작하는 부분은 이 커널 모듈을 정의하는 부분이다.
- module_로 시작하는 부분은 커널 모듈이 load/unload될 때 호출되는 함수를 정의하는 부분이다.
- printk는 커널에서 사용되는 출력 함수로써 dmesg명령어로 메세지를 확인 할 수 있다.
전체 컴파일을 한번 진행 해야 커널 모듈이 정상적으로 컴파일이 되어 load 된다.
make menuconfig
make
자 이제부턴 커널 모듈과 컴파일 할 수 있다.
make modules SUBDIRS=dummy_mod
컴파일을 진행하면 커널 오브젝트의 약자인 .ko 파일이 생성된다. 해당 파일을 커널 모듈로 load할 때는 insmod 명령어를 그리고 내릴 때는 rmmod로 모듈을 load/unload 할 수 있다.
반응형