한국어
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

 

번호 제목 글쓴이 날짜 조회 수
53 윈도우10에서 Prolific USB to Serial 드라이버 인식문제 file makersweb 2016.01.24 24809
52 USB OTG 기술의 개념 file pjk 2014.11.03 17749
51 yocto project, 라즈베리파이를 위한 Qt + 임베디드리눅스 빌드 file makersweb 2019.02.01 12776
50 [Uboot 명령어 및 환경 변수 요약]U-Boot에 Command 및 Parameter에 대한 설명 pjk 2014.01.09 12736
49 ESP-IDF 의 A2DP리뷰 (ESP32) file makersweb 2019.10.28 11414
48 이클립스에서 IAR프로젝트 사용방법 file makersweb 2015.07.09 10630
47 ST, STM32 MCU용 ‘통합 개발 환경(IDE)’ 무료 제공 makersweb 2015.03.04 10543
46 USB 핀아웃 file pjk 2014.10.11 9897
45 플랫폼 디바이스 및 드라이버에 대해서 makersweb 2020.02.01 9515
44 임베디드 리눅스 부팅 절차 file makersweb 2019.10.21 8903
43 AVRISP mkII 펌웨어 업그레이드 file makersweb 2015.07.22 8499
42 디바이스 트리(Device Tree, DT) makersweb 2020.01.12 7933
41 라즈베리파이3와 PC간 Serial 통신 테스트 [1] file makersweb 2019.05.20 7845
40 폴링(Polling), 인터럽트(Interrupt), DMA(Direct Memory Access) file pjk 2014.10.24 7796
» HelloWorld 커널 모듈과 yocto 레시피 추가 방법 file makersweb 2019.12.09 7753
38 실시간 운영 체제 또는 RTOS(Real Time Operating System) pjk 2014.12.02 7423
37 STM32와 CAN(Controller Area Network) Loop Back file makersweb 2017.01.23 7053
36 블루투스(Bluetooth) 기초 file makersweb 2019.08.02 6980
35 printk() makersweb 2014.02.27 6333
34 시리얼 인터페이스 커넥터를 위한 핀아웃 file pjk 2014.10.10 6279