みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

YoctoProject 4.1(langdale)をためす

はじめに

2022/10/24付でYoctoProjct 4.1 langdaleがリリースされていたので試す。

ターゲットはラズベリーパイ4

環境を構築する

作業環境

$ mkdir -p ~/yocto/rpi-langdale
$ cd ~/yocto/rpi-langdale

pokyの取得

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

環境変数の設定

$ source poky/oe-init-build-env

meta-raspberrypiの取得

執筆時点(2022/11/08)ではlangdaleブランチはlayerindexに登録されていない様子。 一旦masterブランチを取得して切り替える。

$ bitbake-layers layerindex-fetch meta-raspberrypi -b master
$ pushd ../poky/meta-raspberrypi
$ git switch -c langdale origin/langdale
$ cd ../meta-openembedded
$ git switch -c langdale origin/langdale
$ popd

local.confを編集

conf/local.confに下記の部分を追加

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 \
"

bitbake実行

$ bitbake core-image-base

エラー発生

下記のようなエラーが発生した。

ERROR: Nothing RPROVIDES 'linux-firmware-rpidistro-bcm43455' (but /home/mickey/yocto/rpi-langdale/poky/meta/recipes-core/packagegroups/packagegroup-base.bb RDEPENDS on or otherwise requires it)
linux-firmware-rpidistro RPROVIDES linux-firmware-rpidistro-bcm43455 but was skipped: because it has a restricted license 'synaptics-killswitch'. Which is not listed in LICENSE_FLAGS_ACCEPTED

Upgrading to Yocto Langdaleに情報がある。

The linux-firmware-rpidistro package provided by the meta-raspberrypi layer has components licensed under more restrictive terms. This license must be explicitly enabled. Read more at https://meta-raspberrypi.readthedocs.io/en/latest/ipcompliance.html.

リンクを辿ると、WiFi/BT firmwareのBLOBのライセンスである「Synapticsライセンス」が法的リスクをはらんでいるっぽいので、 取り扱いを厳密にするということらしい。このリスクを受け入れる場合は、local.confかdistro.confに下記を追加すればビルド可能になるとのこと。

LICENSE_FLAGS_ACCEPTED = "synaptics-killswitch"

関連パッケージを確認

tmp/deploy/licenses/core-image-base-raspberrypi4-64/license.manifest でSynapticsライセンスが適用されるパッケージを確認する。

PACKAGE NAME: linux-firmware-rpidistro-bcm43456
PACKAGE VERSION: 20210315-3+rpt7
RECIPE NAME: linux-firmware-rpidistro
LICENSE: Synaptics-rpidistro

bcm43456のファームウェアだということがわかる。

書き込み

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

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

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

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

起動確認

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

root@raspberrypi4-64:~# cat /etc/os-release
ID=poky
NAME="Poky (Yocto Project Reference Distro)"
VERSION="4.1 (langdale)"
VERSION_ID=4.1
PRETTY_NAME="Poky (Yocto Project Reference Distro) 4.1 (langdale)"
DISTRO_CODENAME="langdale"

まとめ

langdaleをためした。

pokyの方は特に躓く点はなかったが、 meta-raspberrypiのlangdaleブランチはlayerindexにまだ登録されていないので、 若干のワークアラウンドが必要。

また、少なくともラズベリーパイ4のWiFi/BTのファームウェアのライセンスにには法的リスクが報告されているため、 使用するためにはそのリスクを受け入れたという表明が必要になっている。

おそらく個人使用時にはあまり関係ないと思われるが要注意。