ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BeagleBone Black에서 커널 모듈 프로그래밍
    Beaglebone Black 2015. 9. 20. 09:15

     

    uname 명령으로 비글본 블랙에 설치된 리눅스 커널 버전을 확인합니다.

    root@beaglebone:~# uname -a

    Linux beaglebone 3.8.13-bone70 #1 SMP Fri Jan 23 02:15:42 UTC 2015 armv7l GNU/Linux

     

    현재 설치된 커널과 일치하는 헤더파일을 설치해주었습니다.

    root@beaglebone:~# apt-get update

    root@beaglebone:~# apt-cache search linux-headers-$(uname -r)

    linux-headers-3.8.13-bone70 - Linux kernel headers for 3.8.13-bone70 on armhf

    root@beaglebone:~# apt-get install linux-headers-$(uname -r)

     

    헤더파일은 다음 경로에 설치되네요..

    root@beaglebone:~# cd /usr/src/linux-headers-3.8.13-bone70/

    root@beaglebone:/usr/src/linux-headers-3.8.13-bone70# ls

    Documentation arch firmware ipc net sound

    Kconfig block fs kernel samples tools

    Makefile crypto include lib scripts usr

    Module.symvers drivers init mm security virt

     

    간단한 모듈 프로그램을 hello.c라는 이름으로 작성해주었습니다.

    1. #include <linux/init.h>  
    2. #include <linux/module.h>  
    3. #include <linux/kernel.h>  
    4.     
    5. MODULE_LICENSE("GPL");  
    6. MODULE_AUTHOR("webnautes");  
    7. MODULE_DESCRIPTION("helloworld module.");  
    8.     
    9. static int __init mod_init(void){  
    10.    printk( KERN_INFO "[module_helloworld] Load a module\n");  
    11.    return 0;  
    12. }  
    13.     
    14. static void __exit mod_exit(void){  
    15.    printk(KERN_INFO "[module_helloworld] Unload a module\n");  
    16. }  
    17.     
    18.     
    19. module_init(mod_init);  
    20. module_exit(mod_exit);  

     

    그리고 컴파일을 하기 위해서 Makefile도 작성해주었습니다.

    obj-m+=hello.o

     

    all:

        make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules

    clean:

        make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean

     

     

    Make 명령으로 컴파일을 하게 되면 hello.ko라는 파일이 생성됩니다.

     

    insmod 명령으로 모듈을 커널에 올리면

    root@beaglebone:~/hello# insmod hello.ko

     

    dmesg 명령 실행해서 아래와 같은 메시지를 확인 할 수 있습니다.

    [13059.841466] [module_helloworld] Load a module

     

    마찬가지로 rmmod 명령으로 커널에서 모듈을 내리면

    root@beaglebone:~/hello# rmmod hello.ko

     

    dmesg 명령으로 아래와 같은 메시지를 확인 할 수 있습니다.

    [13080.492742] [module_helloworld] Unload a module


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

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

    유튜브 구독하기


    댓글 6

    • aingsseop 2018.06.14 16:20


      안녕하십니까.먼저 티스토리에서 많은 정보를 얻고 있음에 감사드립니다.

      다름이 아니라 저는 현재 대학교 4학년으로 캡스톤 졸업작품을 진행중에 있습니다.

      다름이 아니라 저희가 현재 BeagleBone Blue를 사용하여 블루투스를 이용한 무선통신을 진행중인데, 자료가 너무없어 댓글 남겨봅니다. 혹시 참고 가능한 자료나

      아시는 부분 있으신가요?

      ( 세세하게 말씀드리면 adc 과정을 거친 "데이터를 BeagleBone Blue에서 BeagleBone Blue로 블루투스 무선통신을 이용하여 데이터를 전송하게 되고 그 전송 받은

      데이터로 서보모터를 제어하는 것"입니다. )

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2018.06.14 17:40 신고


        라즈3로 한 자료이지만 참고해보세요.

        Raspberry Pi 3 Bluetooth 페어링 방법(bluetoothctl) 및 C언어 Bluetooth 서버 예제
        http://webnautes.tistory.com/1137

        Raspberry Pi 3와 Android앱 간에 Bluetooth 통신 테스트
        http://webnautes.tistory.com/995

      • aingsseop 2018.06.14 20:47


        댓글 감사합니다. 그 글은 참조하였습니다. 허나 제가 사용하려는 것이 board 와 board간의 블루투스 통신이라 pc와의 통신인 저 방법으로는 응용이 잘 안되더라고요..ㅜㅜ

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2018.06.14 20:50 신고


        라이브러리만 설치되면 보드간 통신도 가능합니다.


        보드간 자료라면 다음 포스팅도 있습니다.

        Raspberry Pi 3에서 Arduino 101 BLE 제어 및 정보 가져오기 ( C 언어 라이브러리 사용 )

        http://webnautes.tistory.com/972

      • aingsseop 2018.06.15 12:10


        흠 .. 아예 sudo apt-get install libbluetooth-dev libreadline-dev cmake

        여기서 부터 안되네요 ..

        E: Unable to locate package libbluetooth-dev
        E: Unable to locate package libreadline-dev
        E: Package 'cmake' has no installation candidate

        이런식으로 뜨면서 .. 그냥 데이터만 오고 가면 되는데 네트워크 쪽 전공이 아니라 그런지 어렵네요 ㅠㅠ

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2018.06.15 12:14 신고


        우분투/데비안 계열 리눅스를 설치한 보드가 아닌가 보네요..

        lsb_release -a 명령으로 리눅스 버전 정보등을 확인해보세요..

        필요한 것들을 모두 소스코드부터 컴파일해서 진행하는 방법이 있긴한데...
        이 방법은 쉽지 않습니다.

Designed by Tistory.