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