yocto Cheat sheet
서론
- 요즘 최근 몇 주동안 회사에서 yocto 관련 작업을 했는데, 작업하면서 학습한 내용을 정리해 보려고 한다.
Quick Guide Link
- yocto 는 임베디드 리눅스 제품을 개발하기 위한 빌드 툴이다.
- gentoo 처럼 메타 빌드 스크립트가 패키지 별로 있고, 컴파일 및 이미지 생성 작업 시에 빌드 스크립트를 다운 받아서 빌드 후 root_fs에 설치, 리눅스 이미지를 만든다.
- 장점은 다양한 recipe를 통해 많은 드라이버와 패키지를 제공한다.
- 이미 셋팅 된 환경을 기반으로 쉽게 패키지를 추가 삭제 할 수 있다. 개발의 공수가 적게 든다. (잘 안다면…)
- 단점은 무한 삽질과 빌드 시간, 그리고 복잡한 configs 값을 들 수 있다.
- https://docs.yoctoproject.org/brief-yoctoprojectqs/index.html
설치
- 필요한 packages
$ sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm python3-subunit mesa-common-dev
- 소스 다운로드
$ git clone git://git.yoctoproject.org/poky
$ git checkout -t origin/hardknott -b my-hardknott -> 버전에 따라 브랜치가 다름
$ git pull
$ cd poky
- 빌드
$ source oe-init-build-env
- build 폴더에 local.conf file에 SSTATE_MIRRORS 를 추가하면 빌드 속도가 개선 됨
- SSTATE_MIRRORS = “
file://.* http://sstate.yoctoproject.org/dev/PATH;downloadfilename=PATH \n
file://.* http://sstate.yoctoproject.org/3.2.4/PATH;downloadfilename=PATH \n
file://.* http://sstate.yoctoproject.org/3.3.3/PATH;downloadfilename=PATH \n
“
$ bitbake core-image-minimal -> bitbake로 이미지 만듬
- core-image-minimal은 가장 작은 최소한의 이미지
</code></pre>
- 추가 옵션
- bitbake -c populate_sdk core-image-minimal -> SDK 파일 생성
- bitbake -b start-stop-daemon -> 하나의 recipe만 빌드 하고 싶은 경우
- 실행, QEMU로 빌드 된 이미지로 부팉해 보기
- runqemu qemux86-64
- id 물어보면 root 입력하면 로그인 됨
개념
- poky
- bitbake
- open embedded
- recipe
- meta folder
- image
bitbake 스크립트 작성
- bb 파일 (아래는 bash 파일의 bb 파일)
require bash.inc
# GPLv2+ (< 4.0), GPLv3+ (>= 4.0)
LICENSE = "GPLv3+"
LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
SRC_URI = "${GNU_MIRROR}/bash/${BP}.tar.gz;name=tarball \
file://execute_cmd.patch \
file://mkbuiltins_have_stringize.patch \
file://build-tests.patch \
file://test-output.patch \
file://run-ptest \
file://run-bash-ptests \
file://fix-run-builtins.patch \
file://use_aclocal.patch \
file://makerace.patch \
file://makerace2.patch \
"
SRC_URI[tarball.sha256sum] = "0cfb5c9bb1a29f800a97bd242d19511c997a1013815b805e0fdd32214113d6be"
DEBUG_OPTIMIZATION:append:armv4 = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
DEBUG_OPTIMIZATION:append:armv5 = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
BBCLASSEXTEND = "nativesdk"
Written on
October
18th,
2021
by
jungjik.lee
Feel free to share!