Linux/yocto

Yocto 커스텀 레이어: 애플리케이션과 라이브러리 레시피 작성

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

Yocto 커스텀 레이어: 애플리케이션과 라이브러리 레시피 작성

이번 포스팅에서는 Yocto 프로젝트에서 사용자 정의 애플리케이션과 외부 라이브러리를 패키징하고 이미지에 포함하는 방법을 설명합니다. 지난 포스팅에서 Yocto 개발 환경을 설정하는 방법을 다루었으므로, 이번에는 실제로 C/C++ 애플리케이션과 외부 라이브러리를 다루는 레시피를 작성하는 실습을 진행해보겠습니다.

1. 간단한 C/C++ 애플리케이션 작성과 Yocto 레시피 작성

먼저, 간단한 C/C++ 애플리케이션을 작성하고 이를 Yocto 패키지로 빌드하는 방법을 살펴보겠습니다.

1.1 C 애플리케이션 작성

아래는 간단한 C 프로그램 예제입니다. 이 프로그램은 "Hello Yocto!"를 출력하는 역할을 합니다.

hello-yocto.c 파일:

#include <stdio.h>

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

1.2 디렉터리 구성

Yocto의 커스텀 레이어 내에 애플리케이션을 빌드할 수 있도록 디렉터리를 구성합니다. 예를 들어, meta-mycustom 레이어가 있다고 가정하면 다음과 같이 디렉터리를 구성합니다.

meta-mycustom/
├── recipes-apps/
│   └── hello-yocto/
│       ├── files/
│       │   └── hello-yocto.c
│       └── hello-yocto_1.0.bb
└── ...
  • files/ 디렉터리에는 실제 소스 코드를 넣습니다.
  • hello-yocto_1.0.bb는 빌드 레시피 파일입니다.

1.3 레시피 파일 작성

다음으로 hello-yocto_1.0.bb 레시피 파일을 작성합니다.

hello-yocto_1.0.bb 파일:

SUMMARY = "A simple Hello Yocto application"
DESCRIPTION = "This is a simple C application that prints Hello Yocto."
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835f13c17c08266dc20137c8b2b9c3f"

SRC_URI = "file://hello-yocto.c"

S = "${WORKDIR}"

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

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

FILES:${PN} += "${bindir}/hello-yocto"

1.4 빌드 및 이미지 포함

이제 bitbake를 사용하여 패키지를 빌드합니다.

bitbake hello-yocto

성공적으로 빌드된 경우, 해당 바이너리를 이미지에 포함하려면 local.conf나 이미지 레시피 파일에 다음과 같이 추가합니다.

IMAGE_INSTALL:append = " hello-yocto"

이후 이미지를 재생성하면 해당 애플리케이션이 포함된 이미지를 얻을 수 있습니다.


2. 외부 라이브러리 패키징 및 이미지 포함

다음으로 외부 오픈소스 라이브러리를 패키징하고 이를 이미지에 포함하는 방법을 살펴보겠습니다. 예제 라이브러리로 zlib을 사용해보겠습니다.

2.1 레시피 작성

Yocto는 대부분의 인기 있는 라이브러리를 이미 제공하지만, 예제 목적으로 meta-mycustom/recipes-libs/zlib/에 레시피를 작성해보겠습니다.

디렉터리 구조:

meta-mycustom/
├── recipes-libs/
│   └── zlib/
│       └── zlib_1.2.11.bb
└── ...

zlib_1.2.11.bb 파일:

SUMMARY = "Zlib compression library"
DESCRIPTION = "Zlib is a widely used compression library."
HOMEPAGE = "https://zlib.net"
LICENSE = "Zlib"
LIC_FILES_CHKSUM = "file://README;md5=1e8ca8f3e21a2f7cb8ac5365bde87dc7"

SRC_URI = "https://zlib.net/zlib-1.2.11.tar.gz"
SRC_URI[sha256sum] = "1c9f62f0778697a09d36121ead88e08e73934c80acaa413eab05b6de262b3e44"

S = "${WORKDIR}/zlib-1.2.11"

inherit autotools

do_install() {
    oe_runmake install DESTDIR=${D}
}

FILES:${PN} += "${libdir}/*.so*"

2.2 빌드 및 이미지 포함

bitbake zlib

이미지에 포함하려면 다음과 같이 설정합니다.

IMAGE_INSTALL:append = " zlib"

이제 Yocto 빌드 시스템이 외부 라이브러리를 패키징하고 이미지에 포함하게 됩니다.


3. 최종 이미지 빌드 및 검증

모든 준비가 끝났다면 다음과 같이 이미지를 빌드합니다.

bitbake core-image-minimal

빌드가 완료된 후 타겟 보드(RK3399 등)에서 부팅하여 다음과 같이 애플리케이션과 라이브러리를 확인할 수 있습니다.

# Hello Yocto 실행
hello-yocto

# zlib 라이브러리 확인
ls /usr/lib/libz.so*

정상적으로 실행되면 애플리케이션과 외부 라이브러리가 성공적으로 Yocto 이미지에 포함된 것입니다.


4. 마무리

이번 포스팅에서는 Yocto에서 C/C++ 애플리케이션과 외부 라이브러리를 패키징하고 이미지를 구성하는 방법을 설명했습니다. 이를 통해 원하는 소프트웨어를 Yocto 기반 시스템에 쉽게 통합할 수 있습니다.

반응형