解包 打包systemimage - jathefo/blog GitHub Wiki
高通在生成软件包的时候会把部分分区的image打碎,就是所谓的sparse,打碎的目的是为了跳过大片的00区域,而使烧写的量变小。这些00区域的偏移量就记录在xml文件中,所以打包工具也是基于这些xml文件来将打碎的文件重新组合成完整的image包。 在高通方案中,被打碎的image包括system、userdata、cache,打包的工具是packsparseimg,命令用法如下:
$packsparseimg -h
Usage of packsparseimg:
-o string
output dir path (default "./")
-t string
image to unsparse: system / cache / userdata (default "system")
-x string
xml file to load (default "./rawprogram_unsparse.xml")
还有其他一些辅助工具img2simg、simg2img,用法都很简单,可以参看其帮助信息。 通过上述工具操作完后生成的image文件可以通过mount挂载到某目录下,这样就可以进入这个目录对image的内容进行增删改查了,然后用make_ext4fs工具重新打包成完整的image文件,烧写到设备中调试。
举个例子:
$packsparseimg -x rawprogram_unsparse_full_flash.xml -o .
将打碎的image文件打包成system.raw
$img2simg system.raw system.img
$simg2img system.img system.img.ext4
通常烧写到设备分区中的image是需要进行格式压缩的,这两个工具可以用来转换格式
$mount -o loop system.img.ext4 /mnt
在/mnt中对system image进行增删改查,然后再重新打包
$sudo make_ext4fs -s -l 3072M -a system system.img /mnt
make_ext4fs工具可以在android代码编译输出目录out/host/linux-x86/下找到
$umount /mnt