ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Raspberry Pi 3에서 커널 모듈(kernel module) 프로그래밍
    Raspberry Pi/Linux Device Driver Programming 2017. 11. 13. 13:14


    커널 소스 준비

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


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

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



    포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
    댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

    여러분의 응원으로 좋은 컨텐츠가 만들어집니다. 지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

    유튜브 구독하기


    댓글 3

Designed by Tistory.