みつきんのメモ

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

Yocto Project 3.3(Hardknott)でラズベリーパイ4を動かす

はじめに

Yocto Project 3.3がリリースされていた。

リリースされた事自体は知っていたが、meta-raspberrypiをビルドする際に、bitbake-layers layerindex-fetchがうまく動かなかったので、しばらく様子を見ていた。

具体的には下記のようなこと。

  • OpenEmbedded Layer Indexとの接続に使用される証明書がエラーになった
  • OpenEmbedded Layer Indexのhardknottブランチにmeta-raspberrypiが登録されていなかった

5/26時点で、これらの問題が解消されたことを確認した。

構築手順

ソース取得

下記のコマンドでソースを取得する。

$ mkdir -p rpi-hardknott
$ cd rpi-hardknott
$ git clone git://git.yoctoproject.org/poky.git -b hardknott

環境変数設定

$ source poky/oe-init-build-env build

自動的にビルドディレクトリに移動される。 これで、bitbake関連のツールが使用可能になる。

レイヤ追加

下記のコマンドでビルド対象にmeta-raspberrypiを追加する。

$ bitbake-layers layerindex-fetch meta-raspberrypi

local.confの修正

MACHINEをraspberrypi4-64に設定し、UARTを有効化する。

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

# enable uart
ENABLE_UART = "1"

# systemd
DISTRO_FEATURES_append = " systemd pam"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_initscripts = ""

# connman
IMAGE_INSTALL_append = " connman \
                 connman-client \
"

ビルド

core-image-baseをビルドする。

$ bitbake core-image-base

書き込み

bmaptoolで書き込む。

$ sudo bmaptool copy core-image-base-raspberrypi4.wic.bz2 /dev/sdX

/dev/sdXは環境に応じて適宜読み替える。

起動

OSを書き込んだマイクロSDカードをラズベリーパイ4に挿入し起動する。

rootでログインしたあと下記のコマンドで環境を確認する。

# cat /etc/os-release
ID=poky
NAME="Poky (Yocto Project Reference Distro)"
VERSION="3.3.1 (hardknott)"
VERSION_ID=3.3.1
PRETTY_NAME="Poky (Yocto Project Reference Distro) 3.3.1 (hardknott)"
# uname -a
Linux raspberrypi4-64 5.10.31-v8 #1 SMP PREEMPT Fri Apr 23 15:16:49 UTC 2021 aarch64 GNU/Linux

hardknottが起動したことが確認できた。

まとめ

3.3がリリースされていた。

リリース直後はbitbake-layers layerindex-fetchがうまく動作しないことがあるということがわかった。

ユーザーが使用する機能としては便利になった反面、正しく動作する環境を提供するコストは高くなったのかもしれない。

開発者の皆さんに感謝。