반응형


커널 소스 준비

모듈을 작성하기 위해서는 라즈베리파이에서 현재 사용중인  커널 버전과 같은 버전의 커널 소스가 필요합니다. 버전을 맞추기 위해서 라즈베리파이에 커널을 최근 버전으로 변경하고 진행했습니다.


자세한 커널 컴파일 방법은 다음 포스팅에서 소개하고 있습니다.

Raspberry Pi 3를 위해 커널 크로스 컴파일하기(http://webnautes.tistory.com/547 )




모듈 작성

PC에서 hello.c라는 파일 이름으로 아래 내용을 작성합니다.

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

MODULE_LICENSE("GPU");
MODULE_AUTHOR("webnautes");
MODULE_DESCRIPTION("helloworld module");

MODULE_INFO(intree, "Y");


int mod_init(void)
{
   printk( KERN_INFO "[helloworld module] Hello Wrold!\n");
   printk( KERN_INFO "[helloworld module] Load a module!\n");
   return 0;
}

void mod_exit(void)
{
   printk( KERN_INFO "[helloworld module] Goodbye Bye!\n");
   printk( KERN_INFO "[helloworld module] Unload a module!\n");
}

module_init(mod_init);
module_exit(mod_exit);




hello.c파일이 있는 위치에 Makefile을 작성합니다.

KDIR을 미리 받아 놓은 커널 소스 디렉토리로 지정하면 됩니다.

obj-m := hello.o
KDIR := /home/webnautes/linux

default:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -C$(KDIR) M=$(shell pwd) modules

clean:
make -C$(KDIR) M=$(shell pwd) clean




현재 두 개의 파일이 hello 디렉토리에 작성된 상태입니다.




모듈 컴파일 및 테스트

make 명령을 실행하여 컴파일을 진행합니다.




hello.ko 이름의 모듈 파일이 생성됩니다.




라즈베리파이로 모듈 파일을 복사해줍니다.

$ scp hello.ko pi@192.168.43.142:/home/pi





라즈베리파이로 ssh 접속을 한 후..




다음 명령을 라즈베리파이에서 실행하면 모듈이 커널에 로드됩니다.

pi@raspberrypi:~ $ sudo insmod hello.ko




lsmod 명령으로 로드된 모듈을 확인가능합니다.




dmesg 명령으로 모듈이 로드되면서 출력한 메시지를 확인할 수 있습니다.




다음 명령을 라즈베리파이에서 실행하면 모듈이 커널에 언로드됩니다.

pi@raspberrypi:~ $ sudo rmmod hello



dmesg 명령으로 모듈이 언로드되면서 출력한 메시지를 확인할 수 있습니다.

선택 영역_001.jpg




참고로 make clean 명령으로 생성되었던 파일들을 삭제할 수 있습니다.



반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts