xubunt 7.10 -desktop -i386
kernel 2.6.22-14
-- 이때까지 했던 짓
vim 재 설치( vim_tiny? 글꼴에 색상주고 싶어서..-_- )
build-essential 설치( 간단한 hello world조차 컴파일이 안되길래 )
--끝
시험도 끝났고 오늘은 O'Reilly-한빛미디어의 리눅스 디바이스 드라이버 라느책을 읽고 정리하려한다.
이번 3판에선 커널 2.6을 다룬다해서 학교도서관에서 얼릉 빌려와봤다.
2.6 모듈은 커널 소스 트리에 있는 목적파일과 링크하기 때문에
커널 소스 트리 환경을 구축해야 한다.
( 커널 2.4와는 달리 2.6에선 모듈을 컴파일 하려면 전체 커널 트리가 필요하다고 한다. )
그래서 kernel.org 와 같은 사이트에서 "공식" 커널 소스를 가져와서 새 커널을 빌드하여
시스템에 설치해야 한다고 한다.
... 라고는 하는데 어짜피 지금 커널에서 돌아가게 할꺼면 궂이 새로 빌드할 필요가 있는지..
다행히 아무짓?도 안했는데 xubuntu에선 /usr/src/ 안에 커널 소스가 있는거 같다.
일단 모듈을 만들고 나면 insmod 와 rmmod 유릴리티를 이용해 모듈을 테스트 해볼수 있다.
...insert 와 remove라고 생각된다. 루트만 모듈을 load,unload 할 수 있다고 한다.;;
// hello.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init( void )
{
printk(KERN_ALERT "Hello, world!\n");
return 0;
}
static void hello_exit( void )
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
위와 같은 파일을 만든 후,
Makefile을 만든다.
#Makefile
obj-m := hello.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.ko
rm -rf *.mod.*
rm -rf .*.cmd
rm -rf *.o
make 를 하면!!
anahumid@cert:~/source/kernel$make
make -C /lib/modules/2.6.22-14-generic/build M=/home/anahumid/source/kernel modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.22-14-generic'
Building modules, stage 2.
MODPOST 1 modules
make[1]: Leaving directory `/usr/src/linux-headers-2.6.22-14-generic'
아름다운 결과가 아닐수 없다.
insmod 와 rmmod를 이용하여, 모듈을 load,unload해서 테스트를 할 수 있다.
/var/log/messages 를 확인하면 메시지를 확인 할 수 있다고 한다.
Apr 27 22:03:28 cert kernel: [ 6122.597927] Hello, world!
Apr 27 22:03:41 cert kernel: [ 6135.715755] Goodbye, cruel world
lsmod 를 이용하면 적재된 모듈들을 확인 할 수 있다.
...sudo 때문에 고생만... 낼 해야지~
-- 추가
/var/log/messages 대신 dmesg | tail 로도 확인 가능