Create custom Linux-based systems - 01. Yocto Project overview
Yocto Project란?
하드웨어 아키텍처에 관계 없이 리눅스 임베디드 환경을 구축할 수 있도록 도와주는 툴. Yocto Project(이하 Yocto 또는 YP)는 OpenEmbedded Project와 같이 개발이 됩니다.일반적으로 Yocto를 처음 접하는 사용자들은 단순 빌드 툴이라고 생각하는 경우가 많습니다. 하지만 Yocto는 커스터마이징 리눅스를 구축하는 모든것을 포함한 종합 툴(리눅스 구축, 각종 툴, 라이센스 준수 등..)이라고 생각하면 됩니다. reference distribution 이름은 Poky입니다.
설명하기 앞서 앞으로 나올 용어들을 먼저 정리해보겠습니다.
- bitbake : Yocto project의 build engine
- metadata : bitbake가 분석하는 모든 파일 ( *.bb / *.bbappend / *.conf / *.inc …)
- layer : recipe / class / conf / header file이 구성된 폴더 형태
- recipe : *.bb / *.bbappend 파일
- class : *.bbclass 파일
- configureation file : *.conf 파일
- header : *.inc 파일
Yocto Project concept (구성)

위의 그림처럼 Yocto는 YP compatible Poky, BSPs, Layers, QA, dev tools, Doc ... 등으로 구성됩니다. 협업하는 Openembedded로 확장이 가능합니다.
Poky (포스팅 당시 2019.11) 최신버전 Zeus기준 폴더트리
openembedded (포스팅 당시 2019.11) 최신버전 Zeus기준 폴더 트리
openembedded 폴더 트리 입니다. 중요한 점은 Yocto는 버전 별로 문법이 조금씩 달라지거나 기존에 사용하던 api가 삭제될 수 있습니다. 따라서 Poky의 버전과 Openembedded의 버전을 동일한 버전으로 사용해야 합니다.
i.e.) poky - zeus / openembedded - zeus
Yocto Project concept (빌드)
Yocto는 bitbake라는 빌드 엔진을 이용하여 metadata를 파싱합니다. 파싱된 데이터로 upstream에서 데이터를 받아 빌드,패키징,QA 등의 과정을 거친 뒤 image의 형태로 최종 결과물을 추출합니다.
Yocto를 구성하는 입장에서는 이런 일련의 과정을 구성해야하는 어려움이 있습니다. 하지만 제가 생각하는 Yocto의 최대 장점이 구성이 되어있으면 사용자는 명령어 단 한줄로 모든 빌드,이미지추출이 가능하다는 점 입니다.
Yocto Project 장,단점
이것은 제가 직접 Yocto를 구축, 사용해보면서 느낀 주관적일 수도 있는 장단점입니다.장점
- 대부분의 opensource(toolchain 포함)를 최신 형상으로 지원받을 수 있다.
- 여러 리눅스 배포판을 지원한다.
- 커스터마이징 된 리눅스를 여러 리눅스 배포판에서 빌드가 가능한것은, 배포하는 입장에서 보면 엄청난 장점입니다. 예를들어 native 빌드로 특정 오픈소스를 빌드한다면 설치된 패키지에 따라 빌드 결과물이 다르게 나올 수 있습니다.
하지만 Yocto는 자체적으로 native 환경을 구성하기 때문에 Yocto에서 지원하는 리눅스 배포판만 쓴다면 모든 결과물이 동일하게 나옵니다. - 배포 이후 수정이 자유롭다.
- 기존에 구현해놓은 설정파일 등을 bbappend, conf, class 등을 통해 배포 이후 기존 사항을 그대로 놔두고 패치형태로 수정이 자유롭습니다.
- 형상관리가 쉽다.
단점
- 지식 없이 최초 구성이 어렵다.
도움이 될만한 사이트
yocto site : https://www.yoctoproject.org/
openembedded site : https://www.openembedded.org/wiki/Main_Page
yocto tricks : https://wiki.yoctoproject.org/wiki/TipsAndTricks
bitbake tips : https://community.nxp.com/docs/DOC-94953
git

댓글
댓글 쓰기