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!