한국어
Embedded
 

HelloWorld 커널 모듈 예제와 yocto 레시피를 작성하고 모듈을 적재 및 제거하는 내용을 다룬다.

 

개발환경: 우분투 리눅스 18.04, yocto

타겟: wandboard (i.MX6)

 

NXP에서 제공하는 욕토 레이어 meta-freescale, meta-freescale-3rdparty, meta-freescale-distro 를 사용할 수 있다.

이글은 간단한 커널 모듈을 적재하는 방법을 설명할 것이며 이미지는 아주 작은 것을 사용한다. 다음의 명령으로 이미지를 빌드 할 수 있다.

bitbake core-image-minimal

 

meta-freescale-3rdparty 레이어에 레시피 추가

 

위에서 언급한 레이어에 간단한 커널 모듈을 위한 레시피를 추가하려한다. 먼저 적당한 이름의 디렉토리를 만든다.

<your source path>/meta-freescale-3rdparty/recipes-kernel$ mkdir hello-module

 

$ cd hello-module

 

레시피 작성

hello-module.bb

#
# Yocto recipe to build a kernel module out of the kernel tree
# hello-module.bb 
# www.makersweb.net
#

DESCRIPTION = "Hello kernel module out of the kernel tree"
SECTION = "examples"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"
PR = "r0"

inherit module

SRC_URI =  "file://hello.c \
                        file://Makefile \
                        file://COPYING \
                        "

S = "${WORKDIR}"

 

$ mkdir files

$ cd files/

 

모듈 프로그램 작성

hello.c

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

static int __init hello_init(void)
{
    printk("Hello World!\n");
    return 0;
}

static void __exit hello_exit(void)
{
    printk("Good bye!\n");
}

module_init(hello_init); // when insmod
module_exit(hello_exit); // when rmmod

MODULE_LICENSE("GPL v2");

 

Makefile 작성

Makefile

obj-m += hello.o

SRC := $(shell pwd)

all:
        $(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules

modules_install:
        $(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install

clean:
        rm *.o

 

디렉토리 구조

hello-module

├── files

│   ├── COPYING

│   ├── hello.c

│   └── Makefile

└── hello-module.bb

 

해당 레시피를 빌드

$ bitbake hello-module

 

빌드된 모듈 위치 찾기

$ bitbake -e hello-module | grep ^WORKDIR=

 

모듈을 이미지에 포함시키기

<build dir>/conf/local.conf 파일에 다음 라인 추가

IMAGE_INSTALL_append = " hello-module"

 

이미지 다시 빌드

$ bitbake core-image-minimal

 

이미지를 sd메모리에 쓰고 부팅

hello-module은 /lib/modules/4.9.67-fslc+g953c6e30c970/extra 에서 찾을 수 있다.

 

모듈 적재 및 제거

image.png

 

번호 제목 글쓴이 날짜 조회 수
35 임베디드 시스템에서 베어메탈(Bare metal) 이란? makersweb 2019.12.11 8917
» HelloWorld 커널 모듈과 yocto 레시피 추가 방법 file makersweb 2019.12.09 10834
33 ESP32 블루투스 스피커(A2DP Sink) file makersweb 2019.10.29 6944
32 ESP-IDF 의 A2DP리뷰 (ESP32) file makersweb 2019.10.28 13534
31 임베디드 리눅스 부팅 절차 file makersweb 2019.10.21 11093
30 mainline 커널 및 etnaviv 를 사용하는 Wandboard(Freescale i.MX6Q)에서 eglfs를 사용 makersweb 2019.10.17 5422
29 Yocto를 이용한 wandboard BSP 및 Qt5 SDK 빌드 file makersweb 2019.09.29 6039
28 STM32 & LibOpenCM3, printf함수사용 file makersweb 2019.08.08 5867
27 STM32(Cortex-M3) LED Blink with PlatformIO file makersweb 2019.08.05 5725
26 블루투스(Bluetooth) 기초 file makersweb 2019.08.02 9242
25 STM32(Cortex-M3) 개발환경구축 with PlatformIO file makersweb 2019.07.26 7124
24 STM32(Cortex-M3) 개발 - Firmware Flashing file makersweb 2019.07.23 6351
23 libopencm3 활용, Cortex-M 펌웨어 개발 makersweb 2019.07.14 5634
22 yocto의 몇가지 중요한 용어 및 개념 makersweb 2019.06.21 7730
21 라즈베리파이3와 PC간 Serial 통신 테스트 [1] file makersweb 2019.05.20 9773
20 욕토 프로젝트를 이용한 Qt SDK 빌드 for 라즈베리파이3 file makersweb 2019.03.19 6137
19 yocto project, 라즈베리파이를 위한 Qt + 임베디드리눅스 빌드 file makersweb 2019.02.01 14868
18 STM32(Cortex-M3) 개발환경구축 with Eclipse file makersweb 2018.11.08 6914
17 ST, STM32 MCU용 ‘통합 개발 환경(IDE)’ 무료 제공 makersweb 2015.03.04 13298
16 USB OTG 기술의 개념 file pjk 2014.11.03 20109
 
단일배너