yocto - include, require, inherit, INHERIT

markyang92·2022년 1월 7일
0

yocto

목록 보기
19/53
post-thumbnail

include vs require

  • include FILE_PATH
    • FILE_PATH에 명시시킨 파일을 추가하는 것을 시도한다.
    • File이 Class일 경우도 상관 없다. (대신 inherit 과는 다르게 .bbclass 까지 다 적어야함)
    1. 기본적으로 현재 위치에 있는 파일을 찾는다.
    2. 상대 경로면, BBPATH 내에서 찾을 수 있는 첫 번째 것 포함
    3. 만약 위치를 include recipe-core/sam/sam.inc(.conf)라고 명시하면,
      전체 메타 레이어에서 '이 위치'에 있는 sam.inc를 가져온다.
      3.1. 같은 경로에 여러 메타데이터가 존재할 경우 최상위 메타레이어의 파일을 사용한다.
      3.2. 특정 레이어 내의 파일을 포함하고 싶다면, 레이어 부터 Path 명시한다.
      예: meta-mylayer/recipe-myrecipe/sam/sam.inc
    • 파싱 못해도 실패 에러 없다.
  • 두 개 이상의 레시피에서 코드를 공유하기 위해 보통 .inc 파일을 사용하는 것을 채택

  • require FILE_PATH
    • FILE_PATH에 명시시킨 파일을 추가하되, 파싱 못하면 Parese_Error
    • 나머진 include와 똑같다.

local.conf의 예

  1. poky를 기준으로 함
  2. ${TOPDIR}=${BUILDDIR}
  • ${BUILDDIR}/conf/local.conf

    여기서 include ${TOPDIR}/my-local.conf 로 추가

  • ${TOPDIR}/my-local.conf

    여기서 my_class.bbclassINHERIT += "my_class" 로 추가한다.

inherit

  • 보통은 한 inherit레이어 내 classes 디렉토리 속의 'class_name'.bbclass 를 상속 받는데 사용된다.
  • inherit 'class_name' 만 명시하면 된다.
  • bbclass파일은 전역적으로 사용가능한 기능 구현을 할 때 주로 사용한다.

core-image-minimal.bb의 예

  1. core-image-minimal.bb
    inherit CLASS_NAME (.bbclass는 빼야함)

  1. poky/layer/classes/core-image.bbclass

  1. Structure

INHERIT

  • 로컬로만 만들어 상속하고자 하면, 현재 ${BUILD_DIR}local.conf와 같은 파일 등에서 INHERIT += "CLASS_NAME" 으로 추가
    • 이 경우 또한, 이 빌드가 관리하는 메타-레이어들에서 classes내 있는 CLASS_NAME.bbclass 파일을 상속받는다.
    • 여러 레이어 에 같은 이름의 'myclass.bbclass'가 존재할 때는, 저 특정 레이어의 클래스를 '콕' 찝어 오는 것은 불가하고, 가장 최상위 레이어가장 최상위 레이어bbclass를 가져온다.


recipe의 우선순위, class의 우선순위

  • .bbclass : .conf등 파일에서 INHERIT += "class_name"으로 가져올 경우, 특정 레이어에서 콕 가져오진 못하고, 최상위 레이어에서 가져온다.
  • recipe
    • A 레이어 (priority: 10) / recipe_0.1.bb
    • B 레이어 (priority: 5) / recipe_0.3.bb
      • 과연 어떤 레시피가 사용될까? (별도 PREFERRED가 없을 시)
        • 1순위: 레시피 버전
        • 2순위: 레이어 우선순위
      • B 레이어의 priority가 ↓↓ 도, recipe_version이 ↑↑라서, B 레이어/recipe_0.3.bb가 사용된다.

최상위 변수에 접근은 가능하지만 레시피끼리 공유는 불가능하다.


변수 설정 및 사용

  1. 예를 들어, local.conf에서 ENABLE_COMPILE 변수에 1을 설정한다.
# === local.conf === #
ENABLE_COMPILE = "1"

  1. 레시피에서 이를 활용한다.
  • python Task
d.getVar('ENABLE_COMPILE')
-> '1'

profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글