SW 개발

[yocto] yocto 를 이용한 모듈만들기

. . . 2021. 3. 30. 15:27
반응형

아래의 예제는 https://git.io/JUgth 에 풀 소스코드 업로드.

레시피 추가

다음과같이 예제 레시피(my-module.bb)를 만든다.

# Copyright 2017,2018 ???
SUMMARY = "my-module"
LICENSE = "CLOSED"

BB_STRICT_CHECKSUM = "0"

inherit module

# SJA for kernel 4.14
#SRC_URI = "file://brcm-xgbe_${PV}.tar.gz"

SRC_URI = "file://* "
S = "${WORKDIR}/build-src"

RPROVIDES_${PN} += "my-module"

do_package_qa() {
  :
}

  • inherit module : 모듈 빌드할것을 명시
  • LICENSE = "CLOSED" : 라이센스는 closed 로해서 라이센스 빌드 관련 내용 스킵
  • SRC_URI / S : 욕토 내부의 파일을 카피하여 빌드

소스코드

yocto 의 build-src 폴더에 다음의 파일들을 만든다.

bb 파일에서 명시해준 폴더에 파일들을 작성

# SPDX-License-Identifier: GPL-2.0

obj-m += my-module.o

my-module-objs := my-module-main.o


all:
  $(MAKE) -Wall -C $(KERNEL_SRC) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)  modules

modules_install :
  $(MAKE) -Wall -C $(KERNEL_SRC) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules_install

clean:
  $(MAKE) -C $(KERNEL_SRC) -Wall M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) $@

  • KERNEL_SRC, PWD 등의 환경변수들은 yocto system 에서 넘어온다.
#include <linux/module.h>
#include <linux/device.h>
#include <linux/kernel.h> /* Needed for KERN_INFO */


MODULE_AUTHOR("Tom Lendacky <thomas.lendacky@amd.com>");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_VERSION("1.0");
MODULE_DESCRIPTION("hello world");


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

static void __exit my_module_exit(void)
{
  printk(KERN_INFO "Goodbye, World!\n");
}

module_init(my_module_init);
module_exit(my_module_exit);
  • 기본 모듈예제코드
반응형