반도체 소프트웨어

요약 2. Bitbake 본문

빌드 시스템/Yocto Project

요약 2. Bitbake

반도체 소프트웨어 엔지니어 2024. 1. 9. 19:48
  1. 사전 개념
    • BBPATH
      • bitbake의 환경 변수(메타데이터 파일 찾는 환경변수, bitbake 소스 가장 상위 디렉터리라고 보면 됨)
      • 콜론으로 구분된 디렉터리 경로 목록을 갖는다. 레이어의 최상위 디렉터리를 저장한다
    • Layer
      • 연관된 메타데이터들을 포함하는 저장소(디렉터리)
        1. 위 그림에서 mylayer가 하나의 독립된 애플리케이션 정도라고 보면 되고
        2. Classes, conf 등은 기본적으로 필요한 시스템 레벨이라고 보면 될 듯
        3. layered 아키텍처로 구성된다
        4. 각 레이어가 다른 레이어에 독립적이다.
        5. 높은 유지보수성
        6. 앞선 레이어 기능 재정의 및 추가 가능
  2. Bitbake 실행 전 준비 사항
    • bitbake는 궁극적으로 .bb 레시피 파일을 실행(task를 실행)
    • bitbake가 필요로 하는 최소한의 메타데이터 파일

      • bitbake.conf
      • bblayers.conf
      • base.bbclass
      • layer.conf
      • exam.bb
  3. bitbake 동작 과정 개요
    • bitbake는 가장 먼저 BBPATH/conf/bblayers.conf를 먼저 찾는다
      • conf는 빌드 프로세스에 관련된 여러 가지 설정 파일을 포함하는 디렉터리
      • bblayers.conf에서 BBLAYERS 변수는 bitbake에게 빌드 수행을 위해 어떤 레이어들이 존재하고 있는지 알려줌
    • layer.conf를 찾는다

      • Layer.conf: bitbake에게 현재 레이어의 경로와 레이어 내에 있는 레시피 파일들(.bb .bbappend)의 경로를 알려준다
      • BBPATH: 콜론으로 구분된 디렉터리 경로 목록을 갖는다. 레이어의 최상위 디렉터리를 저장한다 ex)mylayer/
      • BBFILES: 레이어에서 레시피 및 레시피 확장 파일들이 위치하고 있는 경로를 저장 (결론적으로 BBFILES에 지정된 경로에서 레시피파일(.bb)을 찾아낸다)
      • BBFILE_COLLECTIONS: 레이어 이름들 모음
      • BBFILE_PATTERN_xxxx: 존재하는 각각의 레이어의 레시피 파일이 저장된 경로 저장 (보통 정규표현식 사용)
        1. ^는 정규표현식 시작을 의미
    • 결론적으로 사용하는 모든 LAYER 정보가 담긴 BBFILE_COLLECTIONS에서 실행하고 싶은 레이어를 선택한 후, 그 LAYER의 레시피 파일을 BBFILE_PATTERN으로부터 위치를 알아내어 해당 경로에 있는 재료를 통해 bitbake를 실행시켜서 결과물(artifacts: rootfs, kernel, boot image 등)을 얻는 것
  4. bitbake 동작 세부 과정 개요

    • 일단 모든 레이어 등 정보를 BB환경변수에 할당
    • 실행시키고 싶은 레이어가 동작할때 필요한 파일들을 BBFILE_PATTERN 정규표현식을 사용해서 다 찾아냄
    • 그것들을 재료로 bitbake 실행
  5. bitbake.conf: 다양한 기본 환경 설정 파일(보통 산출물들을 어디에 저장할지를 정의)

    • TOPDIR: 최상위 디렉터리
    • PN: 레시피 파일의 이름 할당(package name)
      • bitbake hello 명령어 사용시에 hello에 해당함
    • TMPDIR: 빌드 작업 진행하면서 나오는 산출물들 저장하는 임시 디렉터리
    • CACHE: 메타데이터 분석후 결과를 캐시에 기록하며 그 경로
    • STAMP: 각각의 태스크가 수행 완료되면 stamp 파일 생성하며 그 경로
      • 재빌드할 필요없는 태스크 구분하는 용도로 주로 사용
    • T: 임시적으로 생성되는 파일(태스크 실행 로그, 태스크 스크립트 파일)
      • 빌드 끝나면 필요 없음
    • B: 객체(산출물)이 저장되는 디렉터리
  6. base.bbclass
    • addtask do_build 문구 사용: addtask 지시어로 bitbake에 do_build라는 함수(태스크) 추가
      • addtask, after, before 를 사용하여 태스크 체인 형성 가능(태스크 순서 지정)
    • 함수 선언한다고 보면 됨. 내용 정의는 레시피 파일에서 함
    • bitbake가 실행되려면 적어도 하나의 클래스 파일이 존재해야한다
  7. hello.bb

    • 레시피 파일은 실제로 bitbake가 실행하는 주체
    • PV(package version): 새 릴리즈나오면 버전 관리하는 숫자 ex) linux-yocto_5.4_r0.bb
      • <package name>_<package_version>_<package_revision>.bb
  8. 패키지: 어떤 일을 하는 데 필요한 소프트웨어나 프로그램
    • bitbake는 레시피파일을 빌드해서 결론적으로 패키지를 만들어냄
    • yocto에서 패키지란
      • 소프트웨어를 빌드하고 배포할때 사용되는 소프트웨어 모음
      • 루트파일시스템에 설치될 수 있는 실행가능한 파일, 라이브러리, 설정파일, 문서 등을 포함
    • 레시피
      • 변수와 실행이 가능한 메타데이터가 모인 파일
      • 레시피파일을 빌드해서 패키지를 만들어냄
      • 보통 패키지와 레시피 이름이 같음
      • 하나의 레시피 파일은 하나 이상의 패키지를 만들 수 있다
  9. bitbake 실행 절차 요약
    • bitbake는 레시피파일 안의 태스크를 실행
    • bitbake는 파이썬과 쉘스크립트로 만들어진 태스크 스케줄러로, 메타데이터 파일에서 정의한 태스크를 실행
    • 메타데이터는 소프트웨어를 어떻게 빌드할지 그리고 빌드하려는 소프트웨어들 간에 어떤 의존성이 있는지 기술

 

출처: Udemy, "Yocto(욕토), 쉽게 이해하고 깊게 다루기", https://www.udemy.com/course/yocto-ae/

출처: 알라딘, "Yocto(욕토), 쉽게 이해하고 깊게 다루기", http://aladin.kr/p/b4Ddg