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
'Yocto' 카테고리의 다른 글
M1 Macbook에서 Yocto 빌드 환경 설정 2부 (네트워킹) (0) | 2023.05.23 |
---|---|
[yocto] ld: cannot find /lib/libc.so.6: No such file or directory (0) | 2023.05.19 |
Yocto (kirkstone) build for raspberrypi4 64 on M1 pro macbook (0) | 2023.04.23 |
Yocto vs Debian (package-based) build system (0) | 2023.04.23 |
Yocto Project Dev Day Virtual North America 2020 후기 (0) | 2023.04.22 |