Carpe diem
raspberry pi 3, yocto build(in WSL, docker) 본문
심심하기도 하고 집에 놀고 있는 라즈베리파이3 보드로 뭔가 해보고 싶었다..
예전부터 관심있었던 yocto(빌드시스템)로 리눅스 시스템을 빌드하고
펌웨어를 한번 올려보고 싶었다.
커스텀 레이어까지 올려보자...
우선, poky와 open embedded, raspberry pi meta layer를 다운 받는다.
공식 문서에 따르면, poky는 open embedded의 파생버전이고, yocto의 빌드 시스템으로 사용되고 있다고 한다.
oe-core는 점점 고도화를 거치면서 핵심적인 기능만 남았다고 한다.
아래 URL을 보면, dunfell브랜치가 비교적 최근까지 패치가 되고 있는 것으로 보인다.
다운 받아보자...
https://git.yoctoproject.org/meta-raspberrypi
$ git clone git://git.yoctoproject.org/poky.git -b dunfell
$ cd poky
$ git clone git://git.openembedded.org/meta-openembedded -b dunfell
$ git clone git://git.yoctoproject.org/meta-raspberrypi -b dunfell
1. meta-layer 추가
oe-init-build-env 뒤에 디렉토리 지정을 하지 않으면 default 디렉토리 이름인 build디렉토리를 생성 후 이동된다.
oe-init-build-env스크립트는 빌드를 위한 환경변수 설정들을 하는 것으로 보인다.
$ source oe-init-build-env
Docker컨테이너를 실행해서 사용할 경우, root계정으로 실행되서 에러가 발생해서
conf/sanity.conf를 생성해주어야한다.
$ touch conf/sanity.conf
나중에 docker 컨테이너 실행 옵션을 계정을 만들어서 실행하도록 바꿔보자...
메타레이어를 추가해야한다.
기본으로 설치된 메타레이어를 확인해보자.
$ bitbake-layers show-layers
root@d2c2d6462f96:/workdir/rpi/poky/build# bitbake-layers show-layers
NOTE: Starting bitbake server...
layer path priority
==========================================================================
meta /workdir/rpi/poky/meta 5
meta-poky /workdir/rpi/poky/meta-poky 5
meta-yocto-bsp /workdir/rpi/poky/meta-yocto-bsp 5
poky/meta-raspberrypi/README.md를 보면,
dependency가 있는 meta layer들은 아래 4개로 확인된다.
- meta-oe
- meta-multimedia
- meta-networking
- meta-python
여기에 meta-oe, meta-multimedia, meta-networking, meta-python 레이어를 추가해주어야한다.
메타레이어를 추가하는 방법은 두 가지가 있다.
- conf/bblayers.conf를 수정해서 추가하는 방법
- bitbake명령을 사용해서 추가하는 방법
bitbake 명령으로 추가해보자...
$ bitbake-layers add-layer ../meta-openembedded/meta-oe
$ bitbake-layers add-layer ../meta-openembedded/meta-python
$ bitbake-layers add-layer ../meta-openembedded/meta-networking
$ bitbake-layers add-layer ../meta-openembedded/meta-multimedia
$ bitbake-layers add-layer ../meta-raspberrypi
2. 타겟 머신 설정 (conf/local.conf)
conf/local.conf를 아래와 같이 수정, 추가한다.
부팅로그를 보기 위해 UART설정을 추가했다.
# This sets the default machine to be qemux86 if no other machine is selected:
# MACHINE ??= "qemux86"
MACHINE ??= "raspberrypi3-64"
3. build
$ bitbake core-image-base
qemu 관련 에러가 발생한다.
qemu 패키지를 설치해줘야한다.
yocto 공식 커뮤니티에서는 아래처럼 설치하라고 나와있다.
$ sudo apt-get build-dep qemu
dockerfile로 image를 빌드할 것이기 때문에 CLI기반의 명령이 필요하다.
source.list에 deb-src가 있어야한다고 한다.
https://blog.studioego.info/4045
cli로 실행하기 위해서는 아래 URL처럼 sed 명령을 사용하면 된다.
https://unix.stackexchange.com/questions/158395/apt-get-build-dep-is-unable-to-find-a-source-package
Dockerfile에 아래 라인을 추가한다.
# RUN apt-get build-dep qemu
RUN sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list
RUN apt-get update
빌드 성공!.. 이미지를 구워보자...
아래 URL을 주로 참고했다.
https://docs.yoctoproject.org/3.1.1/ref-manual/ref-manual.html#ubuntu-packages
Yocto Project Reference Manual
Yocto Project Reference Manual Copyright © 2010-2020 Linux Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the Creative Commons Attribution-Share Alike 2.0 UK: England & Wales as published by Creative Co
docs.yoctoproject.org
천천히 틈틈이 yocto에 대해서 스터디하고 있는 중이다.
'SBC 보드 > yocto' 카테고리의 다른 글
raspberry pi firmware download in WSL (0) | 2023.01.22 |
---|---|
root 계정으로 bitbake 명령 시에 발생하는 에러 (0) | 2023.01.15 |
WSL환경에서 bitake명령 시에 발생하는 에러(Unable to connect to bitbake server, or start one) (0) | 2023.01.15 |