타겟보드를 이용하여 디바이스 드라이버를 배워보자!(4)



안녕하세요 이우영 입니다.


저번시간에는 모듈간에 함수 호출에 대해서 알아 보았습니다.


오늘도 간단하지만 기본적인 것을 알아 보겠습니다.


1. 소스 코드 작성



오늘 배우는 목적은 모듈이 덩치가 커진다거나 목적에 따라 파일들을 분할해서 관리 할경우 어떤식으로 컴파일을 할것인가? 입니다.


그래서 간단하게 2번째 시간에 만들었던 기몬적인 형태의 모듈을 여러 파일로 나누어서 컴파일을 해보도록 하겠습니다.

(간단하게 할려다보니 너무 간단해졌어요 ㅎㅎ)


main.h

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>

init_module.c
int __intit test_init()
{
printk("module init \n");

return 0;
}
module_init( test_init );
MODULE_LICENSE("GPL");

exit_module.c
void __exit test_exit()
{
}
module_exit( test_exit );

Makefile

cc := arm-generic-linux-gnueabi-gcc-4.3.2

obj-m := main_module.o
main_module-objs := init_module.o exit_module.o

KDIR := /home/woo/device_driver/linux-2.6.29-ez-s3c6410

all:
make -C $(KDIR) SUBDIRS=$(PWD) modules
cp *.ko /nfs
clean:
rm -rf *.o
rm -rf *.ko
rm -rf *.mod.*
rm -rf .*.cmd
distclean:
rm -rf modules.order 
rm -rf Module.markers
rm -rf Module.symvers

Makefile을 보시면 obj-m이 있고 main_module-objs가 있습니다.

새로운게 생겼죠? 

obj-m은 기존 처럼 모듈이 만들어질 이름을 넣어 주시면 됩니다.

중요한건 main_module-objs 입니다. main_module 라는 이름의 모듈에 포함되는 오브젝트들이라는 표현입니다.

당연히 그 뒤에다가 작성한 파일이름들을 넣어 주면 동작하겠죠? 

2. 테스트



우선 test_03 폴더를 만들어 줍니다.

01.png

그리고 위의 소스코드를 만들어주고 make를 해주세요.

02.png

자 모듈이 만들어 졌습니다. 그럼 minicom을 이용하여 보드로 넘어 갑시다~~

03.png

root 입력해서 로그인 해주시고 각자 설정해 주신 nfs 서버로 mount 해줍니다.

/mnt/nfs 폴더를 가보시면 main_module.ko 파일이 보이시죠?

등록을 해주시면 이상없이 동작하는 것을 보실 수 있습니다.

이렇게 오늘도 간단하게 알아 보았습니다.

그럼 다음시간 부터는 조금더 디바이스 드라이버 다운 공부를 해보도록 하겠습니다.

그럼 다음시간에 만나요~~~

빠른만남을 원하시면 http://ms-osek.org/ 여기로 찾아오세요~