image.ubとはKernelやDevice Treeをまとめたu-bootのブートイメージです。
Xilinx系の評価プロジェクトでこれが提供されていることがあるのだが、ここからDeviceTreeを取り出したくなるときがある。
そのためのメモである。
image.ubを生成するにはmkimageを使用するが、抜き出しにはdumpimageを使用する。
まずはimage.ubがどのように構成されているか確認する。
$ dumpimage -l image.ub
FIT description: U-Boot fitImage for PetaLinux/4.14-xilinx-v2018.3+gitAUTOINC+eeab73d120/plnx-zynqmp
Created: Tue May 26 22:38:33 2020
Image 0 (kernel@1)
Description: Linux kernel
Created: Tue May 26 22:38:33 2020
Type: Kernel Image
Compression: gzip compressed
Data Size: 7111615 Bytes = 6944.94 KiB = 6.78 MiB
Architecture: AArch64
OS: Linux
Load Address: 0x00080000
Entry Point: 0x00080000
Hash algo: sha1
Hash value: a28aa4f3f6dc093f484e3d8f62383a7827a6ec49
Image 1 (fdt@system-top.dtb)
Description: Flattened Device Tree blob
Created: Tue May 26 22:38:33 2020
Type: Flat Device Tree
Compression: uncompressed
Data Size: 36434 Bytes = 35.58 KiB = 0.03 MiB
Architecture: AArch64
Hash algo: sha1
Hash value: 8100aa8e2a88a8e18696033cf27161d56b5b3ad1
Default Configuration: 'conf@system-top.dtb'
Configuration 0 (conf@system-top.dtb)
Description: 1 Linux kernel, FDT blob
Kernel: kernel@1
FDT: fdt@system-top.dtb
Hash algo: sha1
Hash value: unavailable
つまり、imageが2個とconfigが1個入っていることになっている。
抜き出すのは2個目のimageで次のようにする。
$ dumpimage -T flat_dt -p 1 -o hoge.dtb image.ub
あとはdtcでテキストにしちゃえばいいだけ。