.bbappend 레시피의 사용 목적
- 일반적으로 프로젝트에는 필요한 기능을 이미 제공하는 일련의 레이어가 존재한다. 이러한 기존의 레이어에서 특정 요구사항을 반영하기 위해 변경을 가해야한다.
- 이를 위해서 .bbappend 파일을 활용 할 수 있으며, 이를 통해 기존 레이어 구조를 유지한 채로 변경이 가능하다.
- .bbappend의 파일명에는 % 와일드카드를 사용할 수 있으며, 주로 패키지의 버전별로 요구사항을 반영할 때 활용가능하다.
- 예를 들어, app_1.2.3.bb 파일이 존재할 때 다음과 같은 규칙으로 .bbappend 파일을 생성할 수 있다.
.bbappend로 .bb에 작성된 태스크 확장방법
- 앞 “3장: 비트베이크 문법”에서 :append와 :prepend 키워드를 살펴보았었다.
- 이 두 키워드는 변수의 확장뿐만 아니라 태스크의 확장 또한 가능하다.
do_install:append() {
# append task
}
- 예를 들어, 기존 레시피의 do_install()에 추가 태스크를 작업하려면 위와 같이 작성 가능하다.
.bbappend로 .bb에 작성된 빌드 옵션 수정 방법
- Yocto 프로젝트의 경우 다양한 Make, Cargo, Autotools 등 다양한 빌드 시스템을 제공한다. 따라서, Yocto에서는 이를 위해 각 빌드 시스템의 빌드 옵션을 수정할 수 있는 변수들을 제공한다.
| 빌드 시스템 | 변수 |
| Autotools | EXTRA_OECONF |
| Cargo | EXTRA_OECARGO |
| CMake | EXTRA_OECMAKE |
| Make | EXTRA_OEMAKE |
| Meson | EXTRA_OEMESON |
| NPM | EXTRA_OENPM |
| SCons | EXTRA_OESCONS |
| WAF | EXTRA_OEWAF |
- Autotools 기반의 애플리케이션을 빌드하기 위한 빌드 옵션은 다음과 같이 작성할 수 있다.
# 새 기능 활성화 및 예전 기능 비활성화
EXTRA_OECONF += “--enable-new-feature --disable-old-feature”
# arm 환경일 경우, 새 기능 활성화
EXTRA_OECONF:append:arm = “--enable-new-feature”
.bbappend로 .bb에 작성된 소스에 패치를 적용하는 방법
- 새 패치를 적용해야 하는 경우, 패치 파일을 비트베이크가 찾을 수 있도록 해주어야 한다.
- 비트베이크는 패키지를 빌드하기 위한 소스 파일의 경로를 FILESPATH 변수로 검색한다.
- 레시피에서는 일반적으로 FILESPATH를 건들이지 않고 FILESEXTRAPATH를 수정한다.
# 예시 1. 새 패치 적용 방법
FILESEXTRAPATHS:prepend := “${THISDIR}/${PN}-${PV}:”
SRC_URI += “file://newpatch.patch”
—
# 예시 2. 새 설정 설치 방법
FILESEXTRAPATHS:prepend := “${THISDIR}/${PN}-${PV}:”
SRC_URI += “file://newconfig.conf
do_install:append() {
install -D -m 644 ${WORKDIR}/newconfig.conf ${D}${sysconfdir}/newconfig.conf
}
- 예시 1은 새 패치를 적용하기 위한 .patch 파일을 등록하는 .bbappend 예시이다.
- 예시 2는 새 설정을 이미지에 설치하기 위한 .conf 파일을 등록하는 .bbappend 예시이다.
- 예시 1과 2에 사용된 THISDIR과 PN 그리고 PV 변수는 다음과 같은 역할을 한다.
- THISDIR: 현재 .bbappend가 위치한 디렉터리 경로
- PN: 패키지 이름 (Ex. app_1.2.3.bbappend에서 app 부분)
- PV: 패키지 버전 (Ex. app_1.2.3.bbappend에서 1.2.3. 부분)
- 비트베이크는 패키지를 빌드하기 위한 소스 파일을 다음과 같은 순서로 검색한다.
- <recipe>-<version>/
- <recipe>/
- files/

- 주로 패치 파일은 <recipe>/files/ 하위에 존재한다.

- FILESPATH 혹은 FILESEXTRAPATH 등과 같은 변수가 잘 설정되었는지 확인하기 위해 bitbake-getvar 명령을 확인해볼 수 있다.
레시피에서 참조하는 rootfs 경로 변수
- 아래 예시와 같이 레시피에 sysconfdir 등의 경로 변수가 사용되는 경우가 존재한다.
- 이는 일반적인 리눅스의 rootfs 이미지의 루트(/) 경로를 기반한다.
| 변수 | 기본 경로 |
| base_bindir | /bin |
| base_sbindir | /sbin |
| sysconfdir | /etc |
| localstatedir | /var |
| datadir | /usr/share |
| bindir | /usr/bin |
| sbindir | /usr/sbin |
| libdir | /usr/lib 또는 /usr/lib64 |
| libexecdir | /usr/libexec |
| includedir | /usr/include |
- 기본적으로 이 경로들은 poky/meta/conf/bitbake.conf 파일에서 시작되어 설정된다.
FILESEXTRAPATHS:prepend := “${THISDIR}/${PN}-${PV}:”
SRC_URI += “file://newconfig.conf
do_install:append() {
install -D -m 644 ${WORKDIR}/newconfig.conf ${D}${sysconfdir}/newconfig.conf
}
- 예를 들어, 위와 같은 .bbappend 레시피 파일이 존재할 경우,
- ${D}${sysconfdir}은 /tmp/.../image/etc/를 나타낸다.
- 이렇듯 레시피 결과물은 rootfs 구조를 따라 최종적으로 이미지로 변환되기 전에 임시 저장된다.
레시피를 활용해 커널 컴파일 옵션을 변경하는 방법
- 리눅스 커널은 오픈소스로 관리되는 커널이기 때문에 매우 방대한 소스를 가지고 있다.
- 그렇기에 커널 컴파일 옵션 설정 또한 패키지 관리에 중요한 능력이라고 볼 수 있다.
- 본 절에서는 리눅스 커널 컴파일 옵션을 .cfg 파일로 생성하는 방법을 알아본다.
- 가장 먼저, 아래 명령을 통해서 커널 컴파일 옵션 메뉴를 실행시킨다.
$ bitbake virtual/kernel -c menuconfig
- 컴파일 옵션 메뉴를 실행시켰으면, 필요한 옵션을 활성화/비활성화한다.
- 본 절에서는 커널에 CAN 버스를 활성화시키는 것을 예시로 든다.

- menuconfig을 통해 CAN 버스를 활성화하였다면 Save하여 .config 파일로 저장한다.
- 그후 아래 명령을 통해서 기존 컴파일 옵션과 다른 부분을 .cfg 파일로 생성해낸다.
$ bitbake virtual/kernel -c diffconfig

- 생성된 설정 파일(.cfg)에 대한 경로가 출력되는 것을 볼 수 있다.

- .cfg 파일은 일반적인 리눅스 커널 컴파일을 위한 설정 파일과 동일한 형식임을 확인가능하다.
- 이렇게 생성된 .cfg 파일과 .bbappend 레시피 파일을 함께 활용해 커널 등의 컴파일 옵션을 수정 가능하다.
- 이는 KConfig을 활용하는 여러 프로젝트(U-Boot, Linux Kernel, BusyBox 등)에서 활용가능한 방법이다.
# 다음 장에서는 실제로 레이어를 구성하고 이를 위한 레시피를 작성해서 컴파일을 완료한 뒤에 라즈베리파이를 부팅시키는 예제를 설명한다.
'Linux > Yocto' 카테고리의 다른 글
| [Yocto 학습] 8장: Poky를 활용한 Raspberry Pi 4 와이파이 초기화 (0) | 2026.05.29 |
|---|---|
| [Yocto 학습] 7장: Poky를 활용한 Raspberry Pi 4 이미지 빌드 (0) | 2026.05.26 |
| [Yocto 학습] 5장: 레시피(*.bb, *.bbappend) 커스터마이징 방법 - 1 (0) | 2026.05.12 |
| [Yocto 학습] 4장: 레이어(meta-*) 생성 방법 (0) | 2026.05.10 |
| [Yocto 학습] 3장: 비트베이크(bitbake) 문법 (0) | 2026.05.05 |




