🔖

Yoctoで自分のLinuxイメージを作る方法

2023/09/16に公開1

はじめてのの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を作る
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_SIZErootfsパーティションのサイズを指定する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.confbblayers.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

Satoshi BandoSatoshi Bando

とても参考になりました!手元で試していて少し気になった点がありましたのでコメントします。

add-layerする以下のコマンドですが、実行場所と追加対象のlayerの指定方法が、記載の方法ではうまくいきませんでした(違いは軽微ですが)

記載いただいている内容

cd .. # yocto-development直下にもどります。
bitbake-layers create-layer meta-custom # layerを作る
bitbake-layers add-layer meta-custom # layerをbuild/bblayers.confに追加

こうしないといけませんでした(コマンド実行はbuildディレクトリ。layerのパスは../meta-customと指定(相対パス)

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に追加。パスは相対パス指定