Yocto 프로젝트에서 커스텀 패키지를 생성하고 배포하는 것은 임베디드 시스템 개발에 매우 중요하다. 이 과정을 통해 사용자 정의 소프트웨어를 빌드 환경에 통합하고, 배포 가능하게 할 수 있다. 다음은 커스텀 패키지 생성 및 배포 과정을 단계별로 상세히 설명한다.

커스텀 레시피 작성

레시피는 meta 레이어 안에 배치된다. 일반적으로 레시피는 meta-yourlayer/recipes-example/example 디렉토리 구조를 따른다. 만약 meta-yourlayer 레이어가 존재하지 않는다면 새로 생성할 수 있다.

yocto@build $ source oe-init-build-env
yocto@build $ bitbake-layers create-layer meta-yourlayer
yocto@build $ mkdir -p meta-yourlayer/recipes-example/example

새 레시피 파일을 생성한다. 예를 들어, example_1.0.bb 파일을 다음과 같이 작성할 수 있다:

yocto@build $ nano meta-yourlayer/recipes-example/example/example_1.0.bb

이 파일의 내용은 다음과 같다:

SUMMARY = "An example application"
DESCRIPTION = "This is an example application to demonstrate custom package creation with Yocto Project."
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835c6786c9b48a03588f3b5bc16f9b4"
SRC_URI = "file://example-1.0.tar.gz"
SRC_URI[md5sum] = "d41d8cd98f00b204e9800998ecf8427e"
SRC_URI[sha256sum] = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"

S = "${WORKDIR}/example-1.0"

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

FILES:${PN} = "${bindir}"

소스 코드 및 보조 파일 준비

위 레시피 파일 중 SRC_URI 에 명시된 소스 코드를 준비해야 한다. 예제 소스 코드는 다음과 같이 작성할 수 있다:

예제 소스 코드 example.c 파일을 작성하고 컴파일 한다:

#include <stdio.h>

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

컴파일 후 tar.gz 파일로 압축한다:

yocto@build $ gcc -o example example.c
yocto@build $ mkdir example-1.0
yocto@build $ mv example example-1.0/
yocto@build $ tar -czvf example-1.0.tar.gz example-1.0/
yocto@build $ cp example-1.0.tar.gz meta-yourlayer/recipes-example/example/

레시피 테스트 및 빌드

커스텀 레시피를 테스트하고 빌드해볼 필요가 있다. 이를 위해 bitbake 커맨드를 사용한다.

yocto@build $ bitbake example

결과 확인

빌드가 성공하면, 생성된 패키지는 tmp/deploy/ipk 또는 tmp/deploy/rpm 디렉토리에 위치하게 된다. 생성된 패키지 파일은 지정한 형식에 따라 다를 수 있다.

yocto@build $ ls tmp/deploy/ipk/*/example_1.0-r0_*.ipk

패키지 배포

생성된 패키지를 최종 목표 장치에 배포하려면 패키지 관리 시스템을 활용할 수 있다. 예를 들어 opkg를 사용하는 경우 다음과 같이 할 수 있다:

root@target $ opkg install /path/to/example_1.0-r0_*.ipk

커스텀 패키지를 성공적으로 생성한 후에는 이러한 패키지를 포함한 전체 이미지를 만들어 배포해야 한다. 다음은 Yocto 프로젝트를 통해 커스텀 이미지를 생성하고 배포하는 과정을 상세히 설명한다.

커스텀 이미지 레시피 작성

Yocto 프로젝트는 다양한 이미지 레시피를 제공한다. 예를 들어 core-image-minimal.bb 같은 레시피가 있다. 새로운 커스텀 이미지를 생성하려면 기존의 레시피를 참고하여 새로운 레시피 파일을 작성한다.

yocto@build $ mkdir -p meta-yourlayer/recipes-core/images
yocto@build $ nano meta-yourlayer/recipes-core/images/custom-image.bb

custom-image.bb 파일의 예시는 다음과 같다:

DESCRIPTION = "Custom Image with example package"
LICENSE = "MIT"

inherit core-image

IMAGE_INSTALL += "example"

빌드 환경 설정

bblayers.conf 파일에서 커스텀 레이어를 추가하여 빌드 환경을 설정한다.

yocto@build $ nano conf/bblayers.conf

다음 줄을 추가하여 커스텀 레이어 경로를 포함시킨다:

BBLAYERS += " ${BSPDIR}/meta-yourlayer"

커스텀 이미지 빌드

이미지 빌드를 시작한다. bitbake 커맨드를 사용하여 이미지를 빌드한다.

yocto@build $ bitbake custom-image

결과 확인

빌드가 성공적으로 완료되면, 생성된 이미지 파일은 tmp/deploy/images/<machine> 디렉토리에 위치하게 된다.

yocto@build $ ls tmp/deploy/images/<machine>/

예시로 qemu_x86-64 머신을 사용한 경우:

yocto@build $ ls tmp/deploy/images/qemu-x86-64/

이미지 배포

생성된 이미지를 최종 장치에 배포하려면 다양한 방식이 있다. 예를 들어, SD 카드나 USB 드라이브를 사용할 수 있다. 이미지 파일을 디스크에 쓰기 위해 dd 명령어를 사용한다. 여기서, /dev/sdX는 실제 장치 파일 경로로 교체해야 한다.

yocto@build $ sudo dd if=tmp/deploy/images/qemu-x86-64/custom-image.ext4 of=/dev/sdX bs=4M
yocto@build $ sync

테스트

이미지를 최종 장치로 부팅한다. 제대로 부팅되며 커스텀 패키지가 포함된 목적 이미지가 실행되는지 확인한다.


이와 같은 과정을 통해 Yocto 프로젝트를 이용하여 맞춤형 이미지를 만들어 배포할 수 있다. 이 과정은 커스텀 패키지가 포함된 보다 구체적인 시스템을 구축하는 데 매우 유용하다.