みつきんのメモ

組み込みエンジニアです。Interface誌で「My オリジナルLinuxの作り方」連載中

Yocto Project CROPSでmeta-raspberrypiをビルド

はじめに

前回CROPSを動かしてみた。

CROPSでmeta-raspberrypiをビルドしてみる。今回はラズベリーパイ4を使用する。

run_crops.sh

今回も前回作成したrun_crops.shを使用する。

#!/bin/sh

cmd="source /workdir/poky/oe-init-build-env"
if [ $# -gt 0 ] ; then
    cmd="${cmd} && $@"
fi

docker run --rm -it -v $(pwd):/workdir crops/poky --workdir=/workdir bash -c "${cmd}"

実行権限をつけてPATHの通ったところに置いておく。

$ chmod +x ./run_crops.sh

余談だが、/workdirの部分を$(pwd)にすると、ホストとコンテナ内のパスが完全に一致するので、便利になるかもしれない。

Pokyの作成

作業場所は~/work/yocto/rpi_honisterとする。

$ mkdir -p ~/work/yocto/rpi_honister && cd ~/work/yocto/rpi_honister

Pokyの取得

まずはPoky一式を取得する。

$ git clone git://git.yoctoproject.org/poky.git -b honister

meta-raspberrypiの取得

meta-raspberrypiはbitbake-layers layerindex-fetchで取得できる。

$ run_crops.sh bitbake-layers layerindex-fetch meta-raspberrypi

ダウンロードから、ビルド対象への追加まで一括でやってくれるので便利。

レイヤの確認

$ run_crops.sh bitbake-layers show-layers

### Shell environment set up for builds. ###

You can now run 'bitbake <target>'

Common targets are:
    core-image-minimal
    core-image-full-cmdline
    core-image-sato
    core-image-weston
    meta-toolchain
    meta-ide-support

You can also run generated qemu images with a command like 'runqemu qemux86'

Other commonly useful commands are:
 - 'devtool' and 'recipetool' handle common recipe tasks
 - 'bitbake-layers' handles common layer tasks
 - 'oe-pkgdata-util' handles common target package tasks
NOTE: Starting bitbake server...
layer                 path                                      priority
==========================================================================
meta                  /workdir/poky/meta                        5
meta-poky             /workdir/poky/meta-poky                   5
meta-yocto-bsp        /workdir/poky/meta-yocto-bsp              5
meta-raspberrypi      /workdir/poky/meta-raspberrypi            9

docker runする時に--workdir=/workdirとしているので全てのパスの起点が/workdirになっている。

local.confの修正

build/conf/local.confに下記の内容を追加する。

MACHINE = "raspberrypi4-64"
DL_DIR ?= "${TOPDIR}/../downloads"

# enable uart
ENABLE_UART = "1"

# systemd
DISTRO_FEATURES:append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_initscripts = ""

# connman
IMAGE_INSTALL:append = " connman \
                 connman-client \
"

HONISTERでは_append:appendになっているので注意が必要。

Upgrading to Yocto Honisterが親切。

こちらで少し解説した。

ビルド

$ run_crops.sh bitbake core-image-base

SDに書き込み

./build/tmp/deploy/images/raspberrypi4-64/core-image-base-raspberrypi4-64.wic.bz2が書き込み用イメージとなる。

これをbmaptoolでマイクロSDカードに書き込む。

$ sudo bmaptool copy ./build/tmp/deploy/images/raspberrypi4-64/core-image-base-raspberrypi4-64.wic.bz2 /dev/sdX

/dev/sdXは適宜読み替え。

起動確認

マイクロSDカードをラズパイ4に挿入し電源を投入する。

Poky (Yocto Project Reference Distro) 3.4.1 raspberrypi4-64 ttyS0

raspberrypi4-64 login: root
Last login: Fri Nov 19 17:19:42 UTC 2021 on ttyS0
root@raspberrypi4-64:~# cat /etc/os-release 
ID=poky
NAME="Poky (Yocto Project Reference Distro)"
VERSION="3.4.1 (honister)"
VERSION_ID=3.4.1
PRETTY_NAME="Poky (Yocto Project Reference Distro) 3.4.1 (honister)"
root@raspberrypi4-64:~# 

VERSION="3.4.1 (honister)"起動した。

まとめ

CROPS経由でもmeta-raspberrypiがビルドできることを確認できた。 環境構築の手間はホストマシンが汚れるのを防ぐ意味でもCROPSは有用だと思う。

bitbake-layersなどのbitbake以外のツールも問題なく使えているので、CROPSを使用することで不便なことはなさそう。