yocto - ${TOPDIR}/conf/local.conf

markyang92·2021년 6월 11일
0

yocto

목록 보기
4/53
post-thumbnail

local.conf

  • 빌드 환경을 초기화하면, poky/build/conf/local.conf 파일이 만들어진다.
  1. local.conf의 역할
    1-1. target machine(MACHINE 지정)
    1-2. cross-toolchain 지정

  2. local.conf 주의점
    2-1. local.conf 파일은 기본 설정들을 override하기에 매우 유용하지만,
    local.conf에서 변경 사항은 어떠한 소스코드 추적 시스템에 의해서도 추적되지 않기 때문에 조심할 것


local.conf 내 변수

MACHINE

  • MACHINE: 빌드할 타겟 머신(e.g. MACHINE = "qemux86-64")

  • ${MULTIMACH_TARGET_SYS}=${MACHINE}-${DISTRO}-${OS}로 나뉘는 것 같음(예상)

  • poky가 기본적으로 지원하는 레퍼런스 BSP 머신 (poky/meta-yocto-bsp 레이어에 의해 기본적으로 지원)
  • BUILD가 사용할 수 있는 타겟 머신
    1) 이 BUILD타겟 머신 지원용 레이어(e.g., mata-ti, meta-arm, meta-yocto-bsp, ...)를
    2) 사용하는 레이어라고 추가(${BUILDDIR}/conf/bblayers.conf에서 추가) 한후,
    3) 해당 레이어의 <Layer>/conf/machine/<MACHINE_NAME>.conf 로 확인할 수 있다.
    3) 이 BUILD/conf/local.conf에서 MACHINE='MACHINE_NAME' 변수에 추가하므로써 타겟 머신용 이미지를 만들 수 있다.
MACHINE= 'target machine'description
beaglebone32bit ARM 레퍼런스 플랫폼 비글본 블랙
genericx86일반적인 32bit x86 시스템
genericx86-64일반적인 64bit x86 시스템
mpc8315e-rdbNXP MPC8315 PowerPC reference platform
edgerouter64bit MIPS reference platform Edge Router
  • OpenEmbedded Core에 의해 지원되는 머신
MACHINE= 'target machine'description
qemuarmQEMU ARM 에뮬레이터
qemuarm64QEMU ARM64 에뮬레이터
qemumipsQEMU MIPS 에뮬레이터
qemumips64QEMU MIPS64 에뮬레이터
qemuppcQEMU PowerPC 에뮬레이터
qemux86-64QEMU x86 64bit 에뮬레이터
qemux86QEMU x86 에뮬레이터

추가적인 BSP 레이어 사용은 링크 참고


${TOPDIR}

  • 내 bitbake shell에서 build 디렉토리
$ bitbake -e | egrep "TOPDIR="
poky/build

${DL_DIR}

  • default) DL_DIR="${TOPDIR}/downloads"
  • downloads 디렉토리 명시
    • 첫 빌드 시스템이 많은 소스 코드, 타르볼을 upstream project들로 부터 다운로드할 위치

downloads의 역할

  1. SRC_URI= tar ball download일 경우
  • libmpc 컴포넌트를 예를든다.
    • 컴포넌트 이름: libmpc
    • 컴포넌트 위치: poky/meta/recipes-support/libmpc
    • 컴포넌트 레시피: poky/meta/recipes-support/libmpc/libmpc_1.0.3.bb
  • libmpc_1.0.3.bb 컴포넌트 레시피
    • SRC_URI = "http://www.multi..../download/mpc-${PV}.tar.gz"
    • bitbake는 여기서 ${PV}패키지 버전 "1.0.3"을 대입
    • "http://www.multi..../download/mpc-1.0.3.tar.gz"을 다운 후 DL_DIR이 가리키는 곳에 저장
    • 다운로드가 끝난 후, 비트베이크는 다운로드한 파일의 md5sum 값과 sha256sum 값을 레시피의 값과 비교해 둘이 일치하면 ${DL_DIR}/mpc-1.0.3.tar.gz.done 파일을 생성해 완료함을 표시한다.
      • 이 방식으로다음 빌드에서 같은 파일을 필요로할 때 이미 파일이 다운로드 됨을 확인하고 재사용한다.
  • downloads 스크린 샷들


  1. SRC_URI= git일 경우
  • 컴포넌트 레시피가 do_fetch 태스크를 실행할 때, SRC_URI = git:// 일 경우, -> ${DL_DIR}/git2/<git URL>로 download

${TMPDIR}

  • default) TMP_DIR="${TOPDIR}/tmp"
    • 빌드 아웃풋 둘 곳
    • 엄청나게 많은 build work와 bitbake의 임시 파일(소스 extraction, compilation) 및 아웃풋 둘 곳

${DISTRO}

  • default) DISTRO="poky"
  • 배포판 디폴트 선택
  • 결과물 파일이 ${TMP_DIR}/work/${MACHINE}-${DISTRO}-OS/결과물들로 생성된다.

${INHERIT}

  • INHERIT: 상속

INHERIT += "rm_work"

  • INHERIT += "rm_work"
    • rm_work는 bitbake에게 특정 레시피를 빌드한 이후에 소스코드, 빌드 파일을 지움
      다시 이미지 만들어보자.
      만든 후 $ du -sh build/tmp 해보면 아예 안했을 때보다는 줄어있다.

${RM_WORK_EXCLUDE}

  • 위의 rm_work에 의해 지워지는 레시피 리스트에서 제외하기 원할 때
    • RM_WORK_EXCLUDE += "recipe-name"
    • 예:
      • RM_WORK_EXCLUDE += "core-image-minimal"


IMAGE_INSTALL

  • 이미지에 설치할 것


${PACKAGE_CLASSES}

패키지 관련 변수 링크 참고


${SSTATE_DIR}

  • default) SSTATE_DIR = "${TOPDIR}/sstate-cache"
  • 사용할 sstate-cache 디렉토리 지정

include

  • include를 사용하여, local.conf에 append할 '파일'을 지정할 수 있다.
    • 경로에 파일이 없어도 됨
  • 예를 들어, CPU_COUNT 변수를 append한다

다른 local.conf append

  • 예를 들어 ${TOPDIR}/my-local.conf라는 파일을 두고, 내 ${BUILDDIR}/conf/local.conf에서 include를 사용하여 추가해보자.
  • 다음과 같이 변수도 설정가능 하다.
CPU_COUNT = "${@oe.utils.cpu_count()}"
BB_NUMBER_THREADS = "${@max(${CPU_COUNT}*7//10,1)}"
PARALLEL_MAKE = "-j ${BB_NUMBER_THREADS}"

class file도 추가

  • 특정 class fileinclude 할 순 있지만 abnormal! 한 방법이다.
    • 아래에서 INHERIT하는 방식과는 다르게 path만 잘 주면, 아무 곳에 위치시켜도된다.
  • my_class.bbclass의 위치는 ${TOPDIR}에 있다고 가정
# local.conf
include ${TOPDIR}/my_class.bbclass

INHERIT

  • 일반레시피에서 inherit 하는 것과 똑같다. (대소문자 주의)
  • 상황 1.
    • local로만 my_class.bbclass를 넣어서 bitbake 돌리고 싶은 경우
      1. bbclass 이름: my_class.bbclass
      2. 우선 이 bbclass 파일을 layer/classes 에 위치 시킴
(layer/classes) $ tree .
    ├── my_class.bbclass # <- 
    ├── sample_1.bbclass
    ├── sample_2.bbclass
    ├── ....
  1. 하지만 어느 레시피에서도 my_class.bbclassinherit my_class 하지 않는 경우, 적용 X
    1. 따라서 local.confINHERIT += "my_class"를 사용하면 된다.

profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글