「ramfs image の展開・再構築」では ramfs イメージの展開・再構築する方法を書きましたが、元となる開発用 root filesystem は buildroot を使うと容易に生成できます。ここでは、buildroot に直接設定するのではなく、設定情報や追加差分を buildroot ツリー外に作成・適用する方法を記載します。
まずは kernel, bootloader を含まない root filesystem イメージだけを作ります。
buildroot を取得
buildroot はダウンロードサイトからソースアーカイブをダウンロードできますが、任意のバージョンが得られるように github から clone します。
$ cd ${HOME}/work
$ git clone https://github.com/buildroot/buildroot.git
安定版を得る場合はバージョンタグを指定して close してください。
br2-external を作成
buildroot/ の隣に以下のファイルを作成します。configs/ はディレクトリだけ作成しておきます。
${HOME}/work/
buildroot/
br2_external/
+-- external.desc
+-- external.mk
+-- Config.in
+-- configs/
+--- hoge_rootfs_defconfig
external.desc には基本情報を記述します。"name" に指定した文字列が識別子になり、例えば$(BR2_EXTERNAL_HOGE_PATH) で br2-external/ の位置を参照することができるようになります。
name: HOGE desc: Hoge br2-external tree
external.mk に makefile の追加情報を作成します。まずは空にしておきます。Config.in に menuconfig で扱うことができる追加情報を記述します。こちらもまずは空にしておきます。configs/ には追加する defconfig を置いていくことになります。
defconfig を作成
menuconfig を起動します。
$ cd ${HOME}/work/buildroot
$ make BR2_EXTERNAL=../br2-external menuconfig
基本的な情報を定義します。ここでは、AArch64 の A72/53 構成を指定しています。
Target options --->
Target Architecture --->
AArch64 (little endian)
Target Architecture Variant --->
cortex-A72/A53 big.LITTLE
defconfig を保存する場所を指定します。ここでは、先ほど作成した br2-external/configs/ 以下に rootfs 作成用の定義ということで "hoge_rootfs_defconfig" として保存します。
Build options --->
Location to save buildroot config
$(BR2_EXTERNAL_HOGE_PATH)/configs/hoge_rootfs_defconfig
toolchain は今まで開発で使っていたものを使うことにします。buildroot が用意しているものと同じバージョンの toolchain を Arm からダウンロードして /opt/toolchain に展開していたのでそのまま指定していますが、バージョンが異なる場合や、Linaro からダウンロードする場合はこれ以外の項目も指定する必要があります。
Toolchain --->
Toolchain type --->
External toolchain
Toolchain --->
Arm Arch64 2019.12
Toolchain origin --->
Pre-installed toolchain
Toolchain path
/opt/toolchain/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu
filesystem イメージは U-Boot から読み込む ramfs として使えるように cpio.gz.u-boot 形式にしておきます。tar アーカイブは使わないので off にします。
Filesystem images --->
[*] cpio the root filesystem (for use as an initial RAM filesystem)
Compression method --->
gzip
[*] Create U-Boot image of the root filesystem
[ ] tar the root filesystem
menuconfig を終了すると、buildroot/.config に結果が保存されます。これを先ほど指定した hoge_rootfs_defconfig に保存するため、savedefconfig を実行します。
$ make BR2_EXTERNAL=../br2-external savedefconfig
buildroot のビルド
最初からビルドする場合は、上記で作成した defconfig を適用します。まず、追加した defconfig が指定可能かを確認します。最下行に hoge_rootfs_defconfig があることを確認します。
$ make BR2_EXTERNAL=../br2-external list-defconfigs Built-in configs: ... External configs in "Hoge br2-external tree": hoge_rootfs_defconfig - Build for hoge_rootfs
作成した defconfig を適用します。
$ make BR2_EXTERNAL=../br2-external hoge_rootfs_defconfig
最後に、ビルドを実行します。
$ make BR2_EXTERNAL=../br2-external
buildroot/output/images/rootfs.cpio.uboot が出来上がります。

コメント