먼저 이번 오픈소스 컨트리뷰션의 주제인 Yocto에 대해 간략히 말하자면 임베디드 리눅스를 만들때 사용하는 빌드 프레임워크이다. 그렇다면 임베디드 리눅스가 무엇인지, 어디에 사용되는지, 이걸 만들 때 왜 Yocto를 사용하는지 하나씩 알아보자!
1. 임베디드 OS
냉장고, 세탁기, 스마트폰, 자동차 등 특정 목적만을 위해 HW와 SW가 조합되어 동작하는 컴퓨팅 시스템을 임베디드 시스템이라하고, 이러한 임베디드 시스템 내 다기능 수행을 위해 추가적으로 탑재되는 소형 운영체제를 임베디드 운영체제라한다.
임베디드 OS는 HW, 커널/드라이버, 미들웨어, 애플리케이션으로 구성되어있다.
조금 더 상세히 보자면 HW에 전원이 들어오면 시작되는 부트로더, 커널, User space(application, middleware)로 나눌 수 있다. 범용적인 커널과 User space에 관련된 내용은 아래 사이트와 노션에서 확인할 수 있다.
한줄로 요약하자면 응용 프로그램이 동작하는 사용자 모드, 하드웨어를 제어하는 CPU 명령어를 사용하는 커널모드 두 가지 모드로 프로그램을 실행한다.
http://www.ktword.co.kr/test/view/view.php?nav=2&no=6402&sh=%EC%BB%A4%EB%84%90
사용자 모드
사용자 모드, 커널 모드(2024-05-22)사용자 공간, 커널 공간, 커널 영역, 특권 모드, 특권 명령 1. 사용자 모드, 커널 모드 ㅇ 운영체제와 사용자 프로그램은, 하드웨어,소프트웨어 자원을 공유함
www.ktword.co.kr
https://www.notion.so/2-System-Structure-Program-Execution-1e3b647f42a480118764d87f3dc3895e
2. System Structure & Program Execution | Notion
컴퓨터 시스템 구조
dynamic-sousaphone-4ae.notion.site
임베디드 OS 중 하나인 임베디드 Linux는 특정 목적을 위해서 만들어진 Linux로 최소한의 리소스 사용하고 특정 HW에서 작동하며 일부Realtime Support 라는 특징을 가진다. 또한 가전, 모바일, 자동차, IoT, 산업 디바이스 등 다양한 case에서 사용된다.
그렇다면 왜 Yocto가 필요할까?
임베디드 리눅스를 만들기 위해서는 수많은 수많은 패키지(컴포넌트)를 컴파일해서 최종 이미지에 탑재해야한다. 이 과정에서 수백 개의 패키지를 수동으로 컴파일, 패키지 B,C를 기반으로 A를 빌드해야하는 패키지 간 복잡한 종속성 관리 , cross-complier(HW 타겟에 맞는 컴파일러)를 만들고 최적화하기 위한 configuration 설정해야하는 cross-complie 환경 설정의 어려움, 하드웨어별 최적화 및 구성 등 여러 어려움이 존재한다. 이때 Yocto를 사용하면 복잡한 과정을 자동화하고 관리할 수 있다.
2. Yocto Project
Yocto 프로젝트는 개발자가 제품의 하드웨어 아키텍처와 관계없이 임베디드 제품용으로 설계된 맞춤형 Linux 기반 시스템을 개발할 수 있도록 지원하는 오픈 소스 협업 프로젝트 및 빌드 시스템으로 다음과 같은 장점들이 있다.
- customization을 도움
- 아키텍처 재사용 쉬움(Layer구조)
- 강한 커뮤니케이션

Yocto는 poky라는 레퍼런스 프로젝트를 가지고 poky는 OpenEmbedded라는 오픈소스 빌드 엔진, 메타데이터를 가진다.
빌드엔진과 메타데이터는 Yocto의 동작 방식을 보며 알아보자.
Yocto Project 작동 방식

Yocto는 make / make file 와 유사한 방식으로 동작한다. 빌드하는 도구(엔진)를 BitBake(make), 빌드 방식에 대한 정의 Metadata(make file)라한다. Metadata에 정의된 순서대로 BitBake를 통해 빌드한다고 알아두면 될 것 같다!
- 파일 별로 빌드 방식, 오픈소스 위치(소스 주소), 라이센스, 컴파일 방식, 빌드 산출물 패키지화 등과 관련된 정보들을 정리
- bitBake가 의존성 등을 확인하여 자동으로 이미지 생성
이러한 메타데이터를 레시피라 하고 .bb확장자를 가진다.

Bitbake는 코어 빌드 엔진으로 Task Executor라고도 한다. 레시피 및 메타데이터(.bb 파일) 파싱하며 패키지 종속성을 해결한다. 또한 소스 코드를 자동으로 오고(src_urI) 소프트웨어 구성, 컴파일 및 패키지, 전체 빌드 프로세스를 자동화한다.

워크플로는 7단계로 이루어진다.
- Fetch – 소스 코드 가져오기
- Extract - 소스 압축 해제
- Patch - 버그 수정 및 새로운 기능에 대한 패치를 적용합니다.
- Configure – 환경 사양 설정
- Build - 컴파일 및 링크
- Install – 대상 디렉토리에 파일 복사
- Package - 설치를 위한 번들 파일
이때 fetch 과정에서 코드를 찾기 못할 수도 있고, extract 과정에서 잘못된 zip파일이나 유사한 파일이 있을 가능성이 높다. 즉 워크플로우의 특정 부분의 기능을 통해 무엇이 잘못되었는지 확인할 수 있다.
또한 Yocto는 layer구조로 이루어져있다. 앞서 말한 아키텍처 재사용이 쉬운 이유이다. layer는 비슷한 기능을 하는 metadata의 집합체로폴더명이 meta로 시작된다. 레이어를 사용하면 관련 메타데이터를 통합하여 빌드를 사용자 지정할 수 있고 여러 아키텍처를 위한 빌드에 사용되는 정보를 분리한다.

오픈소스 컨트리뷰션에 참여하기 전에는 임베디드에 관련된 지식이 거의 0에 수렴했지만 멘토링을 통해 좋은 자료를 공유받을 수 있었다. 아직 부족하지만 Yocto라는 빌드 프레임워크를 공부하면서 임베디드와 OS관련 지식도 함께 공부하고자한다.
참고자료
https://docs.yoctoproject.org/2.3/bitbake-user-manual/bitbake-user-manual.html#configuration-files
BitBake User Manual
Welcome to the BitBake User Manual. This manual provides information on the BitBake tool. The information attempts to be as independent as possible regarding systems that use BitBake, such as OpenEmbedded and the Yocto Project. In some cases, scenarios or
docs.yoctoproject.org
https://docs.yoctoproject.org/singleindex.html
The Yocto Project ® 5.2.999 documentation
The OpenEmbedded build system creates the Build Directory when you run the build environment setup script oe-init-build-env. If you do not give the Build Directory a specific name when you run the setup script, the name defaults to build/. For subsequent p
docs.yoctoproject.org
https://docs.yoctoproject.org/overview-manual/yp-intro.html#what-is-the-yocto-project
2 Introducing the Yocto Project — The Yocto Project ® 5.2.999 documentation
Architecture Agnostic: Yocto Project supports Intel, ARM, MIPS, AMD, PPC and other architectures. Most ODMs, OSVs, and chip vendors create and supply BSPs that support their hardware. If you have custom silicon, you can create a BSP that supports that arch
docs.yoctoproject.org
https://docs.yoctoproject.org/overview-manual/yp-intro.html#the-yocto-project-layer-model
2 Introducing the Yocto Project — The Yocto Project ® 5.2.999 documentation
Architecture Agnostic: Yocto Project supports Intel, ARM, MIPS, AMD, PPC and other architectures. Most ODMs, OSVs, and chip vendors create and supply BSPs that support their hardware. If you have custom silicon, you can create a BSP that supports that arch
docs.yoctoproject.org
'OSSCA-2025-3rd-Class-yocto' 카테고리의 다른 글
| [5주차] yocto 이미지에 c 파일 패키지 포함하기 (Hello World 프로젝트 넣기) (0) | 2025.11.04 |
|---|---|
| [3주차] yocto layer 구성 파일 및 custom layer 생성, 패키지 추가 (0) | 2025.10.29 |
| [3주차] YOCTO core-image-weston 빌드 (0) | 2025.10.16 |
| [1주차] 프로젝트 개요 및 git 이해(git init과 git init --bare로 만든 directory의 차이, stash 명령어의 사용) (0) | 2025.10.04 |
| [1주차] 프로젝트 개요 및 git 이해(fetch와 pull의 차이, merge와 rebase의 차이) (0) | 2025.10.03 |