Yocto 프로젝트란?
Yocto 프로젝트는 임베디드 시스템을 위한 맞춤형 리눅스 배포판을 만드는 도구입니다. 다양한 하드웨어 플랫폼에 최적화된 리눅스 운영체제를 쉽고 효율적으로 만들 수 있도록 도와줍니다.
Yocto 프로젝트를 사용하는 이유
- 맞춤형 리눅스 배포판 생성: Yocto는 필요에 맞게 커스터마이즈된 리눅스 배포판을 만들 수 있게 해줍니다. 필요한 패키지, 라이브러리, 드라이버 등을 선택하여 가벼운 시스템부터 복잡한 시스템까지 다양한 요구를 충족시킬 수 있습니다.
- 반복 가능한 빌드: Yocto는 빌드 프로세스를 자동화하여, 동일한 설정으로 반복 가능한 빌드를 제공합니다. 이를 통해 개발 과정에서의 일관성을 유지할 수 있습니다.
- 효율적인 의존성 관리: Yocto는 패키지 의존성을 자동으로 관리하여, 필요한 모든 구성 요소를 적절한 순서로 빌드합니다. 개발자가 수작업으로 의존성을 관리할 필요가 없습니다.
Yocto 프로젝트 쉽게 설명
레이어와 레시피
- 레이어(Layer): 레이어는 관련된 설정과 레시피를 모아둔 폴더입니다. 예를 들어, 하드웨어 지원 레이어, 멀티미디어 레이어, 네트워크 레이어 등이 있습니다. 각 레이어는 독립적으로 관리되어, 필요에 따라 쉽게 추가하거나 제거할 수 있습니다.
- 레시피(Recipe): 레시피는 소프트웨어 패키지를 어떻게 빌드하고 설치할지 정의한 파일입니다. 레시피 파일은 .bb 확장자를 가지며, 패키지 소스 위치, 빌드 방법, 의존성 등을 포함합니다.
Poky
- 커스텀 리눅스 이미지를 만들기 위해서 사용하는 빌드 툴
- 빌드 할 때 bitbake라는 빌드 툴이 사용됨
- oe-core : 임베디드 시스템을 위한 표준화된 빌드 환경을 제공
- meta-yocto : 리눅스 이미지를 만들 때 필요한 설정이 모여져 있음
- meta-yocto-bsp : BSP = board support package, 특정 보드가 잘 동작하게 하기 위한 소프트웨어 패키지
Poky로 리눅스 빌드하고, QEMU로 실행해보기
WSL Poky를 설치하고 QEMU를 위한 이미지를 빌드하고 실행하는 과정
- 필수 패키지 설치
- Yocto 프로젝트 소스 코드 다운로드
- Poky 설정
- 빌드 설정 수정 (conf/local.conf 파일 수정)
- 이미지 빌드 (bitbake core-image-sato)
- QEMU 실행 (runqemu qemux86-64)
1. 필수 패키지 설치
Yocto 프로젝트를 시작하기 위해 필요한 패키지를 설치합니다.
sudo apt-get update
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat cpio python3 python3-pip python3-pexpect \
xz-utils debianutils iputils-ping
2. Yocto 프로젝트 소스 코드 다운로드
Poky를 포함한 Yocto 프로젝트의 소스 코드를 다운로드합니다.
mkdir ~/yocto
cd ~/yocto
git clone git://git.yoctoproject.org/poky
cd poky
git checkout dunfell
3. Python 3.8 버전 설치 / 빌드에 필요한 도구 설치
Bitbake 빌드에 필요한 lz4, zstd 등을 설치 합니다.
##빌드를 위해 필요한 패키지 설치
sudo apt-get update
sudo apt-get install lz4
sudo apt-get install zstd
Bitbake 빌드할 때 파이선 3.8 이후 버전이 필요 하기 때문에 파이썬 버전을 확인 합니다.
python3 --version 입력했을 때 버전이 어떻게 나오는지 확인합니다.
python --version
Python 3.6.9 ## 3.8보다 낮음
버전이 3.8 보다 낮은 경우 아래를 실행 합니다.
## 파이썬 3.8 버전 설치
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.8
## 파이썬 설정
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2
4. Poky 설정
Yocto 프로젝트의 환경을 설정합니다.
source oe-init-build-env
만약 에러와 같은 에러가 발생한다면,
ERROR: The following required tools (as specified by HOSTTOOLS) appear to be unavailable in PATH, please install them in order to proceed: lz4c 라는 메시지가 출력 되는 경우 아래 코드를 실행하여 직접 설치해준다.
cd ~/
wget https://github.com/lz4/lz4/archive/refs/tags/v1.9.3.tar.gz
tar -xzf v1.9.3.tar.gz
cd lz4-1.9.3
# 직접 빌드 후 설치
make
sudo make install
## l4zc --version 확인
lz4c --version
5. 빌드 설정 수정
build 디렉토리에서 conf/local.conf 파일을 열어 빌드 설정을 수정합니다.
#local.conf 파일을 연다
nano conf/local.conf
# MACHINE이 qemux86-64로 되어있는지 확인
MACHINE ?= "qemux86-64"
여기서 기본적인 설정을 확인하고 필요한 경우 수정합니다. 예를 들어, MACHINE 변수를 qemux86-64로 설정합니다. 기본 값으로 qeumx86-64로 되어 있습니다.
6. 이미지 빌드
QEMU를 위한 이미지를 빌드합니다. 일반적으로 core-image-minimal 이미지를 빌드합니다.
bitbake core-image-minimal -k
이 과정은 시간이 오래 걸릴 수 있습니다.
6. QEMU 실행
이미지 빌드가 완료되면 QEMU를 사용하여 이미지를 실행합니다. nographic은 UX 화면을 사용하지 않겠다는 의미 입니다. 옵션을 넣지 않으면, 너무 느리기 때문에, 넣고 실행하는 것이 좋습니다.
runqemu qemux86-64 nographic
#로그인 계정은 root로 하면 됩니다.
이 명령어는 QEMU를 사용하여 빌드된 이미지를 실행합니다.
만약 "runqemu - ERROR - Failed to run qemu: Could not initialize SDL(x11 not available) - exiting" 라는 메시지가 출력된다면, X11를 설치하면 됩니다.
sudo apt-get install xorg
#종료 할 때는 poweroff 입력
$poweroff