Linux/yocto

Yocto RK3399 커스텀 Layer 생성

임베디드 친구 2025. 5. 15. 20:24
728x90
반응형

Yocto RK3399 커스텀 Layer 생성

이번 포스팅에서는 Yocto 프로젝트에서 Rockchip RK3399 보드를 대상으로 커스텀 레이어(Custom Layer)를 생성하는 방법에 대해 설명합니다. Yocto의 기본 레이어만으로는 특정 하드웨어나 프로젝트에 특화된 기능을 반영하기 어렵기 때문에, 별도의 커스텀 레이어를 생성하고 이를 관리하는 과정이 중요합니다.

이 글에서는 새로운 레이어를 생성하고, 기본적인 layer.conf 파일을 구성하는 방법을 단계별로 설명합니다. 또한, 예제 레시피를 작성하고, 빌드 과정에서 해당 레시피가 제대로 반영되는지 확인하는 절차까지 상세하게 다룹니다.

1. 커스텀 Layer의 필요성

Yocto 프로젝트는 다양한 패키지와 보드를 지원하기 위해 여러 레이어로 구성됩니다. 일반적으로 다음과 같이 구성됩니다.

  • Core Layer: Yocto의 기본 기능과 패키지를 제공하는 레이어입니다.
  • BSP Layer: 특정 보드에 대한 지원을 담당하는 레이어입니다.
  • Metadata Layer: 사용자 정의 패키지와 구성을 포함하는 레이어입니다.

그러나 프로젝트별로 독자적인 기능과 패키지를 포함시키려면, 별도의 커스텀 레이어를 생성하여 관리하는 것이 바람직합니다.

2. 커스텀 Layer 생성 방법

2.1 Yocto 프로젝트 환경 준비

이미 Yocto 개발 환경이 구성된 상태에서 진행합니다. RK3399 보드를 대상으로 하는 빌드 환경이 준비된 상태에서 작업합니다.

작업 디렉터리를 Yocto 프로젝트 최상위 디렉터리로 이동한 후, 다음 명령어를 실행해 새 레이어를 생성합니다.

cd ~/yocto
source oe-init-build-env

# meta-rk3399-custom 레이어 생성
bitbake-layers create-layer ../meta-rk3399-custom

위 명령어는 meta-rk3399-custom이라는 새로운 레이어를 생성하고, 기본적인 디렉터리 구조와 파일을 만들어줍니다.

2.2 생성된 디렉터리 구조

생성된 meta-rk3399-custom 디렉터리는 다음과 같이 구성됩니다.

meta-rk3399-custom/
├── conf/
│   └── layer.conf
├── recipes-example/
│   └── example/
│       ├── example_1.0.bb
│       └── files/
└── README

이제 각 구성 요소에 대해 자세히 살펴보겠습니다.

3. layer.conf 구성

meta-rk3399-custom/conf/layer.conf 파일은 Yocto 빌드 시스템이 해당 레이어를 인식하도록 설정하는 파일입니다.

3.1 기본 layer.conf 설정

아래는 layer.conf의 기본 구성 예입니다.

# meta-rk3399-custom/conf/layer.conf

# 레이어 우선순위 설정
BBFILE_PRIORITY_meta-rk3399-custom = "7"

# 이 레이어의 .bb, .bbappend 파일을 검색할 경로 설정
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend"

# COMPATIBLE_MACHINE을 통해 RK3399만 타겟으로 지정
COMPATIBLE_MACHINE = "rk3399"

# BBPATH와 BBFILES에 레이어를 포함하도록 설정
BBPATH .= ":${LAYERDIR}"
  • BBFILE_PRIORITY: 레이어의 우선순위를 설정합니다. 숫자가 높을수록 우선순위가 높아집니다.
  • BBFILES: 이 레이어에서 사용할 .bb.bbappend 파일의 경로를 지정합니다.
  • COMPATIBLE_MACHINE: RK3399 보드와 호환되도록 설정합니다.

4. 예제 레시피 작성

4.1 예제 프로그램 작성

먼저 간단한 "Hello, Yocto!" 메시지를 출력하는 프로그램을 작성합니다.

// meta-rk3399-custom/recipes-example/hello/files/hello.c
#include <stdio.h>

int main() {
    printf("Hello, Yocto!\n");
    return 0;
}

4.2 레시피 파일 작성

이제 위 프로그램을 Yocto 빌드 시스템에 통합하기 위한 레시피 파일을 작성합니다.

# meta-rk3399-custom/recipes-example/hello/hello_1.0.bb
SUMMARY = "Hello Yocto Example"
DESCRIPTION = "A simple example application for Yocto"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835d0a7c6f6325a40a68c526cd82d8c"

SRC_URI = "file://hello.c"

S = "${WORKDIR}"

do_compile() {
    ${CC} hello.c -o hello
}

do_install() {
    install -d ${D}${bindir}
    install -m 0755 hello ${D}${bindir}
}

5. 빌드 시스템에 Layer 추가

생성된 레이어를 Yocto 빌드 시스템에 등록합니다.

# conf/bblayers.conf 파일 편집
vim conf/bblayers.conf

아래와 같이 meta-rk3399-custom 경로를 추가합니다.

BBLAYERS += "${TOPDIR}/../meta-rk3399-custom"

6. 패키지 빌드 및 검증

이제 예제 패키지를 빌드하고, 결과를 확인해보겠습니다.

# hello 패키지 빌드
bitbake hello

빌드가 완료되면, 생성된 패키지를 확인합니다.

# 빌드된 바이너리 확인
ls -l tmp/deploy/ipk/

RK3399 보드에 해당 패키지를 설치하고 실행해보면 다음과 같이 출력됩니다.

# 보드에서 실행
hello

# 출력 결과
Hello, Yocto!

7. 마무리 및 다음 단계

이번 포스팅에서는 Yocto 프로젝트에서 RK3399 보드를 대상으로 커스텀 레이어를 생성하고, 간단한 예제 프로그램을 빌드하는 과정을 살펴보았습니다.

728x90
반응형