Yocto 프로젝트는 리눅스 배포판을 생성하는 데 사용되는 복잡한 빌드 시스템이다. 빌드 과정은 여러 단계로 이루어지며, 각각의 단계는 특정 작업을 수행하도록 설계되어 있다. 이하에서는 Yocto 빌드 시스템의 주요 구성 요소와 빌드 과정에 대해 자세히 설명하겠다.

구성 요소 (Components)

Yocto 빌드는 주로 다음과 같은 주요 구성 요소로 이루어져 있다:

빌드 준비 (Build Preparation)

  1. 디렉토리 초기화:

    • Yocto 프로젝트를 시작하기 위해서는 작업 디렉토리를 초기화하는 과정이 필요하다. 이는 oe-init-build-env 스크립트를 활용하여 수행된다. bash source oe-init-build-env
    • 이 명령은 빌드 디렉토리를 만들고 필요한 환경 변수를 설정한다.
  2. 환경 설정:

    • conf/local.confconf/bblayers.conf 파일을 수정하여 필요한 설정을 지정한다.
    • local.conf 파일은 빌드 목표, 머신 종류, 빌드 옵션 등을 설정하는 데 사용된다.
    • bblayers.conf 파일은 빌드에 포함될 레이어를 정의한다.

소스 코드 준비 (Fetching Source Code)

shell SRC_URI = "https://example.com/source.tar.gz" - 다운로드된 소스는 DL_DIR 디렉토리에 저장된다.

빌드 (Build)

  1. 패치 (Patch):

    • 필요한 경우 다운로드된 소스 코드에 패치를 적용한다.
    • 패치는 SRC_URI_append를 사용하여 추가할 수 있다. shell SRC_URI_append = " file://my_patch.patch"
  2. Configure:

    • do_configure task는 소스 코드의 구성을 조정한다.
    • 일반적으로 ./configure 스크립트가 실행된다. bash do_configure() { ./configure --prefix=${prefix} }
  3. 컴파일 (Compile):

    • do_compile task는 실제로 소스 코드를 컴파일한다.
    • 표준 빌드 시스템 명령어(make 등)가 사용된다. bash do_compile() { make }
  4. 설치 (Install):

    • do_install task는 빌드된 아티팩트를 지정된 디렉토리에 설치한다.
    • 이 디렉토리는 DESTDIR 환경 변수로 지정된다. bash do_install() { make install DESTDIR=${D} }
  5. 패키징 (Package):

    • do_package task는 빌드된 아티팩트를 패키징한다.
    • 패키지는 .rpm, .deb, .ipk 등 다양한 형식으로 생성될 수 있다.

이미지 생성 (Image Generation)

빌드 최적화 및 디버깅 (Build Optimization and Debugging)

빌드 최적화 (Build Optimization)

빌드 프로세스를 최적화하여 시간 및 자원을 절약할 수 있다. Yocto는 이를 위해 다양한 기능을 제공한다.

  1. Shared State Cache (SSTATE):

    • 이전 빌드 결과를 재사용하여 빌드 시간을 단축한다.
    • SSTATE_DIR 변수로 캐시 디렉토리를 지정할 수 있다. shell SSTATE_DIR = "/path/to/sstate-cache"
  2. 병렬 빌드:

    • BB_NUMBER_THREADSPARALLEL_MAKE 변수를 조정하여 병렬 빌드를 활용한다. shell BB_NUMBER_THREADS = "8" PARALLEL_MAKE = "-j 8"
  3. 디스크 I/O 개선:

    • 빌드 디렉토리를 빠른 디스크 (예: SSD)에 위치시킨다.
    • TMPDIR 변수를 사용하여 임시 빌드 디렉토리를 지정할 수 있다.
  4. INHERIT +=”rm_work”:

    • 빌드가 완료된 후 임시 파일을 삭제하여 디스크 공간을 절약한다. shell INHERIT += "rm_work"

디버깅 (Debugging)

Yocto 빌드 시스템을 디버깅하는 데 도움이 되는 다양한 도구와 방법이 있다.

  1. 로그 파일:

    • 각 태스크의 실행 결과는 로그 파일에 기록된다.
    • 로그는 tmp/log 디렉토리에 저장된다. shell tmp/work/<machine>/<recipe>/<version>/temp/log.do_<task>.log
  2. devshell:

    • bitbake -c devshell <recipe> 명령을 사용하여 특정 레시피의 개발 쉘 환경으로 진입할 수 있다. shell bitbake -c devshell core-image-minimal
  3. BitBake 디버깅 옵션:

    • -v, -D 플래그를 사용하여 BitBake의 디버그 출력을 활성화한다. shell bitbake -v -D <recipe>
  4. 위키 및 포럼:

    • Yocto 프로젝트의 공식 위키 및 포럼에서 다양한 문제 해결 방법을 찾아볼 수 있다.

유용한 도구와 리소스 (Useful Tools and Resources)

Hob

Toaster

Devtool

devtool add <recipe-name> <source-url>
devtool modify <recipe-name>