解包 打包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