はじめに
前回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を使用することで不便なことはなさそう。