【第3回】minimal rootfs
本文中に記載のある#で始まるコマンド例はroot権限で実行することを示しています。自分の環境で実行する際に間違えてしまうとシステムを壊してしまう危険があります。引数などを良く確認してから実行して下さい。
第3回は最小限の小さなrootfsをyoctoを使ってビルドし、その上でカーネルをデバッグしてみます。
yoctoで作成したrootfsをそのまま起動しても十分シンプルな状態でカーネルをデバッグすることができます。
今回はさらにinitを/bin/shに置き換えて起動し、カーネルスレッドを除いて、バックグラウンドのプロセスを何も起動しない状態でのデバッグも行ってみます。
1. yocto開発環境の構築
yoctoは独自のLinuxベースシステムを作成するためのフレームワークです。
ここではyoctoのリファレンス実装であるpokyを使って開発環境を構築します。
yoctoのドキュメントホームページは以下にあります。
このWEBにあるドキュメント Quick Buildや Reference Manual が参考になります。
今回はpoky4.2.2を使って実際にビルドを行います。
poky4.2.2の開発環境のベースとしてサポートされているのは
Ubuntu 22.04 20.04 18.04
Debian 11
他にFedora, OpenSUSE, AlmaLinux
となっていて、debian12は含まれていませんが、今回はdebian12上でビルドしてみます。
pokyの開発環境のシステム要件はpokyに含まれている
documentation/ref-manual/system-requirements.rst
ファイルに記載されています。
この版のpokyで使うカーネルは6.1.35です。これは、debian12のカーネルとして前回まで使ってきたカーネル6.1.52と同じ6.1で、リビジョンの違いしかありません。通常リビジョンの違いはバグフィックスやセキュリティーフィックスとなっていて、機能の変更などはありません。ですのでカーネルを入れ替えてもここでビルドしたrootfsは動作すると思われます。
ダウンロード
今回使うバージョンRelease 4.2.2 (mickledore)をダウンロードします。
以下のリンクから直接ダウンロードすることができます。
https://downloads.yoctoproject.org/releases/yocto/yocto-4.2.2/poky-6e17b3e644ca15b8b4afd071ccaa6f172a0e681a.tar.bz2
yoctoプロジェクトのWEBページからたどる場合は以下のダウンロードページのarchiveから探すことができると思います。
tarパッケージを展開
適切なディレクトリを作成して展開します。
$ mkdir xxx
$ cd xxx
$ tar xf poky-xxxxx.tar.bz2
バージョンの確認方法
tarファイルを展開した後でバージョンを知りたくなることはよくあります。pokyのバージョンが記載された以下のファイルを確認します。このファイルにpokyのバージョンが4.2.2と書かれています。
$ head meta-poky/conf/distro/poky.conf
DISTRO = "poky"
DISTRO_NAME = "Poky (Yocto Project Reference Distro)"
DISTRO_VERSION = "4.2.2"
DISTRO_CODENAME = "mickledore"
...
yoctoビルドの準備
yoctoでビルドを行うために必要なパッケージの追加を行います。
Yocto Project Reference Manual 1.4.1に書かれた、以下の手順を実行します。
$ sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev python3-subunit mesa-common-dev zstd liblz4-tool file locales
$ sudo locale-gen en_US.UTF-8
日本語の環境ではja_JP.UTF-8しか作成されないので、/etc/locale.genを修正します。
en_US.UTF-8がコメントアウトされているので#を削除してen_US.UTF-8を有効にします。
これで再度locale-genを実行すれば、en_US.UTF-8のロケールデータが作成されます。
en_US.UTF-8のlocaleが無いとyoctoでビルド時に以下のエラーで停止します。
Please make sure locale 'en_US.UTF-8' is available on your system
なので、ここでlocaleを作成しておきます。
2. yoctoでrootfsをビルド
yoctoイメージの作成
yoctoではカーネルだけでなくrootfsも一緒にビルドできます。yoctoでビルドされたバイナリをイメージと呼んでいます。通常このイメージをSDカードなどに書き込んでCPUボードに装着してLinuxを起動できます。
ビルドには90GBの空きディスク容量とメモリが最低でも8GB必要です。
デフォルトではqemux86-64用のイメージが作成されます。デフォルト設定はbuild/conf/local.confに記述されています。
$ bitbake core-image-minimal
これで必要なソースコードのダウンロードが始まり、ビルドが行われます。
ビルドが完了すると、
build/tmp/deploy/images/qemux86-64
の下にカーネルとminimal rootfsのイメージが作成されます。
core-image-minimalではrootfsのイメージは35MB程度しかありません。
3. yoctoイメージの起動方法
yoctoのデフォルトでビルドしたイメージはx86用ですが、qemu(仮想マシン)用になっています。
ここからはこのイメージをx86ボードで起動する方法を説明します。
ここから先は
¥ 300