fnwinter.github.io blog

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"
comments powered by Disqus