본문 바로가기

VEDA 복습/리눅스, 리눅스 프로그래밍

VEDA 57일 - 59일 - 임베디드 리눅스 + 드라이버 / yocto

반응형

리눅스 포팅을 위한 구조도

 

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

 

 

 

 

 

반응형