Yocto Project 5.0 Scarthgap 문서 기준

Yocto에서 recipe가 이미지 안의 파일이 되기까지

소스 빌드, 패키지 생성, rootfs 구성, Wic 디스크 이미지 생성을 다른 단계로 읽습니다.

recipe·package·image는 서로 다른 단위입니다

이름역할흔한 오해
recipe (.bb)소스를 가져오고 빌드·설치·패키징하는 metadata와 task를 정의합니다.recipe 하나가 항상 패키지 하나를 만든다고 생각합니다.
package설치할 파일과 runtime dependency 등을 묶는 단위입니다.컴파일 성공한 모든 파일이 최종 image에 들어간다고 생각합니다.
image recipe어떤 패키지와 기능을 rootfs에 넣을지 정합니다.kernel recipe만 바꾸면 rootfs의 모든 내용도 바뀐다고 생각합니다.
MACHINE / DISTRO하드웨어 대상과 배포 정책 등의 구성을 선택합니다.둘을 모두 보드 이름 정도로 취급합니다.

BitBake는 단순히 shell 명령을 위에서 아래로 한 번씩 실행하는 스크립트 실행기가 아닙니다. metadata와 의존성으로 task graph를 구성하고, 재사용할 수 있는 결과가 있으면 sstate 등을 활용합니다. Yocto의 빌드 구조

파일이 어느 단계에서 없어졌는지 찾습니다

일반적인 recipe와 image의 연결
  1. fetch → unpack → patch

    정해진 source revision을 가져와 작업 소스를 준비합니다.

    configure·compile task의 입력이 됩니다.

  2. configure → compile → install

    구성하고 빌드한 뒤 recipe의 staging 영역인 ${D}에 설치합니다.

    패키지 분리 규칙을 적용합니다.

  3. package → package_write_*

    파일을 패키지로 나누고 선택한 형식의 패키지를 만듭니다.

    image에 선택된 패키지를 설치합니다.

  4. rootfs → image

    최종 rootfs를 구성하고 지정한 파일 시스템·이미지 형식을 만듭니다.

    Wic을 사용하면 파티션 배치까지 구성합니다.

  5. 배포용 이미지

    보드가 기대하는 부트 영역·rootfs 등의 배치를 확인합니다.

→는 대표적인 의존 흐름입니다. 실제 task graph에는 native tool·sysroot·패키지 의존성 등이 더 있고 독립 task는 병렬로 진행될 수 있습니다.

do_install이 성공했는데 제품에서 파일이 없다면 ${D}에 설치됐는지, FILES 규칙에 잡혔는지, 어느 package로 나뉘었는지, 그 package가 image에 포함됐는지를 차례로 봅니다. task별 역할

변수가 무엇을 선택하는지 읽습니다

IMAGE_INSTALL:append = " example-tool"
IMAGE_FSTYPES += "wic"
WKS_FILE = "example-layout.wks"
설명
1image에 example-tool 패키지를 추가하는 교육용 예입니다. example-tool이라는 recipe가 존재한다는 보장은 없습니다. append 문자열 앞의 공백은 기존 항목과 분리하는 데 필요합니다.
2이미지 출력 형식에 wic을 더합니다. 해당 BSP와 image 구성이 지원해야 합니다.
3Wic이 사용할 파티션 배치 파일을 선택합니다. 실제 프로젝트에 존재하는 파일이어야 합니다.

예전 metadata의 VAR_append와 최근 override 문법의 VAR:append는 적용 버전을 확인해야 합니다. DEPENDS는 빌드에 필요한 recipe 측 의존성, RDEPENDS:${PN}은 생성 패키지의 runtime 의존성을 표현합니다. 둘을 같은 이름 목록으로 기계적으로 바꾸면 안 됩니다. 변수 정의 override 문법 변경

Wic은 rootfs의 내용과 디스크 배치를 연결합니다

rootfs tar나 ext4 파일을 만들었다고 부트로더가 요구하는 디스크 배치까지 완료된 것은 아닙니다. Wic의 kickstart 파일은 파티션의 source·크기·정렬·파일 시스템 등을 지정합니다. 부트로더를 파티션 표에 없는 raw 영역에 쓰는 BSP도 있으므로, 다른 보드의 offset을 그대로 복사하면 안 됩니다. Wic 이미지 생성

bitbake -e example-image
bitbake-layers show-layers
bitbake-layers show-appends

읽기·조사용 명령 예입니다. 첫 명령의 결과에서 최종 IMAGE_INSTALL, IMAGE_FSTYPES, WKS_FILE과 변수 변경 이력을 확인합니다. 이미지가 달라진 이유를 찾을 때 source revision뿐 아니라 layer revision·local.conf·MACHINE·DISTRO·적용된 bbappend도 함께 기록해야 합니다.