본문 바로가기

OSSCA-2025-3rd-Class-yocto

[3주차] yocto layer 구성 파일 및 custom layer 생성, 패키지 추가

저번 글에서 아래 사진과 같이 yocto는 layer구조로 되어있다는 것을 볼 수 있었다

poky를 클론하여 각각의 폴더를 살펴보며 layer에 대해 더 자세히 알아보자

 

첫번째로 oe-core에 대한 정보는 meta 폴더에 저장되어있다. oe-core는 모든 임베디드 리눅스 빌드의 기반이 되는 핵심 레시피, 클래스 파일, 설정 파일, 라이브러리, 유틸리티 등이 포함되어 있는 메타레이어다. 

meta-poky는 배포레이어이고 동기화와 관련된 정책을 설정할 수 있다. 만약 x용으로 빌드한다면 여기에 모든 것을 x용으로 빌드하라는 정책을 추가할 수 있다. 또한 모든 것이 x용으로 빌드 되지 않도록 설정할 수도 있다. 

그 위에는 실제 하드웨어와 관련된 정보(아키텍처, 커널 빌드 방식, 옵션 등)가 담긴 bsp layer가 있다. 이 layer는 회사에서 직접 제공하는 경우가 많다. 

oe-init-build-env는 첫번째 빌드를 만드는 방식으로 모든 환경 변수를 설정하고 bitbake가 configuration bits를 찾는 것을 지원한다. 

 

source oe-init-build-env

 

위 명령어로  빌드 디렉터리를 설정하는데 여기에는 특정 빌드에 대한 로컬 정보가 있는 local.conf가 있다. 빌드할 아키텍처, 빌드 방법에 대한 옵션, minus j4 사용 여부, 스레드 수 등이 정의된다. 

 

 

layer를 더 자세히 보자면 다음과 같이 나타낼 수 있다. laye에는 우선순위가 있는데 우선 순위에 따라 정책(메타데이터, 구성 설정)을 재정의할 수 있다. 예를 들어 meta-poky layer에 있는 레시피가 meta에서 수행하는 작업을 수정할 수 있다. 일반적으로 poky로 개발할때 기본 소스 트리를 수정하지 않고 custom layer를 만들어 수정한다. 왜냐하면 수정 후에 업데이트를 하면 내가 개발했던 것이 사라지기 때문이다. 

 

Custom Layer 생성

1. custom layer dir 생성(meta-ypdd)

$bitbake-layers create-layer meta-newlayer

 

2. bblayer.conf 에 새로 만든 layer 추가

새 layer를 수정하고 난 뒤  build/conf/bblayers.conf 파일에 새 layer 파일을 추가해줘야한다. 그래야 bitbake가 이 파일에 정의된 layer를 바탕으로 다른 레이어를 찾아 conf 파일이 들어갈 위치를 찾을 수 있다.    

$bitbake-layer add layer ${HOME}/poky/build/meta-ypdd

 

생성하고 난 뒤 bitbake가 레이어 경로를 인식하고 우선순위가 6인것을 확인할 수 있다. 우선순위에 따라 custom layer가 하위 레이어를 재정의할 수 있는 것을 확인할 수 있다.

 

RECIPE

이미지는 커널, 부트로더(BSP), 애플리케이션, 컴파일러, 라이브러리 등 소스에서 전제 리눅스 배포판을 만들기 위한 것이다.

이미지 레시피를 만들어 포함시킬 소프트웨어(패키지)들을 명시해주면 BitBake가 자동으로 모든 것을 하나로 묶어 최종 부팅 가능한 리눅스 이미지 파일을 만들어 준다. 이번 포스팅에서는 vim, htop, nano 패키지를 포함하는 임베디드 이미지 빌드 및 수행까지 해볼 것이다.

show-recipes 명령을 통해 포함된 레시피를 검색해봤을 때 vim은 meta에 존재하지만 nano와 htop은 어느 레이어에도 없는 것을 확인할 수 있다. 이럴때는 meta-openEmbedded의 meta-oe 레이어를 사용하여 패키지를 추가할 수 있다.

 

이번 목표는 커스텀 레이어에 이미지를 레시피를 수정하여 패키지를 추가하는 것이므로 mkdir -p recipes-core/images를 이용하여 다음과 같은 구조를 이루게 한다. 폴더구조는 강의자료를 참고하여 생성했다.

 

 

그리고 아래와 같이  IMAGE_INSTALL 변수를 사용하여 패키지를 추가한 custom-image.bb를 작성해준다. 

 

IMAGE 

bb 레시피에 맞는 이름으로 다시 빌드 해준다. 멍청하게도 이걸 몰라서 이틀 걸렸다 ㅎ... 

 

이미지 빌드 후 qemu를 실행하고 which 명령어를 사용하면 올바르게 나오는 것을 볼 수 있다. gui 환경이 너무 느리길래 runqemu qemuarm64 nographic 명령어로 cli 환경으로 실행되도록 하였다.

 

 

참고자료 

 

https://www.youtube.com/watch?v=kZcEPn6cEJE&t=313s

https://www.aladin.co.kr/shop/wproduct.aspx?itemid=49930702&srsltid=afmboooorqchjxuk2zj4s4yzzbtls8rmccxl6xjfzeqcbdi8p-niapne