Yoctoで自分のLinuxイメージを作る方法
はじめてののYoctoプロジェクト (Raspberrypi 4)でLinuxの極小イメージcore-image-minimal
がビルドできるようになったら、次はこのイメージをカスタマイズしてみます。
目的
Linuxイメージをカスタマイズするための基本的な手順を知る
ゴール
-
core-image-minimal
のrootfsパーティションのサイズを少しだけ増やす
準備
yocto-development
├── build
├── meta-custom
├── meta-raspberrypi
└── poky
の状態であればOK
レシピの作成
はじめてののYoctoプロジェクト (Raspberrypi 4)で構築したbashセッションを終了してしまっている場合はもう一度以下を実行して環境変数等を復活させます
source poky/oe-init-build-env build
yocto-development
直下にmeta-custom
レイヤーを作成する。meta-custom
は今回カスタマイズしたレシピを格納するために名付けたディレクトリで、ここに置くレシピを使ってイメージを作ります。
Yoctoでは
- recipe(レシピ) = カスタマイズするためのファイル
- layer(レイヤー) = ある区切りでまとめたレシピ群
という言葉を使い、ここではmeta-custom
がlayerの一つに当たります。
cd .. # yocto-development直下にもどります。
bitbake-layers create-layer meta-custom # layerを作る
cd build # add-layerはbuildディレクトリで実行する
bitbake-layers add-layer ../meta-custom # layerをbuild/bblayers.confに追加
ディレクトリrecipes-core/images
を作成します。
mkdir -p meta-custom/recipes-core/images
このrecipes-core/images
というディレクトリの名前がとても重要で、bitbake
コマンドを叩くときにこの名前の中に入っているレシピを一つのイメージの単位として扱います。他にもアプリケーションのレシピを入れるためディレクトリ、カーネルのカスタマイズレシピを入れるためのディレクトリなど名前の掟が合って、階層や名前を間違えて読み込まれなくてよくハマるので注意しましょう。
今回はcore-image-minimal
から少しだけ自分のカスタマイズを入れるので、pokyからcore-image-minimal.bbをコピーします。
cp poky/meta/recipes-core/images/core-image-minimal.bb meta-custom/recipes-core/images/custom-image.bb
custom-image.bbを編集してrootfs
パーティションのサイズだけ変えてみます。ここで登場するIMAGE_ROOTFS_SIZE
はrootfs
パーティションのサイズを指定するYoctoの変数で、元々はpokyの中に存在しています。このような変数がpokyの中には山のようにあるのですが、これを一つ一つお勉強していくのは大変なので、カスタマイズしたいものが出来たときに調べる、で良いかと思っています。
meta-custom/recipes-core/images/custom-image.bb
inherit core-image
-IMAGE_ROOTFS_SIZE ?= "8192"
+IMAGE_ROOTFS_SIZE ?= "204800"
IMAGE_ROOTFS_EXTRA_SPACE:append = "${@bb.utils.contains("DISTRO_FEATURES", "systemd", " + 4096", "", d)}"
上記のように編集して保存。
ビルド
イメージをビルドします。
source poky/oe-init-build-env build
bitbake custom-image
local.conf
とbblayers.conf
を編集する
Yocto作業ディレクトリのbuild/deploy/images/raspberrypi4-64
直下にイメージが出来ているので
# /dev/sdbはSDカードの場所
bmaptool copy --bmap custom-image-raspberrypi4-64.wic.bmap custom-image-raspberrypi4-64.wic.bz2 /dev/sdb
で焼き込んで、完了したらSDカードをRaspberrypi4に挿して電源を入れます。
rootfs
のサイズが変わっているかチェックしてみましょう。
次回はこのmeta-custom
レイヤーを使って自前の小さなアプリケーションを組み込んでみます。
おわり
Discussion
とても参考になりました!手元で試していて少し気になった点がありましたのでコメントします。
add-layer
する以下のコマンドですが、実行場所と追加対象のlayerの指定方法が、記載の方法ではうまくいきませんでした(違いは軽微ですが)記載いただいている内容
こうしないといけませんでした(コマンド実行は
build
ディレクトリ。layerのパスは../meta-custom
と指定(相対パス)ご指摘ありがとうございます!修正いたしました。