Yocto

M1 Macbook에서 Yocto 빌드 환경 설정

chbae 2023. 4. 23. 15:57
728x90

M1 Macbook Pro를 필자는 사용하고 있고 여기서 Yocto (OpenEmbedded) 오픈소스 기여를 하기 위해 Poky master 를 Docker (Apple Silicon 버전)를 활용하여 빌드하고 있다. 이 글에서는 M1 Macbook에서 Yocto 빌드 환경을 설정하기 위한 방법을 간략히 소개하고자 한다.

 

Intel (linux/amd64) 버전의 docker image는 https://hub.docker.com/r/crops/poky 에서 docker pull crops/poky 명령을 통해 받을 수 있지만 arm64 버전은 받을 수 없어서 https://github.com/crops/yocto-dockerfiles 에서 제공하는 dockerfile를 이용하여 docker image를 직접 생성 했다.

arm64 ubuntu용 docker image 생성

$ git clone https://github.com/crops/yocto-dockerfiles.git
$ cd yocto-dockerfiles
$ docker build -t yocto-ubuntu -f ./dockerfiles/ubuntu/ubuntu-22.04/ubuntu-22.04-base/Dockerfile .

 

Docker 컨테이너의 생명 주기와 관계없이 데이터를 저장할 수 있도록 Docker에서 제공하는 volume을 생성한다.

Docker Volume 생성

$ docker volume create yoctovolume

Yocto 빌드를 하기 위해 docker 환경으로 접속

$ docker run -it --rm -v yoctovolume:/home/yoctouser yocto-ubuntu

 

이제 poky를 https://git.yoctoproject.org/poky/ 에서 다운로드 받은 후 빌드를 하면 된다.

Yocto 빌드

필자는 default 설정인 qemu에서 core-image-minimal을 빌드하였고 빌드 시간은 52m53.252s 이 걸렸다.

$ git clone git://git.yoctoproject.org/poky  
$ cd poky  
$ source oe-init-build-env  
$ bitbake core-image-minimal

QEMU 실행 (nographic and user network)

빌드 후 runqemu nographic 명령을 실행하면 다음과 같은 에러가 발생하여 slirp 옵션을 추가해서 실행했다.

$ runqemu nographic serial     
runqemu - INFO - Running bitbake -e ...  
runqemu - ERROR - TUN control device /dev/net/tun is unavailable; you may need to enable TUN (e.g. sudo modprobe tun)  
runqemu - INFO - Cleaning up  
runqemu - INFO - Host uptime: 4710.26  

$ runqemu nographic serial slirp  
....  
Poky (Yocto Project Reference Distro) 4.2 qemux86-64 /dev/ttyS0  
qemux86-64 login:

Docker 내 필요한 도구 설치하기

docker ps 명령어로 container id를 확인 한 후 docker exec 명령어로 필요한 도구를 설치한다. 아래 예는 필자가 사용하는 tmux, vim, htop, git-email 등을 설치한다. Yocto docker image에는 기본적으로 yoctouser가 user로 설정이 되는데 sudo 권한이 없어서 외부에서 root 권한으로 도구를 설치해야한다.

 

다른 방법으로는 Dockerfile을 수정하여 yoctouser에게 sudo 권한을 주는 방법도 있다.

$ docker ps                                           
...  
d916e147c818  yocto-ubuntu  "/bin/sh -c /bin/bash"  2 minutes ago  Up 2 minutes  

$ docker exec -u root -t d916e147c818 apt-get -y install git-email tig tmx vim

 

이후 그대로 종료하면 image에 저장이 안되어 있기 때문에 다음 실행할 때 다시 설치해야 한다. 필자는 아래 예에서 docker commit 명령어로 image를 새로 만들었다.

$ docker commit d916e147c818 yocto-ubuntu:chanbae

 

이렇게 하면 다음에 yocto-ubuntu:chanbae 이미지로 실행하면 설치한 툴이 포함된 이미지가 실행이 된다.

Reference