Yocto 프로젝트는 임베디드 장치용 맞춤형 리눅스 배포판을 빌드하기 위해 사용되는 강력한 도구이다. 이 프로젝트는 패키지 관리 시스템을 통해 소프트웨어 패키지의 빌드, 배포, 유지 관리를 제어한다.

BitBake와 레시피

BitBake는 Yocto 프로젝트의 핵심 빌드 도구로, "레시피"라는 스크립트를 사용하여 개별 패키지를 빌드한다. 레시피 파일은 .bb 확장자를 가지며, 패키지를 빌드하기 위한 메타데이터와 지침을 포함한다.

hello-world.bb

레시피 예제:

SUMMARY = "An example application"
LICENSE = "MIT"
SRC_URI = "http://example.com/hello-world-1.0.tar.gz"

do_compile() {
    echo "Compiling..."
}

do_install() {
    echo "Installing..."
}

위 레시피는 패키지의 소스 파일을 어디서 가져올지(SRC_URI), 패키지를 빌드하고 설치하는 방법(do_compile, do_install) 등을 정의한다.

Tasks와 Events

각 레시피는 여러 세부 작업으로 나뉜다. 예를 들어:

BitBake는 이러한 작업을 순서대로 실행하여 패키지를 빌드한다.

패키지 형식

Yocto 프로젝트는 여러 패키지 형식을 지원한다. 가장 일반적인 패키지 형식은 다음과 같다:

PACKAGE_CLASSES ?= "package_ipk"

위와 같이, local.conf 파일에서 사용할 패키지 형식을 설정할 수 있다.

패키지 피드

패키지 피드는 빌드된 패키지를 저장하고 배포하는 위치를 의미한다. 패키지 피드는 단말기에서 패키지를 설치하거나 업데이트할 때 사용된다.

SRC_URI = "http://your-feed-server.com/feeds/package_name"

디스트로 설정과 이미지

패키지를 관리하는 최종 목표는 특정 요구를 충족하는 전체 이미지를 만드는 것이다. 이 이미지는 시스템의 모든 구성 요소를 포함하는 최종 산출물이다. 디스트로 설정은 이미지의 전체 설정을 정의하며, 이는 패키지 선택, 커널 옵션, 기본 파일 시스템 등 다양한 설정을 포함할 수 있다.

패키지 그룹과 이미지 레시피

이미지 레시피는 최종 이미지에 포함될 패키지를 나타내는 핵심 파일이다. 이는 종종 비슷한 기능을 갖는 패키지를 그룹화하여 혼합하고 최종 이미지를 생성하는 데 사용된다.

IMAGE_INSTALL += "packagegroup-core-boot"

위와 같은 방식으로 이미지 레시피에서 설치할 패키지를 정의할 수 있다.


패키지 관리 시스템은 Yocto 프로젝트의 핵심 기능 중 하나로, 다양한 패키지 형식을 지원하고, 패키지의 빌드 및 배포 프로세스를 자동화한다. BitBake와 레시피 파일을 사용하여 패키지를 정의하고, 여러 작업을 통해 패키지를 빌드, 설치, 배포할 수 있다.

Layer와 Metadata

Yocto 프로젝트의 또 다른 중요한 개념은 레이어(layer)와 메타데이터(metadata)이다. 레이어는 특정 기능이나 패키지를 독립적으로 관리하고, 프로젝트의 유연성과 재사용성을 높이는 기본 단위이다.

레이어 구조

레이어는 일반적으로 아래와 같은 디렉토리 구조를 갖는다:

meta-example/
├── conf/
│   ├── layer.conf
├── recipes-example/
│   ├── example/
│   │   ├── example_1.0.bb

Layer Configuration

conf/layer.conf 파일은 레이어의 메타데이터 경로와 우선순위를 설정한다.

BBPATH .= ":${LAYERDIR}"
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb"
LAYERSERIES_COMPAT_meta-example = "yocto-series"

주요 레이어

Yocto 프로젝트는 여러 기본 레이어를 제공한다:

  1. meta: 기본적인 빌드 환경을 제공하는 핵심 레이어.
  2. meta-openembedded: 다양한 오픈 소스 소프트웨어 패키지를 포함하는 부가 레이어.
  3. meta-yocto-bsp: 다양한 보드 지원 패키지를 포함하는 레이어.

사용자 정의 레이어 추가

사용자 정의 레이어를 추가하려면, 아래와 같은 명령어를 사용하여 레이어를 설정한다:

bitbake-layers create-layer meta-my-layer
bitbake-layers add-layer meta-my-layer

add-layer 명령어는 bblayers.conf 파일에 새로운 레이어를 추가하여 Yocto 빌드 시스템이 이를 인식하게 한다.

Layer Dependencies

한 레이어가 다른 레이어에 의존하는 경우 conf/layer.conf 파일에서 이를 명시할 수 있다:

LAYERDEPENDS_meta-example = "core"

이 설정은 meta-example 레이어가 core 레이어에 의존함을 의미한다.

Layer 우선순위

레이어의 우선순위를 지정하여 충돌을 방지할 수 있다:

BBFILE_PRIORITY_meta-example = "6"

더 높은 우선순위를 가진 레이어가 동일한 파일에 대해 더 우선순위를 갖게 된다.


래이어와 메타데이터는 Yocto 프로젝트에서 모듈성과 재사용성을 극대화하는 데 중요한 역할을 한다. 레이어를 사용하면 다양한 기능을 독립적으로 관리하고, 복잡한 시스템을 보다 쉽게 구성할 수 있다. 레시피, 태스크, 이벤트와 함께 레이어를 활용하여 더욱 강력하고 유연한 임베디드 리눅스 배포판을 만들 수 있다.