ファイルタイプの確認
$ file vendor_boot.img
vendor_boot.img: data
$ file vendor_boot-debug.img
vendor_boot-debug.img: data
unpack_bootimgの使用方法
$ ./unpack_bootimg -h
usage: unpack_bootimg [-h] --boot_img BOOT_IMG [--out OUT] [--format {info,mkbootimg}] [-0]
オプション:
-h, --help ヘルプ表示
--boot_img BOOT_IMG 対象イメージパス
--out OUT 出力ディレクトリ
--format {info,mkbootimg}
-0, --null null区切りの引数出力
ベンダーブートイメージの展開
bin$ ./unpack_bootimg --boot_img ../vendor_boot.img --out ../vendor_boot
出力内容例
boot magic: VNDRBOOT
kernel load address: 0x00008000
ramdisk load address: 0x01000000
vendor ramdisk size: 8479036
展開後のファイル構造
vendor_boot$ ls
bootconfig dtb vendor_ramdisk vendor_ramdisk00
ファイル形式の確認
vendor_boot$ file *
bootconfig: ASCII text
dtb: Device Tree Blob
vendor_ramdisk: LZ4 compressed data
LZ4圧縮の解除
# 解凍コマンド
lz4 -d vendor_ramdisk vendor_ramdisk.cpio
# 実行例
vendor_boot$ lz4 -d vendor_ramdisk vendor_ramdisk.cpio
vendor_ramdisk: 28476928 bytes decoded
CPIOアーカイブの展開
vendor_boot$ mkdir vendor_boot_out
vendor_boot$ cd vendor_boot_out/
vendor_boot_out$ cpio -idmv < ../vendor_ramdisk.cpio
展開後のディレクトリ構造
vendor_boot_out$ tree
.
├── first_stage_ramdisk
│ ├── fstab.default
│ └── fstab.emmc
└── lib
└── modules
├── altmode-glink.ko
├── arm_smmu.ko
デバッグイメージの解析
vendor_boot-debug-out$ tree
.
├── adb_debug.prop
├── force_debuggable
└── userdebug_plat_sepolicy.cil
WSLでのlz4インストール問題
# 通常のインストール失敗
sudo apt-get install lz4
E: Package 'lz4' has no installation candidate
# ソースからのビルド
git clone https://github.com/lz4/lz4
make && sudo make install
ツールの入手場所
# Androidビルド出力ディレクトリ
out/host/linux-x86/bin/unpack_bootimg
# 使用例
./unpack_bootimg -h
ディレクトリ構成
unpack$ tree -L 1
.
├── bin/
├── lz4-dev/
├── vendor_boot/
├── vendor_boot-debug/
└── *.img