YoctoでRaspberryPi 3B+向けのOSを作ってみる
こんにちは。
私は現在、『ラブライブ!虹ヶ咲学園スクールアイドル同好会』を視聴しています。
天王寺璃奈さんはかわいいですね。
彼女は感情を表に出すのが苦手で、普段はスケッチブックに表情を描き、コミュニケーションをとっています。
また、技術面に明るく、アイドル活動時は顔を覆うディスプレイを自在に制御し、豊かな感情を表現しています。
youtu.be
そんな折、こんなツイートを見かけました。
虹ヶ咲見たこと無いけどLinuxカーネル書き換えた自作OSで表情作ってる人がいるのは知ってる
— みつえもん (@dst0m) 2020年11月23日
ハードもソフトも自作している天王寺璃奈さん。OSもカスタマイズしていることでしょう。
きっとYocto Projectを利用しています。
というわけで僕もYoctoを触りたいと思います。
モチベーション
Advent calendar用 兼 仕事の勉強です。
ありふれた内容ですが、まずは人の真似からということで初めてみます。
ちょうどラズパイを持て余していたこともあり、
まずは最小限のラズパイ用OSをYoctoでビルドしてみます。
Yocto Projectとは
簡単に言うと、組み込みシステム向けのLinuxを作るためのツールです。
OSを作るための諸々がまとまっているものという認識でいます。
Yoctoのいい点は、オリジナルの構成を作れること、デファクトスタンダードであることです。
デファクトスタンダード最高。
詳しくは公式や「Yocto とは」でヒットした記事を読んでください。
触ってみたい方は岩松さんの『レシピの作り方入門』がいいと思います。
作業環境
以下の内容をUbuntu20.04 on VirtualBoxに割り当てて作業します。
項目 | 内容 |
---|---|
プロセッサ | Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz 8コア |
メモリ | 10GB |
ストレージ | SSD 10GB, HDD 1TB |
環境構築
まずはYocto Projectを導入していきます。 公式導入手順を参考に、必要なパッケージをインストールしていきます。
$ sudo apt install gawk wget git-core diffstat unzip texinfo gcc-multilib \ build-essential chrpath socat cpio python3 python3-pip python3-pexpect \ xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \ pylint3 xterm
ビルドツールPokyをcloneします。
$ git clone git://git.yoctoproject.org/poky
ラズパイ用のOSを作るにあたって必要なmeta-raspberrypiをcloneします。
レイヤーはpokyにまとめておきました。
~/poky$ git clone https://github.com/agherzan/meta-raspberrypi.git
ビルド
~/poky$ source oe-init-build-env
レイヤ追加
build/conf/bblayers.conf
に、先ほどcloneしてきたレイヤmeta-raspberrypi
を追加します。
これで、ビルドツールbitbakeがレイヤを認識してくれます。
BBLAYERS ?= " \ /path/to/poky/meta \ /path/to/poky/meta-poky \ /path/to/poky/meta-yocto-bsp \ /path/to/poky/meta-raspberrypi \ "
対象マシン設定
対象マシンを設定するために、build/conf/local.conf
を編集します。
私の場合はRaspberry Pi 3B+で、SoCのBCM2837が64bitアーキテクチャを採用しています。
せっかくなので、raspberrypi3-64を採用します。
マシン名は、meta-rasberrypi/docs/layer-contents.md
や meta-rasberrypi/conf/machine/
以下で確認できます。
## Supported Machines * raspberrypi * raspberrypi0 * raspberrypi0-wifi * raspberrypi2 * raspberrypi3 * raspberrypi3-64 (64 bit kernel & userspace) * raspberrypi4 * raspberrypi4-64 (64 bit kernel & userspace) * raspberrypi-cm (dummy alias for raspberrypi) * raspberrypi-cm3
マシン名をlocal.conf
の末尾に追記します。
MACHINE ?= "raspberrypi3-64"
ビルド実行
今回は最小限の構成でビルドします。
天に3回祈って寝ます。結果は追記します。
$ bitbake core-image-minimal
(追記2020/12/03)ビルド成功してました。4時間弱かかりました......
ビルド生成物
ビルドで生成されたファイルを確認します。
生成物は、build/tmp/deploy/images/マシン名
以下にあります。
大量にありますが、今回必要なのは
Image
,core-image-minimal-raspberrypi3-64.tar.bz2
,bcm2837-rpi-3-b-raspberrypi3-64.dtb
のみです。
(ファイル名からの判断なので動作確認してません。今microSDがないので......)
トラブルシューティング
VBoxの共有フォルダ内で作業していたが、bitbakeが権限的に実行できなかった。
仕様で共有フォルダの権限を変更できないので(グループに入ることで読み書きはできるがbitbakeはnot permittedされる)、
結局、VBoxでHDDを追加、Ubuntuでマウントして作業ディレクトリを移動した。
まとめ
環境構築から記事作成までぶっ通しでやったので疲れた......。
次はGUI(wayland)を追加するのもいいかもしれない。