Yocto Projectを触ってみる

Raspberry Pi OS(旧Raspbian)、Lite版でも大きいよねって事で、Yocto Projectで専用ディストリビューションを作ってみる手順を記録します。

今回の件とは関係ないどけど、ルートファイルシステムをイメージ化?して、ファームウェア更新とかできるといいなぁ。

 

公式サイトはこちら。

 

www.yoctoproject.org

 

なおビルド環境はLinux Mint (Ubuntu系)のPCを想定しています。Yocto Project自体のバージョンは現時点の最新版である3.4(Honister)を使います。

 

まずは環境を整えるために公式のリファレンスを参考にします。基本的にはaptで必要なパッケージをさくっとインストール。

 

docs.yoctoproject.org

 

次に、作業ディレクトリを作成します。ホームディレクトリの下にyoctoディレクトリを作る体で進めます。そこにリファレンスビルドシステム Pokyを配置します。今回はブランチを指定してクローンしました。LTSを使用したい場合はDunfell (3.1)を指定することになると思います。

 

wiki.yoctoproject.org

 

$ mkdir ~/yocto
$ cd ~/yocto
$ git clone git://git.yoctoproject.org/poky -b honister

 

次にOpenEmbedded-CoreとBSPを配置します。OpenEmbedded-Coreは組込みLinuxディストリビューションを作る際のフレームワークのようで、組み込むOSSのレシピ集とありました。BSPはハードウェアのドライバやライブラリ、サンプルコードになるようです。

 

$ cd ~/yocto/poky
$ git clone git://git.yoctoproject.org/meta-raspberrypi -b honister

$ git clone git://git.openembedded.org/meta-openembedded -b honister

 

必要なものの配置が終わったら設定を行います。手順は先程配置した

meta-raspberrypiのREADMEにあるようです。

 

$ cd ~/yocto/poky
$ source oe-init-build-env rpi-build

 

環境が設定された状態ではrpi-buildディレクトリが作成され、ここに移動します。この状態でクローンしたRaspberry Pi用のレイヤーを追加します。

 

$ pwd
~/yocto/poky/rpi-build
$ bitbake-layers add-layer ../meta-raspberrypi/

 

次にREADMEに記載されている依存レイヤーを追加していきます。これらのレイヤーは追加する順番に依存性があるようです。


$ bitbake-layers add-layer ../meta-openembedded/meta-oe/
$ bitbake-layers add-layer ../meta-openembedded/meta-python/
$ bitbake-layers add-layer ../meta-openembedded/meta-multimedia/
$ bitbake-layers add-layer ../meta-openembedded/meta-networking/

 

レイヤーが追加できたらビルド対象を設定します。設定はlocal.confのMACHINEに記載します。設定値一覧は下記サイトのMachineを参考にします。今回は"raspberrypi4-64"で試しています。

 

layers.openembedded.org

 

ここまでの設定が完了したらビルドを開始します。

 

$ cd ~/yocto/poky/rpi-build
$ bitbake core-image-base

 

時間が数時間。ストレージの容量も50GB以上使うようなので気長に待ちます。

OSのイメージはrpi-build/tmp/deploy/images/raspberrypi4-64に出力されるのでbmaptoolか、一度展開してwicファイルをSDカードに書き込みます。書き込んだSDカードをRaspberry Piに挿し、ブートするとログインプロンプトが出ますので、root、パスワードなしでログインできます。