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



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


저번시간에는 환경 구축을 해보았습니다.

생각보다 미흡한점이 많아 오늘 추가 작성을 햇습니다 다시한번 확인해 주세요 ㅎㅎ

그럼 오늘은 간단한 디바이스를 만드는 것부터 해보겠습니다.

우선 다음과 같이 폴더를 만들어 주세요.
 01.png

저는 /home/woo/device_driver 에 module 폴더를 하나 만들었습니다.

앞으로 테스트하는 소스코드는 여기에 위치 할것입니다.

test_01 폴더를 만들어 오늘 테스트 할 소스파일을 만들어 보겠습니다.

test_module.c 과 Makefile 2개를 다음과 같이 만들어 줍니다.


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

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

return 0;
}
void __exit test_exit()
{
}

module_init( test_init );
module_exit( test_exit );
MODULE_LICENSE("GPL");

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

obj-m := test_module.o

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

all:
make -C $(KDIR) SUBDIRS=$(PWD) modules

clean:
rm -rf *.0
rm -rf *.ko
rm -rf *.mod.*
rm -rf .*.cmd

Makefile 을 만드실 경우 아래 링크를 한번쯤 보고 작성하세요.
(안보신다면 쉽게 오류가 생길 수도 있습니다.) 

http://forum.falinux.com/zbxe/?mid=device_driver&document_srl=406210


다 작성 하셨다면 make를 해줍니다.

 02.png


하지만 에러가 납니다 ㅠㅠ


make를 하기전에 sudo make를 한번 해줍시다. 커널의 필요한 부분을 컴파일 해줍니다.

(처음 한번만 하면 안해주셔도 됩니다. 다만 커널을 distclean 해준 경우에는 다시 해주어야 합니다.)


03.png


다시 make를 해주면 test_module.ko파일이 생성됩니다.

 

04.png


그럼 이파일을 보드에 옴겨서 실행해 보도록 하겠습니다.


우선 /에 nfs 폴더를 만들어 줍니다.


05.png


chmod 명령어로 권한도 설정해 준다.


그리고 아까 만든 test_module.ko파일을 옴겨준다.


그리고 서버(pc)와 보드의 IP를 설정해 주자.


저는 pc는 192.168.10.1 보드는 192.168.10.2 로 설정하여 1:1로 연결해 주었습니다.


minicom을 통해 보드에 연결해 준다.


mount -t nfs -o nolock 192.168.10.1:/nfs /mnt/nfs   명령어로 nfs서버에 마운트 한다.


/mnt/nfs 폴더로 이동하면 pc의 /nfs 폴더에 있는 파일들이 보인다.


08.png


그럼 insmod test_module.ko 를 통해 모듈을 등록하고


lsmod를 통해 올라간 것을 확인 할 수 있습니다.


rmmod를 통해 모듈을 삭제하고 lsmod를 통해 삭제된것을 확인하였습니다.



오늘은 여기까지 기본적인 모듈 작성법에 대해서 알아 보았습니다.


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


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