반응형


커널 소스 준비

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


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

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 명령으로 생성되었던 파일들을 삭제할 수 있습니다.



반응형

해본 것을 문서화하여 기록합니다.


포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.


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

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">
  1. thumbnail
    Favicon of https://tibyte.kr BlogIcon 티바이트

    감사합니다! 커널 버전이 달라서 insmod할때 실패하긴 했는데 맞는 버전으로 소스를 받아서 다시 해봐야겠습니다

  2. thumbnail
    2016.04.28 02:02

    좋은 정보 감사합니다~