Linux/yocto

Yocto의 주요 구성 요소 이해

임베디드 친구 2025. 5. 12. 21:47
728x90
반응형

Yocto의 주요 구성 요소 이해

Yocto 프로젝트는 임베디드 시스템 개발을 위한 강력한 도구로, 다양한 플랫폼에 맞춘 리눅스 배포판을 생성할 수 있도록 지원합니다. 이를 효과적으로 활용하기 위해서는 Yocto의 주요 구성 요소와 이들이 상호작용하는 방식에 대한 이해가 필수적입니다. 이번 포스팅에서는 Yocto의 주요 구성 요소인 BitBake, Poky, OpenEmbedded, 그리고 BSP 레이어와 Machine Configuration에 대해 살펴보고, Yocto의 핵심인 레시피 구조를 분석해보겠습니다.

BitBake, Poky, OpenEmbedded 이해

1. BitBake

BitBake는 Yocto 빌드 시스템의 중심 역할을 하는 도구입니다. 이는 Yocto에서 소프트웨어 패키지를 빌드하고 이미지를 생성하는 과정에서 메타데이터를 해석하고 작업을 실행하는 역할을 합니다.

BitBake는 Make와 유사한 역할을 하지만, 보다 복잡한 의존성 관리와 분산 빌드를 지원한다는 점에서 차별화됩니다. 주요 특징은 다음과 같습니다.

  • 메타데이터 처리: BitBake는 레시피(.bb 파일), 클래스(.bbclass 파일), 그리고 구성(.conf 파일)으로 구성된 메타데이터를 분석하여 빌드 작업을 계획합니다.
  • 태스크 기반 빌드: 각 패키지에 대해 fetch, unpack, patch, configure, compile, install, package와 같은 태스크를 정의하고, 이를 순차적으로 실행합니다.
  • 병렬 빌드: BB_NUMBER_THREADSPARALLEL_MAKE 설정을 통해 여러 빌드 작업을 동시에 수행할 수 있습니다.

예를 들어, 다음은 간단한 BitBake 명령어 예시입니다.

template@yocto:~$ bitbake core-image-minimal

이 명령어는 core-image-minimal이라는 기본 이미지를 빌드하라는 의미입니다.

2. Poky

Poky는 Yocto 프로젝트의 참조 배포판(reference distribution)으로, Yocto를 쉽게 활용할 수 있도록 구성된 환경입니다. Poky는 다음과 같은 요소로 구성됩니다.

  • BitBake: 앞서 설명한 빌드 도구
  • 메타데이터: 기본 레이어(meta)와 레시피
  • 기본 설정 파일: conf/local.confconf/bblayers.conf

Poky는 Yocto 빌드 환경을 간소화하고, 다양한 임베디드 플랫폼에서 리눅스 시스템을 빌드하는 과정을 표준화하는 역할을 합니다.

3. OpenEmbedded

OpenEmbedded는 Yocto의 메타데이터 기반을 제공하는 프로젝트입니다. Yocto와 OpenEmbedded는 밀접한 관계를 가지며, OpenEmbedded는 다음과 같은 역할을 합니다.

  • 메타 레이어 제공: OpenEmbedded는 다양한 하드웨어 플랫폼과 패키지를 지원하는 수많은 메타 레이어를 제공합니다.
  • 공동 개발 플랫폼: Yocto는 OpenEmbedded-Core(OE-Core)를 기반으로 하고 있으며, 이는 기본 빌드 시스템과 패키지 레시피를 포함하는 핵심 레이어입니다.

OpenEmbedded를 사용하면 Yocto 프로젝트에서 보다 다양한 기능과 하드웨어를 쉽게 지원할 수 있습니다.

BSP Layer와 Machine Configuration 이해

1. BSP Layer

BSP(Board Support Package) 레이어는 특정 하드웨어 플랫폼을 지원하는 데 필요한 구성과 패치를 제공하는 역할을 합니다. 이는 주로 다음과 같은 요소로 구성됩니다.

  • 커널 구성: 특정 보드에 맞춘 리눅스 커널 설정
  • 부트로더 구성: U-Boot와 같은 부트로더 설정
  • 머신 구성 파일: 특정 하드웨어에 대한 구성

예를 들어, RK3399 보드를 위한 BSP 레이어는 다음과 같이 구성될 수 있습니다.

meta-rk3399/
├── conf
│   └── machine
│       └── rk3399.conf
├── recipes-kernel
│   └── linux
│       └── linux-rockchip_5.10.bb
└── recipes-bsp
    └── u-boot
        └── u-boot-rockchip_2021.10.bb

2. Machine Configuration

Machine Configuration은 특정 하드웨어 플랫폼에 대한 설정을 정의하는 파일로, conf/machine/ 디렉터리 아래에 위치합니다. 이 파일은 다음과 같은 정보를 포함합니다.

  • MACHINE 변수: 하드웨어 플랫폼의 식별자
  • 커널 및 부트로더 설정: PREFERRED_PROVIDERPREFERRED_VERSION 설정
  • 이미지 플래시 방법: 이미지 생성 시 어떤 형식으로 생성할지 결정

예를 들어, rk3399.conf 파일은 다음과 같이 작성될 수 있습니다.

# conf/machine/rk3399.conf
MACHINE = "rk3399"
SOC_FAMILY = "rockchip"
PREFERRED_PROVIDER_virtual/kernel = "linux-rockchip"
PREFERRED_PROVIDER_u-boot = "u-boot-rockchip"

주요 레시피 구조 분석

Yocto에서 레시피는 패키지를 빌드하고 설치하는 방법을 정의하는 파일입니다. .bb 확장자를 가지며, 다음과 같은 구조를 따릅니다.

1. 기본 레시피 구조

간단한 "hello-world" 예제 레시피를 살펴보겠습니다.

# recipes-example/hello-world/hello-world_1.0.bb
SUMMARY = "Hello World Application"
DESCRIPTION = "간단한 Hello World 예제 프로그램입니다."
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835de3cd26e6f02b2a9bbed79f2b1d4"

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}/hello
}

이 레시피의 주요 항목은 다음과 같습니다.

  • 메타정보: SUMMARY, DESCRIPTION, LICENSE
  • 소스 코드 위치: SRC_URI
  • 빌드 디렉터리: S
  • 컴파일 단계: do_compile 함수
  • 설치 단계: do_install 함수

2. 레이어 구성과 빌드

위 예제 레시피를 meta-mylayer 레이어에 추가하려면 다음과 같이 구성합니다.

meta-my layer/
├── conf
│   └── layer.conf
└── recipes-example
    └── hello-world
        ├── hello-world_1.0.bb
        └── files
            └── hello.c

hello.c 파일은 간단한 C 프로그램입니다.

// hello.c
#include <stdio.h>
int main() {
    printf("Hello, Yocto!\n");
    return 0;
}

이제 bitbake hello-world 명령어로 패키지를 빌드할 수 있습니다.

결론

이번 포스팅에서는 Yocto의 주요 구성 요소인 BitBake, Poky, OpenEmbedded와 BSP Layer, Machine Configuration, 그리고 레시피 구조에 대해 살펴보았습니다. 이러한 구성 요소를 이해하면 Yocto 빌드 시스템의 작동 원리를 파악하고, 필요에 따라 자신만의 커스텀 이미지를 쉽게 구성할 수 있습니다.

반응형