[Buildroot] 外部設定ファイル(BR2_EXTERNAL)を作成する

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 が出来上がります。


コメント

タイトルとURLをコピーしました