본문 바로가기
임베디드 & 시스템 프로그래밍

[yocto] 빌드 과정에 대한 이해 정리

by 문톰 2025. 3. 31.

 

 

Precondition

https://aal-izz-well.tistory.com/entry/Yocto-%EC%84%B8%EB%AF%B8%EB%82%98-%EC%9E%90%EB%A3%8C

 

 

회사에서 yocto 빌드 과정을 잘못 이해해서 발생한 시행착오들을 정리했습니다.

 

 

 

바이너리 빌드와 

1. yocto 주요 Task 빌드 과정

- yocto의 구성요소인 bitbake가 빌드 시 실행 하는 주요 Task들은 아래와 같습니다. 

 

test.bb

LICENSE="CLOSED"
inherit useradd
USERADD_PACKAGES = "${PN}"
GROUPADD_PARAM_${PN} = "-g 981 xgroup"
USERADD_PARAM_${PN} = "-g xgroup -u 1031 MOON"
PACKAGES = "${PN}"
PV = "0.0.2"
PR = "r0"
SRC_URI = "file://pkg/"
S = "${WORKDIR}/pkg/21/debug"
...

 

 

1) ${WORKDIR}

- 여기에서 아래의 "${WORKDIR}"이 bitbake가 레시피 파일의 SRC_URI 경로를 참조해서 갖고온 것들이 저장된
디렉토리의 경로입니다.

 

2) S

- bitbake가 주요 태스크 수행 시(do_compile, do_install) 사용하는 디렉토리의 경로입니다.

 

3) SRC_URI

- bitbake가 빌드를 위해 가져오는 소스의 경로를 말합니다. 해당 경로는 현재 레시피가 위치한 경로의

/pkg 디렉토리를 참조하겠다는 코드입니다.

 

주요 태스크설명

do_fetch 소스코드 다운로드
do_unpack 압축 해제
do_patch 패치 적용
do_configure 설정 스크립트 실행 (./configure)
do_compile 컴파일
do_install 임시 디렉토리에 설치
do_package 패키징 (RPM, DEB, IPK 등)
do_rootfs 루트 파일시스템 이미지 생성
do_image 최종 이미지 파일 생성
do_deploy 결과 파일 배포 (SD 카드 이미지 등)

 

 

예시

 

 

 

2. 패키지 저장 디렉토리, 최종 이미지 디렉토리의 분리

yocto bitbake가 빌드 시 아래와 같이 패키지들을 보통 아키텍처 이름으로된 디렉토리(cortex...)를

별도로 생성합니다. 이후 빌드로 생성된 패키지 디렉토리를 coretex..디렉토리에 저장합니다.

 

* 패키지란( busybox 예시)

-아래와 같이 패키지란 바이너리 파일 뿐만 아니라 해당 파일에 필요한 다양한 구성요소를 담은 디렉토리입니다.

 

3.  패키지 파일을 최종 이미지 디렉토리에 저장

- 아래 bitbake가 빌드 시 진행되는 주요 태스크에서 do_rootfs이후의 단계에서 "2."번의 cortex..디렉토리에 저장된 패키지들을 최종 이미지 디렉토리에 저장합니다.

 

 

### 추가사항 ###

 

1. do_compile 없이 do_install 이후만 진행

-  실제 현업에서는 고객사가 소스코드 없이 바이너리 파일만 제공 한 후 bitbake 빌드 시 컴파일 과정 없이 do_install 이후의 태스크만 진행하도록 하는 경우가 있습니다. 

 

 

2. local.conf 파일 사용

- 실제 현업에서 많이 사용하는 파일입니다. 해당 파일에 사용할 변수를 정의하여 레시피 파일에 조건 문 등의 분기 코드로
별도의 옵션 등을 추가할 수 있습니다.

MACHINE ?= "raspberrypi4"
DISTRO ?= "poky"
PACKAGE_CLASSES ?= "package_ipk"
EXTRA_IMAGE_FEATURES ?= "debug-tweaks ssh-server-dropbear"
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j8"

 

예시

# conf/local.conf
MY_APP_FEATURES = "usb serial bluetooth"

 

# recipes-apps/myapp/myapp_1.0.bb
DESCRIPTION = "My custom app"
LICENSE = "MIT"
SRC_URI = "file://myapp.c"

# local.conf의 변수 사용
EXTRA_FEATURES = "${MY_APP_FEATURES}"

do_compile() {
    echo "Enabled features: ${EXTRA_FEATURES}"
    # 예: 이 값을 Makefile에 넘기거나 조건 분기할 수 있음
}

'임베디드 & 시스템 프로그래밍' 카테고리의 다른 글

[Yocto 기본 개념 공부 정리]  (2) 2023.12.17

댓글