android镜像解压资源文件

工具准备

  1. unpackbootimg
  2. resource-tool
  3. dtc
  4. rk 烧录工具

编译 unpackbootimg

源码

https://github.com/huangzhenzeng/android-unpackbootimg

编译

只需要在 linux(需安装 gcc,make,一般是标配)或 windows(需要安装 mingw)的命令行执行 make,即可产生可执行文件 mkbootimg、unpackbootimg

resource-tool 工具

一般编译镜像后,将产生这个工具,目录为:
u-boot/tools/resource_tool/resource_tool

dtc 工具

一般编译镜像后,将产生这个工具,目录为:
kernel/scripts/dtc/dtc

rk 烧录工具

需到如下地址
https://www.t-firefly.com/doc/download/54.html
下载《RKDevTool》

分离镜像

window 下,打开“RKDevTool”,选中“高级”,然后导入固件,选择解压即可,如下图:

最终 output 目录,输出各个子分区,如下图:

解压 boot.img 镜像

boot 格式分析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
因为boot.img的格式比较简单,它主要分为三大块(有的可能有四块)
+—————–+
| boot header | 1 page
+—————–+
| kernel | n pages
+—————–+
| ramdisk | m pages
+—————–+
| second stage | o pages
+—————–+
n = (kernel_size + page_size – 1) / page_size
m = (ramdisk_size + page_size – 1) / page_size
o = (second_size + page_size – 1) / page_size
0. all entities are page_size aligned in flash
1. kernel and ramdisk are required (size != 0)
2. second is optional (second_size == 0 -> no second)

linux 下输入命令:
mkdir output
unpackbootimg -I boot.img -O ./output
生成文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
├── boot.img-base (mkbootimg base参数)
├── boot.img-board
├── boot.img-cmdline (mkbootimg cmdline参数)
├── boot.img-dtb
├── boot.img-hash
├── boot.img-kerneloff
├── boot.img-oslevel
├── boot.img-osversion
├── boot.img-pagesize (mkbootimg pagesize参数)
├── boot.img-ramdisk.gz (根文件系统打包文件)
├── boot.img-ramdiskoff
├── boot.img-second (资源文件)
├── boot.img-secondoff
├── boot.img-tagsoff
├── boot.img-zImage (内核文件)

解压 boot.img-second 资源

执行命令:
mkdir out
./resource_tool --verbose --unpack --image=boot.img-second

生成文件如下:

1
2
3
├── logo.bmp
├── logo_kernel.bmp
└── rk-kernel.dtb

dtb 转 dts

执行命令:
./dtc -I dtb -O dts out/rk-kernel.dtb -o tmp.dts
生成 tmp.dts 文件,

最终通过 gedit 或文本编辑查看