yocto project
kernel 포팅을 자동화
레시피를 이용하여 yocto를 돌리기만 해도 커널을 빌드할 수 있다.
원래대로라면 toolchain, bootloader, kernel, rootfile system, drivers etc다 빌드해야하는데... workflow가 복잡하다.
yocto 식(자동화 되어도 결국 수동으로 빌드하는 과정을 알아야 한다.)
kernel porting -> program(script?) -> recepie 작성 -> bitbake(xxxxx.bb = task(S), .bbclass, .bbappend etc) ->
bitbake core-image-minimal(이러면 build가 완료된다!!!)
포키(poky) : yocto project의 레퍼런스 시스템 / linux 낮은 버전에서 할 것(20.04)
bitbake가 본체
bitbake를 사용하기 위해서는 우선 설정이 필요하다. => source oe-init-build-env
layer : meta-*의 파일들
xxxxx.bb : bitbake 파일, 일종의 레시피 파일
상속관계는 다음과 같다. core-image-minimal.bb => core-image.bbclass => image.bbclass
비트 베이크 얻기 및 설치
bitbake에 대한 간단한 내용(Make, CMake 같은 빌드 도구보다 상위, 많은 패키지와 의존성 자동 관리)
목적 | 메타데이터 기반으로 임베디드 리눅스 시스템 이미지 빌드, 임베디드 리눅스 포팅을 위한 요소들을 자동 빌드 |
역할 | 패키지 간 의존성 분석, 빌드 순서 관리, 캐시 관리, 병렬 빌드 |
기반 언어 | Python + Shell |
메타데이터 파일 | .bb, .bbclass, .conf 등 |
주요 구성 | 레시피(Recipe), 레이어(Layer), 설정파일(Configuration) |
1. Recipe (.bb)
패키지를 빌드하기 위한 스크립트로, 소스코드 위치, 의존성, 빌드 순서, 설치 방법 등을 정의
예: core-image-minimal.bb, busybox_1.33.1.bb
2. Class (.bbclass)
공통 동작을 재사용하기 위한 템플릿. 레시피에서 inherit 키워드로 포함
예: base.bbclass, autotools.bbclass
3. Configuration (.conf)
전체 시스템이나 빌드 설정을 제어하는 설정 파일
예: local.conf, bblayers.conf
의존성 처리를 포함한 빌드를 수행한다. BB_DEFAULT에 명시된 대로 task를 처리한다.
레시피 버전은 기본적으로 최신 버전이다. 사용자가 지정할 수 있다.
옵션 | 설명 | 사용 예시 |
<recipe> | 주어진 레시피를 빌드 | bitbake core-image-minimal |
-c <task> | 특정 task만 실행 (e.g., clean, compile, fetch 등) | bitbake -c compile busybox |
-C | 강제 수행 | bitbake -C compile busybox |
-b | 의존성 처리를 포함하지 않는 빌드 수행 | bitbake -b core-image-minimal.bb |
-e <recipe> | 빌드 환경변수 출력 | bitbake -e busybox |
-s | 모든 레시피와 버전 목록 표시 (패키지 목록 확인용) | bitbake -s |
-g | 의존성 그래프 생성 (dot 파일) | bitbake -g busybox |
-f | 해당 task 강제 실행 (cache 무시) | bitbake -f -c compile busybox |
-k | 실패해도 가능한 작업은 계속 수행 | bitbake -k core-image-minimal |
--continue | -k와 동일, Bitbake 2.x 이후 권장 | bitbake --continue core-image-minimal |
-v | 자세한 출력 (verbose) | bitbake -v core-image-minimal |
-D, -DD, -DDD | 디버그 출력 단계별 증가 (D가 많을수록 상세) | bitbake -DDD busybox |
-q | 출력 최소화 (quiet) | bitbake -q busybox |
-n | 실제 작업 수행 없이 task 순서만 출력 (dry run) | bitbake -n busybox |
-p | 캐시만 초기화하고 종료 (parse only) | bitbake -p |
--runall=<task> | 지정된 task를 모든 레시피에 대해 실행 | bitbake --runall=clean |
--help | 도움말 출력 | bitbake --help |
항상 기본은 conf 파일이다.
bblayers.conf에서 전체 레이어가 어떻게 싸여있는 지 볼 수 있다. -> 여기서 layer 간 관계를 수정할 수 있다.
BBPATH = poky에서 빌드 장소(/build)
SRC_URI : 필요한 소스 코드를 가져올 위치(do_fetch)
빌드 의존성 : 빌드 되는데 필요한 의존성 ex) 정적 라이브러리
실행 의존성 : 실행 하는데 필요한 의존성 ex) 동적 라이브러리
의존성 표시 : 공표(제공하는 패키지가 이름이나 기능을 공표, 프로비저닝 - 암시적, 명시적, 심볼릭), 참조 (제공하는 패키지가 이름이나 기능을 참조, DPENDS, REDPENDS)
일반적으로 core-image에서 추가하는 방식으로 이미지를 만든다.
부트로더 : 처음 모든 파일(커널 이미지 등)을 기기에 올리는 프로그램
리눅스에서 유명한 부트로더는 U-boot
클럭 세팅, DRAM 세팅, 커널 load(zImage -> DRAM), 디바이스 트리 로드(dtb -> DRAM)
kernel은 zImage로 compressed된 상태 => Image로 uncompress => setting(read dtb, mount rootfile system, load modules) => systemd가 script 실행(user level initialization) => getty call(login 등 기능 제공) => bash 시작
system init -> kernel loading
uboot 커맨드로 할 수 있는 것
1. memory dump
2. nand flash
3. program download/runnings
=> 개발 중에 uboot를 일종의 디버깅 툴로 사용할 수 있다.
uboot는 로더의 기능과 모니터 기능을 모두 제공한다.
VFS
HDD /dev/sda ext4
NANDF /dev/
NORF /dev/ jffs jffs2
ROM /dev/
=> Memory Technology Device(MTD)
배포판 ex) ubuntu(.iso --> CD / DVD에 구우면 disk --> DVD tray --> install)
1. distro
workflow : mnual -> auto : recipes(.bb, .bbclass, .bbappend)
2. bitbake : core-image-minimal
3. simulator : qemu(both graphic and non-graphic)
4. root file system customize(IMAGE_INSTALL)
package => /build/conf/local.conf -> CORE_IMAGE_EXTRA_INSTALL = "additional app" > 커널에 추가로 설치된다.
5. app build
6. kernel build
https://docs.yoctoproject.org/bitbake/
BitBake User Manual — Bitbake dev documentation
© Copyright 2004-2025, Richard Purdie, Chris Larson, and Phil Blundell Last updated on Jun 10, 2025 from the bitbake git repository.
docs.yoctoproject.org
'VEDA 복습 > 리눅스, 리눅스 프로그래밍' 카테고리의 다른 글
VEDA 56일차 - 리눅스 커널 프로그래밍 및 디바이스 드라이버 (1) | 2025.06.06 |
---|---|
VEDA 55일차 - 리눅스 커널 프로그래밍 (0) | 2025.06.05 |
VEDA 54일차 - 리눅스 커널 프로그래밍 (0) | 2025.06.04 |
VEDA 53일차 - 임베디드 파일시스템, 디바이스 드라이버 (1) | 2025.06.02 |
VEDA 50일차 - 리눅스 드라이버 (1) | 2025.05.28 |