1. はじめに
最近の RocketBoards.org コミュニティー・サイトで紹介されているブートフローでは、
itb(Image Tree blob)ファイルが使用されています。
この記事では、itb ファイルや its(Image Tree Source)ファイルについて説明します。
メモ:itb ファイルは、U-Boot のドキュメントでは FIT(Flattened Image Tree)イメージとも
呼ばれます。its に記述するツリー構造のことを FIT と呼びます。
参考: Single Image Boot
Flat Image Tree (FIT)
2. its / itb ファイルについて
itb ファイルは複数のバイナリーや設定が 1 つにまとめられたファイルです。itb ファイルに含められる情報は its ファイルに記載されています。its ファイルには itb ファイルにどのような情報を含めるかの設定があり、複数の設定が存在する場合はいずれかを選択して itb ファイルの構成を決定することが可能です。
イメージとしては下図となります。下図の its ファイルの場合は、Config1 と Config 2 という名前の設定があります。Config1 を選択した場合には図の FIT image の緑色の構成、Config2 の場合には赤色の構成となります。
【図 1】its / itb ファイルの関係
3. itb ファイルの生成方法
一般的な itb ファイル作成コマンドは下記です。
$ mkimage -f <入力ファイル(.its)> <出力ファイル(.itb)>
尚、Rocketboard.org のブートローダー作成フローでは、u-boot-socfpga の /tools 下にある mkimage ツール(コマンド)を使用して、its に基づいて itb ファイルを作成しています。
また、u-boot-tools という名前のパッケージを開発マシンにインストールすることで、u-boot-socfpga に含まれる mkimage の代わりに、自身マシンにある mkimage を使用することが可能です。
そうすることで、u-boot-socfpga/tools の mkimage を選択する必要無く、mkimage コマンドを直接使用することが可能です(使用している mkimage は /u-boot-socpga/tool/mkimage では無く、汎用のものを使用)。
参考: u-boot-tools パッケージは Ubuntu の場合、下記コマンドでインストール可能です。
$ sudo apt install u-boot-tools
4. its ファイルの記載例
"2. its / itb ファイルについて" でも触れましたが、itb ファイルは its ファイルに従い作成されます。
この章では its ファイルの記載例について説明します。
下記は Agilex™ 7 FPGA の Linux 環境構築で使用される its ファイルです。ポイントとなる部分の説明は、下記コードの後ろで紹介していますのでご確認ください。
■ファイル: fit_kernel_agilex7_dk_si_agf014eb.its
/dts-v1/;
/ {
description = "FIT image with kernel, DTB and FPGA core binary";
#address-cells = <1>;
images {
kernel { ・・・(④)
description = "Linux Kernel";
data = /incbin/("./Image.lzma");
type = "kernel";
arch = "arm64";
os = "linux";
compression = "lzma";
load = <0x6000000>;
entry = <0x6000000>;
hash {
algo = "crc32";
};
};
fdt-0 { ・・・(④)
description = "socfpga_socdk_vanilla";
data = /incbin/("./socfpga_agilex_vanilla.dtb");
type = "flat_dt";
arch = "arm64";
compression = "none";
hash {
algo = "crc32";
};
};
fdt-4 {
description = "socfpga_socdk_combined";
data = /incbin/("./socfpga_agilex_socdk.dtb");
type = "flat_dt";
arch = "arm64";
compression = "none";
hash {
algo = "crc32";
};
};
fpga-4 {
description = "FPGA bitstream for GHRD";
data = /incbin/("./ghrd.core.rbf");
type = "fpga";
arch = "arm64";
compression = "none";
load = <0xA000000>;
hash {
algo = "crc32";
};
};
};
configurations {
default = "board-0"; ・・・(②)
board-0 { ・・・(①)
description = "board_0";
kernel = "kernel"; ・・・(③)
fdt = "fdt-0"; ・・・(③)
signature {
algo = "crc32";
key-name-hint = "dev";
sign-images = "fdt-0", "kernel";
};
};
board-4 { ・・・(①)
description = "board_4";
kernel = "kernel";
fdt = "fdt-4";
fpga = "fpga-4";
signature {
algo = "crc32";
key-name-hint = "dev";
sign-images = "fdt-4", "kernel", "fpga-4";
};
};
};
};
ポイント:以下に重要な箇所を説明します。
① configurations の中に "board-0" と "board-4" が定義されています。
② default として "board-0" が指定されています。
③ "board-0" の中で kernel = "kernel"; と fdt = "fdt-0"; が定義されています。
④ images の中には "kernel" と "fdt-0" が定義されており、data 項目で対象とするファイルが指定
されています。
5. おわりに
この記事では its / itb ファイルについての説明と作成にかかわる内容を紹介しました。最近のデバイスでは itb を使用するケースが増えているので、ぜひご活用いただければと思います。