Yocto 기본 빌드 프로세스 이해 (2) - Bitbake 기본 사용법, 이미지와 패키지 빌드, 작업 디렉터리 및 로그 분석
이전 포스팅에서 Yocto 개발 환경을 구성하는 방법과 기본적인 설정 과정을 설명드렸습니다. 이번 포스팅에서는 Yocto의 핵심 도구인 Bitbake를 사용하는 방법과 이미지 및 패키지를 빌드하는 과정, 작업 디렉터리와 로그를 분석하는 방법을 상세히 알아보겠습니다.
1. Bitbake 기본 사용법
Bitbake 개요
Bitbake는 Yocto 프로젝트의 빌드 시스템을 담당하는 도구입니다. 메타데이터(레시피, 클래스 파일, 환경 설정)를 기반으로 패키지와 이미지를 생성하는 역할을 수행합니다. Bitbake는 여러 단계로 나뉘어 빌드를 수행하며, 각 단계는 독립적인 작업(Task)으로 처리됩니다.
기본 명령어
Bitbake는 명령어 형태로 실행됩니다. 기본적인 명령어는 다음과 같습니다.
# 특정 패키지(레시피) 빌드
bitbake <recipe-name>
# 예: core-image-minimal 빌드
bitbake core-image-minimal
# 빌드 가능한 모든 타겟 목록 조회
bitbake -s
# 특정 패키지의 의존성 그래프 출력
bitbake -g <recipe-name>
# 빌드 로그와 에러 메시지 보기
bitbake <recipe-name> -v
레시피(recipe) 확인
Yocto에서 Bitbake는 레시피(.bb
파일)를 기반으로 작업을 수행합니다. 특정 레시피를 찾는 방법은 다음과 같습니다.
# 특정 레시피의 경로 찾기
bitbake-layers show-recipes | grep <recipe-name>
# 예: busybox 레시피 찾기
bitbake-layers show-recipes | grep busybox
레시피는 meta
디렉터리 아래의 recipes-*
폴더에 위치하는 경우가 많습니다.
2. 이미지와 패키지 빌드
이미지 빌드
Yocto에서 이미지는 여러 패키지를 하나로 묶어 시스템 이미지를 생성하는 과정입니다. 일반적으로 core-image-minimal
과 같은 기본 이미지를 빌드하는 것으로 시작합니다.
# 기본 이미지 빌드
bitbake core-image-minimal
빌드가 완료되면 build/tmp/deploy/images
디렉터리에 생성된 이미지를 확인할 수 있습니다.
ls -lh build/tmp/deploy/images/<machine>/
커스텀 패키지 빌드
Yocto에서는 사용자 정의 패키지도 빌드할 수 있습니다. 예를 들어, 간단한 "Hello World" 프로그램을 Yocto에서 패키지로 빌드하는 방법은 다음과 같습니다.
1. 레시피 작성
meta-myrecipes/recipes-hello/hello/hello_1.0.bb
파일을 생성하고 다음과 같이 작성합니다.
SUMMARY = "Hello World Example"
DESCRIPTION = "A simple Hello World application"
LICENSE = "MIT"
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}
}
2. 소스 코드 작성
meta-myrecipes/recipes-hello/hello/files/hello.c
파일을 생성하고 다음과 같이 작성합니다.
#include <stdio.h>
int main() {
printf("Hello, Yocto!\n");
return 0;
}
3. 빌드 및 설치
다음 명령어로 빌드를 수행합니다.
bitbake hello
이후 이미지에 해당 패키지를 포함하려면 local.conf
파일에 다음 내용을 추가합니다.
IMAGE_INSTALL:append = " hello"
이미지를 다시 빌드하면 Hello World 패키지가 포함된 이미지를 생성할 수 있습니다.
3. 작업 디렉터리 (workdir) 및 로그 분석
작업 디렉터리 구조
Bitbake는 빌드 과정에서 각 레시피마다 작업 디렉터리를 생성합니다. 기본 경로는 다음과 같습니다.
build/tmp/work/<machine>/<package-name>/<version>/
예를 들어, hello
패키지의 작업 디렉터리는 다음과 같이 생성됩니다.
ls build/tmp/work/armv8a-poky-linux/hello/1.0-r0/
주요 작업 디렉터리
- temp/: 빌드 로그와 실행 스크립트가 저장됨
- work/: 소스 코드와 빌드 산출물이 위치함
- image/: 최종 설치된 패키지가 포함된 이미지
로그 분석
문제가 발생했을 때는 temp
디렉터리의 로그를 확인해야 합니다.
# 빌드 로그
cat build/tmp/work/armv8a-poky-linux/hello/1.0-r0/temp/log.do_compile
# 에러 로그
cat build/tmp/work/armv8a-poky-linux/hello/1.0-r0/temp/log.do_install
빌드가 실패하면 로그 파일의 마지막 부분을 집중적으로 확인하는 것이 좋습니다. 또한 다음 명령어로 오류를 쉽게 찾을 수 있습니다.
grep -i "error" build/tmp/work/*/*/temp/log.*
4. 결론
이번 포스팅에서는 Bitbake의 기본 사용법과 이미지 및 패키지 빌드 과정, 작업 디렉터리와 로그 분석 방법에 대해 살펴보았습니다. 실제 프로젝트에서는 이러한 기본 개념을 바탕으로 커스텀 레시피를 작성하고 이미지를 구성하는 과정이 중요합니다.
'Linux > yocto' 카테고리의 다른 글
Yocto RK3399 커스텀 Layer 생성 (0) | 2025.05.15 |
---|---|
RK3399 이미지 커스터마이징 (0) | 2025.05.14 |
Yocto의 주요 구성 요소 이해 (0) | 2025.05.12 |
Yocto 프로젝트 클론 및 첫 빌드 (0) | 2025.05.11 |
Yocto 개발 환경 설정: 호스트 환경 구축과 필수 패키지 설치 (0) | 2025.05.10 |