일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 이코테
- 앱개발
- TS
- 다이나믹프로그래밍
- 빅데이터분석
- 알고리즘
- 코딩테스트
- 이것이코딩테스트다
- 코딩일기
- 구현
- 이진탐색
- c++
- 백준온라인저지
- 백준
- DP
- 노마드코더
- 최단경로
- 개발자북클럽
- 코테
- 그리디
- 타입스크립트
- SQL
- react-native
- ps
- 프로그래머스
- BOJ
- bfs
- dfs
- Typescript
- 정렬
- Today
- Total
한량처럼 살고 싶다
Yocto 프로젝트 용어 소개 본문
Metadata vs Bitbake
make 와 makefile 의 차이라고 간단하게 설명 가능
make는 빌드하는 도구이고, makefile은 빌드하는 내용물이 정의되어 있는 메타데이터들.
bitbake는 파이썬으로 만들어져있는 yocto를 빌드하는 핵심 도구이자 엔진.
metadata는 빌드를 하는 방법을 정의한 파일들 (.bb 파일들 위주)
모든 컴포넌트는 자신만의 bb 파일이 있으며 그 안에는 소스 다운로드 방법부터 빌드 방법까지 전부 정의되어 있다.
yocto 시스템은 계층구조로 이뤄져있고 이를 메타데이터로 정의한다.
계층 구조는 아래와 같다.
- layer: 비슷한 기능을 하는 컴포넌트의 레이어를 모아놓은 것
- recipes: .bb 로 이뤄져있으며 각 컴포넌트가 어떻게 빌드되는지 정의함
- machine: bsp 관련 레시피를 모아둠
- distro: 배포판의 설정 및 관련 컴포넌트를 모아둔 것
위의 메타데이터들을 bitbake라는 엔진을 사용해 custom linux image를 생성한다.
Distro
배포판의 약자로, 빌드 전체를 구성하는 정책을 정의한다.
배포판의 ipv6, 키보드, nfs 등과 같은 어떤 특성을 지원하는지 + 배포판 이름과 버전을 정의한다.
conf/distro.conf 에 정의되어있고 local.conf에 distro 변수를 넣어 사용한다.
poky 가 레퍼런스 배포판이고, poky-agl + pelux + tizen 같은 다양한 커스텀 리눅스 배포판이 있다.
MACHINE
yocto 이미지가 빌드되는 대상 디바이스 또는 SoC를 말한다.
machine 은 bsp 레이어의 machine이름.conf 파일이 존재하며 local.conf 파일에 machine 이름을 넣어 사용한다.
poky에서는 3가지 레퍼런스 머신을 제공하는데 x86, bedgerouter, beaglebone 제공 중이며 qemu 도 지원한다.
실제 제품 개발할 때 레퍼런스 하드웨어가 아닌 직접 제공하는 메타레이어를 사용하여 진행한다.
Layers
컴포넌트 레이어의 조합으로 구성. 여기서 레이어는 레시피의 조합으로 구성.
기본적으로 oe-core (OpenEmbedded Core)를 기반으로 한다.
- poky (oe-core)
- 기본 빌드 시스템 제공 (bitbake)
- 패키지 및 리눅스 배포에 필요한 기본 레시피를 포함
- poky (meta-yocto)
- Yocto 프로젝트에서 제공하는 기본 메타 데이터가 포함된 레이어
- meta-yocto 레이어는 기본적인 빌드 설정 및 예제 머신 구성을 제공합니다.
- Hardware-Specific BSP Layer (하드웨어별 BSP 레이어)
- 특정 하드웨어 보드에 맞춘 BSP (Board Support Package) 관련 구성 요소
- 예를 들어 meta-raspberrypi 레이어가 이에 해당됨
- 주로 부트로더, 커널, 하드웨어 드라이버 관련 설정이 포함됨
- UI Specific Layer (UI 레이어)
- UI (User Interface) 관련 설정 및 패키지를 포함하는 레이어
- Qt 기반의 UI 어플리케이션을 포함하는 레이어
- 개발자별 맞춤 레이어
- 최상위 레이어, 개발자가 추가하는 애플리케이션, 사용자 설정, 커스텀 스크립트 등이 포함됨
- 개발자가 독자적인 소프트웨어 기능을 추가할 때 사용하는 영역
결론적으로 하위 레이어일수록 공통적인 기능을 제공하며 상위 레이어로 갈수록 특정 제품 또는 개발자 맞춤 설정이 추가됨
각 레이어는 독립적이며 필요에 따라 추가/삭제 될 수 있음.
하드웨어와 소프트웨어를 분리하여 유지보수가 용이하며 커스텀 배포판을 손쉽게 관리할 수 있음
Layers 예시
1. Poky (기본 레이어)
- Poky는 Yocto 프로젝트의 기본적인 메타데이터가 포함된 레이어
- 예시: curl_7.82.0.bb
- meta/recipes-support/curl/ 디렉터리 내에 curl_7.82.0.bb 파일이 존재
- curl 패키지를 빌드하는 레시피 파일
2. meta BSP Layer (예: Raspberry Pi BSP)
- 특정 하드웨어(보드)에 맞는 Board Support Package (BSP) 를 포함하는 레이어
- 예시: linux-raspberry_5.10.bb
- recipes-kernel/linux/ 디렉터리에 위치.
- Raspberry Pi 보드용 리눅스 커널을 정의한 레시피.
3. meta custom layer (사용자 정의 레이어)
- 개발자가 기존 레시피를 수정할 때, 기본 파일을 직접 변경하는 것이 아니라 .bbappend 파일을 이용하여 추가 및 오버라이드
- 예시:
- meta/recipes-support/curl/curl_%.bbappend
- curl 패키지에 대한 사용자 정의 수정 사항 추가.
- recipes-kernel/linux/linux-raspberry_%.bbappend
- Raspberry Pi용 커널 레시피에 대한 추가 수정.
- meta/recipes-support/curl/curl_%.bbappend
Recipe 에서 쓰는 변수 종류
SRC_URI | 컴포넌트 소스 주소 정의 |
LICENSE | 라이센스 정의 |
PN | 패키지 이름 |
PV | 패키지 버전 |
DEPENDS | 빌드 타임 의존성 정의 |
RDEPENDS | 런타임 의존성 정의 |
Class
- 공통 기능을 구현해놓고 여러 레시피에서 상속받아 사용
- Meta 레이어의 classes 디렉토리 밑에 존재
- bbclass 확장자
- 레시피에서 inherit 지시어와 함께 사용 (inherit cmake)
- Conf 파일에서 INHERIT 지시어와 함께 사용
- Poky/meta/classes/base.bbclass 가 yocto 의 기본 태스트가 정의된 기본 class
레시피 전개
https://docs.yoctoproject.org/dev/dev-manual/new-recipe.html
5 Writing a New Recipe — The Yocto Project ® dev documentation
Recipes (.bb files) are fundamental components in the Yocto Project environment. Each software component built by the OpenEmbedded build system requires a recipe to define the component. This section describes how to create, write, and test a new recipe. 5
docs.yoctoproject.org
- 레시피 작성 (Establish the Recipe)
- 새로운 레시피(.bb 파일)를 생성합니다.
- 소스 파일 가져오기 (Fetch Source Files)
- 원격 저장소(Git, SVN 등)에서 소스 파일을 다운로드하거나, 로컬 경로를 지정하여 소스 파일을 가져옵니다.
- 소스 파일 압축 해제 (Unpack Source Files)
- 가져온 소스 파일이 압축되어 있다면 해제합니다.
- 소스 파일 패치 적용 (Patching Source Files)
- Yocto에서 요구하는 빌드 환경에 맞게 패치를 적용할 수 있습니다.
- 라이선스 정보 추가 (Add Licensing Information)
- 패키지의 라이선스 정보를 LICENSE 변수에 정의합니다.
- 설정 추가 (Add Configurations)
- 빌드 설정(do_configure 함수 등)을 추가합니다.
- 컴파일 수행 (Compilation)
- do_compile 함수를 통해 실제 소스 코드를 빌드합니다.
- Autotools 또는 CMake 사용 여부 확인
- Yes → 자동으로 do_install 단계에서 필요한 작업이 수행됨.
- No → do_install 함수를 직접 작성해야 함.
- 추가적인 서비스(예: 데몬, 백그라운드 프로세스)가 필요한가?
- Yes → 서비스 초기화 스크립트(예: systemd 또는 init.d 스크립트)를 설치해야 함.
- No → 추가적인 설치 작업 없이 패키징 단계로 이동.
- 패키징 (Packaging)
- 빌드된 결과물을 .ipk, .rpm, .deb 등의 패키지 형식으로 변환.
- 설치 후 스크립트 제공 (Provide Post-Installation Scripts)
- 패키지 설치 후 실행해야 하는 후처리 스크립트(예: 환경 설정)를 추가할 수 있음.
- 런타임 테스트 수행 (Perform Runtime Testing)
- 실제 환경에서 실행 테스트를 진행하여 레시피가 올바르게 동작하는지 확인.
Packagegroup & Image
Packagegroup: 다양한 패키지들의 번들 모음
Image: yocto 최상위 레시피, 다양한 이미지를 제공하기 위해 기본 제공되는 이미지. .bb 를 실행하면 이미지가 생성됨
기본적으로 core-image-minimal.bb를 상속받아 개발을 시작함
'Yocto > 처음 시작하는 Yocto 프로젝트' 카테고리의 다른 글
Bitbake 의존성 소개 (0) | 2025.02.22 |
---|---|
Bitbake 소개 (0) | 2025.02.22 |
Yocto 프로젝트 소개 (0) | 2025.02.15 |