image.ubからDeviceTreeの抽出

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でテキストにしちゃえばいいだけ。

write: 2020/07/26/ 00:01:56