v리눅스 커널 모듈

ü명령에 의하여 리눅스커널에 적재하거나 제거할 수 있는 실행가능한 프로그램
v모듈 프로그램
ü커널의 일부 기능을 커널에서 가져와서 모듈로 구현
ü기능이 필요할 때만 메모리에 적재

 

 

 



v
모듈 소스 형식 (Kernel Ver. 2.6)
=====================================================
#include <linux/init.h>
#include <linux/module.h>
#incldue <linux/kernel.h>
int xxx_init(){
...
printk("Hello World!\n");
...
}
void xxx_exit(){
...
printk("Good-Bye World!\n");
...
}

module_init( xxx_init );
module_exit( xxx_exit);

MODULE_LICENSE( "GPL" );
=====================================================
여기서 xxx는 모듈프로그램 이름(사용자가 임의로 지정가능)


v
모듈프로그래밍 Makefile 생성 방법
=====================================================
KERNELDIR = /lib/module/$(shell uname -r)/build

obj-m := 소스파일명.o

KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

default:
$(MAKE) -C $(KDIR)  SUBDIRS=$(PWD) modules
clean:
rm -rf *.ko
rm -rf *.mod.*
rm -rf .*.cmd
rm -rf *.o
=====================================================

처음에는 "
obj-m := 소스파일명.o" 이부분때문에 object파일을 만들어야 하는 줄 알고,
한참 해맸는데 알고보니 "
소스파일명.c" 소스파일을 가지고, 그냥 make 실행시키면 자동으로
"소스파일명.o" 파일과, "소스파일명.ko" 파일을 만들어준다.
 

v
커널용 출력함수 printk()
ü커널용 출력함수로써 printf()와 유사하다.
ü커널 프로그래밍 디버깅시 유용하게 쓰임.
ü단, printk()함수를 사용할 경우, 화면에 뿌려주는게 아니라 시스템로그에 남게 된다. (dmesg)


 

 

 

v모듈 유틸리티
üinsmod : 모듈을 커널에 적재한다. (insert module)
ürmmod : 커널에서 모듈을 제거한다. (remove module)
ülsmod : 커널에 적재된 모듈 목록을 보여준다 (list module)
üdepmod : 모듈간 의존성 정보를 생성한다. (depend module)
ümodprobe : depmod에 의해 갱신된 모듈을 찾아 적재한다. (module probe)

 

 



Posted by Programist
,