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

 

번호 제목 글쓴이 날짜 조회 수
51 Raspberry Pi에서 I²C 그리고 Bit-bang (비트뱅) makersweb 2023.08.27 424
50 Yocto 프로젝트 3.4 릴리스(honister) 이상 버전으로 마이그레이션 시 참고 사항 makersweb 2023.03.21 680
49 Raspberry Pi 와 ATtiny85 간 I²C 통신 file makersweb 2023.03.18 388
48 로직분석기와 함께 PulseView 를 사용해서 CAN 신호 캡쳐 file makersweb 2023.03.16 463
47 임베디드 개발자를 위한 Hex,Bin,Dec 변환기 유틸 file makersweb 2023.02.27 1072
46 ATtiny85 개발보드(HW-260) file makersweb 2023.01.02 401
45 플랫폼 디바이스 및 디바이스 트리 makersweb 2021.03.20 3803
44 Android 기기를 사용하여 Raspberry Pi SD 카드 작성 방법 file makersweb 2020.08.01 938
43 Raspberry Pi 의 프레임버퍼(Framebuffer)구성 makersweb 2020.05.15 1757
42 라즈베리파이2에서 RTOS기반 GPIO제어(LED) file makersweb 2020.04.21 1583
41 POSIX를 지원하는 오픈소스 RTOS, RTEMS file makersweb 2020.04.15 1656
40 라즈베리파이 부팅 가능한 sd카드 파티션 생성 makersweb 2020.04.15 1658
39 플랫폼 디바이스 및 드라이버에 대해서 makersweb 2020.02.01 6168
38 디바이스 트리(Device Tree, DT) makersweb 2020.01.12 5453
37 RISC-V : 자유롭고 개방 된 RISC 명령어 세트 아키텍처 [2] file makersweb 2020.01.01 963
36 임베디드 비대칭 멀티 프로세싱(asymmetric multiprocessing) 시스템 file makersweb 2019.12.31 919
35 임베디드 시스템에서 베어메탈(Bare metal) 이란? makersweb 2019.12.11 3290
» HelloWorld 커널 모듈과 yocto 레시피 추가 방법 file makersweb 2019.12.09 5584
33 ESP32 블루투스 스피커(A2DP Sink) file makersweb 2019.10.29 3472
32 ESP-IDF 의 A2DP리뷰 (ESP32) file makersweb 2019.10.28 9507