1. local.conf
- 빌드 환경을 초기화하면, poky/build/conf/local.conf 파일이 만들어진다.
- local.conf의 역할
1-1. target machine(MACHINE 지정)
1-2. cross-toolchain 지정 - local.conf 주의점
2-1. local.conf 파일은 기본 설정들을 override하기에 매우 유용하지만,
local.conf에서 변경 사항은 어떠한 소스코드 추적 시스템에 의해서도 추적되지 않기 때문에 조심할 것
2. local.conf 내 변수
2.1 MACHINE
- MACHINE: 빌드할 타겟 머신(e.g. MACHINE = "qemux86-64")


- ${MULTIMACH_TARGET_SYS}=${MACHINE}-${DISTRO}-${OS}로 나뉘는 것 같음(예상)
- poky가 기본적으로 지원하는 레퍼런스 BSP 머신 (poky/meta-yocto-bsp 레이어에 의해 기본적으로 지원)

- 이 BUILD가 사용할 수 있는 타겟 머신은
1) 이 BUILD가 타겟 머신 지원용 레이어(e.g., mata-ti, meta-arm, meta-yocto-bsp, ...)를
2) 사용하는 레이어라고 추가(${BUILDDIR}/conf/bblayers.conf에서 추가) 한후,
3) 해당 레이어의 <Layer>/conf/machine/<MACHINE_NAME>.conf 로 확인할 수 있다.
3) 이 BUILD/conf/local.conf에서 MACHINE='MACHINE_NAME' 변수에 추가하므로써 타겟 머신용 이미지를 만들 수 있다.
MACHINE= 'target machine'description
| beaglebone | 32bit ARM 레퍼런스 플랫폼 비글본 블랙 |
| genericx86 | 일반적인 32bit x86 시스템 |
| genericx86-64 | 일반적인 64bit x86 시스템 |
| mpc8315e-rdb | NXP MPC8315 PowerPC reference platform |
| edgerouter | 64bit MIPS reference platform Edge Router |
- OpenEmbedded Core에 의해 지원되는 머신
MACHINE= 'target machine'description
| qemuarm | QEMU ARM 에뮬레이터 |
| qemuarm64 | QEMU ARM64 에뮬레이터 |
| qemumips | QEMU MIPS 에뮬레이터 |
| qemumips64 | QEMU MIPS64 에뮬레이터 |
| qemuppc | QEMU PowerPC 에뮬레이터 |
| qemux86-64 | QEMU x86 64bit 에뮬레이터 |
| qemux86 | QEMU x86 에뮬레이터 |
추가적인 BSP 레이어 사용은 링크 참고
2.2 ${TOPDIR}
내 bitbake shell에서 build 디렉토리
$ bitbake -e | egrep "TOPDIR="
poky/build
2.3 ${DL_DIR}
- default) DL_DIR="${TOPDIR}/downloads"

- downloads 디렉토리 명시
- 첫 빌드 시스템이 많은 소스 코드, 타르볼을 upstream project들로 부터 다운로드할 위치
2.4 downloads의 역할
- SRC_URI= tar ball download일 경우
- libmpc 컴포넌트를 예를든다.
- 컴포넌트 이름: libmpc
- 컴포넌트 위치: poky/meta/recipes-support/libmpc
- 컴포넌트 레시피: poky/meta/recipes-support/libmpc/libmpc_1.0.3.bb
- libmpc_1.0.3.bb 컴포넌트 레시피 內
- SRC_URI = "http://www.multi..../download/mpc-${PV}.tar.gz"
- bitbake는 여기서 ${PV}에 패키지 버전 "1.0.3"을 대입
- "http://www.multi..../download/mpc-1.0.3.tar.gz"을 다운 후 DL_DIR이 가리키는 곳에 저장
- 다운로드가 끝난 후, 비트베이크는 다운로드한 파일의 md5sum 값과 sha256sum 값을 레시피의 값과 비교해 둘이 일치하면 ${DL_DIR}/mpc-1.0.3.tar.gz.done 파일을 생성해 완료함을 표시한다.
- 이 방식으로다음 빌드에서 같은 파일을 필요로할 때 이미 파일이 다운로드 됨을 확인하고 재사용한다.
downloads 스크린 샷들



- SRC_URI= git일 경우
- 컴포넌트 레시피가 do_fetch 태스크를 실행할 때, SRC_URI = git:// 일 경우, -> ${DL_DIR}/git2/<git URL>로 download

2.5 ${TMPDIR}
- default) TMP_DIR="${TOPDIR}/tmp"

- 빌드 아웃풋 둘 곳
- 엄청나게 많은 build work와 bitbake의 임시 파일(소스 extraction, compilation) 및 아웃풋 둘 곳

2.6 ${DISTRO}
- default) DISTRO="poky"

- 배포판 디폴트 선택

- 결과물 파일이 ${TMP_DIR}/work/${MACHINE}-${DISTRO}-OS/결과물들로 생성된다.

2.7 ${INHERIT}
- INHERIT: 상속
2.8 INHERIT += "rm_work"
- INHERIT += "rm_work"
- rm_work는 bitbake에게 특정 레시피를 빌드한 이후에 소스코드, 빌드 파일을 지움

다시 이미지 만들어보자.
만든 후 $ du -sh build/tmp 해보면 아예 안했을 때보다는 줄어있다.
- rm_work는 bitbake에게 특정 레시피를 빌드한 이후에 소스코드, 빌드 파일을 지움
2.9 ${RM_WORK_EXCLUDE}
- 위의 rm_work에 의해 지워지는 레시피 리스트에서 제외하기 원할 때
- RM_WORK_EXCLUDE += "recipe-name"
- 예:
- RM_WORK_EXCLUDE += "core-image-minimal"
2.10 IMAGE_INSTALL
- 이미지에 설치할 것

2.11 ${PACKAGE_CLASSES}
2.12 ${SSTATE_DIR}
- default) SSTATE_DIR = "${TOPDIR}/sstate-cache"
- 사용할 sstate-cache 디렉토리 지정

2.13 include
- include를 사용하여, local.conf에 append할 '파일'을 지정할 수 있다.
- 경로에 파일이 없어도 됨
- 예를 들어, CPU_COUNT 변수를 append한다
2.14 다른 local.conf append
- 예를 들어 ${TOPDIR}/my-local.conf라는 파일을 두고, 내 ${BUILDDIR}/conf/local.conf에서 include를 사용하여 추가해보자.

- 다음과 같이 변수도 설정가능 하다.
CPU_COUNT = "${@oe.utils.cpu_count()}"
BB_NUMBER_THREADS = "${@max(${CPU_COUNT}*7//10,1)}"
PARALLEL_MAKE = "-j ${BB_NUMBER_THREADS}"
2.15 class file도 추가
- 특정 class file을 include 할 순 있지만 abnormal! 한 방법이다.
- 아래에서 INHERIT하는 방식과는 다르게 path만 잘 주면, 아무 곳에 위치시켜도된다.
- my_class.bbclass의 위치는 ${TOPDIR}에 있다고 가정
# local.conf
include ${TOPDIR}/my_class.bbclass
2.16 INHERIT
- 일반레시피에서 inherit 하는 것과 똑같다. (대소문자 주의)
- 상황 1.
- local로만 my_class.bbclass를 넣어서 bitbake 돌리고 싶은 경우
- bbclass 이름: my_class.bbclass
- 우선 이 bbclass 파일을 layer/classes 에 위치 시킴
- local로만 my_class.bbclass를 넣어서 bitbake 돌리고 싶은 경우
(layer/classes) $ tree .
├── my_class.bbclass # <-
├── sample_1.bbclass
├── sample_2.bbclass
├── ....
- 하지만 어느 레시피에서도 my_class.bbclass를 inherit my_class 하지 않는 경우, 적용 X
- 따라서 local.conf에 INHERIT += "my_class"를 사용하면 된다.

- 따라서 local.conf에 INHERIT += "my_class"를 사용하면 된다.
- include, require, INHERIT의 자세한 설명은 링크 참고: https://velog.io/@markyang92/yocto-include-require-inherit-INHERIT
출처: https://velog.io/@markyang92/posts?tag=Yocto
'Yocto Project : : Open Source' 카테고리의 다른 글
| recipe 작성 2. do_configure(), do_compile(), Makefile, CMake, do_compile[network] = "1" (0) | 2024.06.01 |
|---|---|
| recipe 작성 1. do_fetch(), do_unpack(), do_patch(), license, source_mirror관련 (0) | 2024.06.01 |
| 메타데이터 파일, task, 변수, 연산자, OVERRIDES (0) | 2024.06.01 |
| VIRTUAL-RUNTIME, virtual/ (0) | 2024.06.01 |
| YOCTO - do_package(), package에 관해 (0) | 2024.05.31 |