Precondition
https://aal-izz-well.tistory.com/entry/Yocto-%EC%84%B8%EB%AF%B8%EB%82%98-%EC%9E%90%EB%A3%8C
회사에서 yocto 빌드 과정을 잘못 이해해서 발생한 시행착오들을 정리했습니다.
바이너리 빌드와
1. yocto 주요 Task 빌드 과정
- yocto의 구성요소인 bitbake가 빌드 시 실행 하는 주요 Task들은 아래와 같습니다.
test.bb
LICENSE="CLOSED"
inherit useradd
USERADD_PACKAGES = "${PN}"
GROUPADD_PARAM_${PN} = "-g 981 xgroup"
USERADD_PARAM_${PN} = "-g xgroup -u 1031 MOON"
PACKAGES = "${PN}"
PV = "0.0.2"
PR = "r0"
SRC_URI = "file://pkg/"
S = "${WORKDIR}/pkg/21/debug"
...
1) ${WORKDIR}
- 여기에서 아래의 "${WORKDIR}"이 bitbake가 레시피 파일의 SRC_URI 경로를 참조해서 갖고온 것들이 저장된
디렉토리의 경로입니다.
2) S
- bitbake가 주요 태스크 수행 시(do_compile, do_install) 사용하는 디렉토리의 경로입니다.
3) SRC_URI
- bitbake가 빌드를 위해 가져오는 소스의 경로를 말합니다. 해당 경로는 현재 레시피가 위치한 경로의
/pkg 디렉토리를 참조하겠다는 코드입니다.
주요 태스크설명
do_fetch | 소스코드 다운로드 |
do_unpack | 압축 해제 |
do_patch | 패치 적용 |
do_configure | 설정 스크립트 실행 (./configure) |
do_compile | 컴파일 |
do_install | 임시 디렉토리에 설치 |
do_package | 패키징 (RPM, DEB, IPK 등) |
do_rootfs | 루트 파일시스템 이미지 생성 |
do_image | 최종 이미지 파일 생성 |
do_deploy | 결과 파일 배포 (SD 카드 이미지 등) |
예시
2. 패키지 저장 디렉토리, 최종 이미지 디렉토리의 분리
yocto bitbake가 빌드 시 아래와 같이 패키지들을 보통 아키텍처 이름으로된 디렉토리(cortex...)를
별도로 생성합니다. 이후 빌드로 생성된 패키지 디렉토리를 coretex..디렉토리에 저장합니다.
* 패키지란( busybox 예시)
-아래와 같이 패키지란 바이너리 파일 뿐만 아니라 해당 파일에 필요한 다양한 구성요소를 담은 디렉토리입니다.
3. 패키지 파일을 최종 이미지 디렉토리에 저장
- 아래 bitbake가 빌드 시 진행되는 주요 태스크에서 do_rootfs이후의 단계에서 "2."번의 cortex..디렉토리에 저장된 패키지들을 최종 이미지 디렉토리에 저장합니다.
### 추가사항 ###
1. do_compile 없이 do_install 이후만 진행
- 실제 현업에서는 고객사가 소스코드 없이 바이너리 파일만 제공 한 후 bitbake 빌드 시 컴파일 과정 없이 do_install 이후의 태스크만 진행하도록 하는 경우가 있습니다.
2. local.conf 파일 사용
- 실제 현업에서 많이 사용하는 파일입니다. 해당 파일에 사용할 변수를 정의하여 레시피 파일에 조건 문 등의 분기 코드로
별도의 옵션 등을 추가할 수 있습니다.
MACHINE ?= "raspberrypi4"
DISTRO ?= "poky"
PACKAGE_CLASSES ?= "package_ipk"
EXTRA_IMAGE_FEATURES ?= "debug-tweaks ssh-server-dropbear"
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j8"
예시
# conf/local.conf
MY_APP_FEATURES = "usb serial bluetooth"
# recipes-apps/myapp/myapp_1.0.bb
DESCRIPTION = "My custom app"
LICENSE = "MIT"
SRC_URI = "file://myapp.c"
# local.conf의 변수 사용
EXTRA_FEATURES = "${MY_APP_FEATURES}"
do_compile() {
echo "Enabled features: ${EXTRA_FEATURES}"
# 예: 이 값을 Makefile에 넘기거나 조건 분기할 수 있음
}
'임베디드 & 시스템 프로그래밍' 카테고리의 다른 글
[Yocto 기본 개념 공부 정리] (2) | 2023.12.17 |
---|
댓글