目录

一、从设备导出分区的方法

二、从pac包中提取img镜像

三、判断img镜像类型

四、sparse格式转为raw格式

五、解包super.img

六、解析出raw格式镜像(以system_a.img为例)


下面来详细分析

一、从设备导出分区的方法

以data分区为类,其它分区(如vendor,system,cache等)类似,当出现data分区引起的无法开机、开机定屏等问题时,按以下方法把data分区导出来:
1、手机如果发生黑屏和开机定屏等,直接掉电,不要重启手机
2、打开ResearchDownload工具,load一个对应项目的PAC包,把下载项全部取消,只保留FDL1和FDL2,如下图一样;

img镜像 img镜像解包_解包

3、勾选”Active Read Flash”, 然后按下图所示填写, File里的路径和文件名随你自己定义,size填实际要读取的data分区十六进制大小,单位是字节,本例是0x80000000;如下图所示

img镜像 img镜像解包_img镜像_02

4、再按正常烧录步骤来工具就可以开始镜像读取了;
5、烧录完即可从路径中拿到回读的镜像文件。

二、从pac包中提取img镜像

1、选择ResearchDownload工具的Load Package按钮,在弹出的对话框中选择要提取镜像的pac包

img镜像 img镜像解包_img镜像_03

2、打开Download Settings按钮,取得列表框中FileName项对应的目录;

img镜像 img镜像解包_linux_04

3、windows文件浏览器中找到该目录,目录里面的文件就是要提取的img文件,把需要提取的img文件拷贝出来;

img镜像 img镜像解包_img镜像_05

注意:如过super.img在ResearchDownload中显示后缀为super.img.flag,则目录下就找不到super.img,需要换较低版本的ResearchDownload加载pac包,再重复上述操作。

如果是高版本,可以将bin/BinPack.ini 修改 MaxDataLength = 0  LoadPolicy = 0

三、判断img镜像类型

在pac包里面提取出来的img镜像文件,如userdata.img,system.img,super.img,有可能是sparse格式或raw格式,如果是sparse格式要先转成raw格式才能被读取;

通过file命令来判断其格式,在linux下面执行如下命令(以system.img)为例:

1、#file system.img
 -->system.img: data  //如果显示是data,则为sparse格式

 2、#file system.img  //如果显示是类似下面的,则已经是raw格式
 -->system.img: Linux rev 1.0 ext4 filesystem data,UUID=da594c53-9beb-f85c-85c5-cedf76546f7a, volume name "system" (extents) (large files)

四、sparse格式转为raw格式

如果ext4的img镜像是sparse格式,要先转换为raw格式(如果已经是raw格式可以直接跳过这一步):
通过simg2img工具转换,在windows和linux都有相应的版本,在命令行中执行如下命令:
#simg2img  <sparse_image_file>  <raw_image_file>
执行完之后,sparse格式的sparse_image_file 就被转换为raw格式的ext4镜像文件raw_image_file。

备注:Android源码目录sytem/core/libsparse下也有simg2img源码,可使用make simg2img指令编译,生成路径为out/host/linux-x86/bin/simg2img ,如果使用simg2img指令提示Bad magic或Invalid sparse file等信息,如下图所示,则可能说明该img不是sparse格式,可能已经是raw格式的。继续执行后续动作即可。---主要依赖out/host/linux-x86/bin/simg2img和out/host/linux-x86/lib64文件夹下面的so库文件。

img镜像 img镜像解包_解包_06

五、解包super.img
 

super的解包需要工具lpunpack,但是默认没有编译,源码目录位于:system/extras/partition_tools/,直接 make lpunpack 之后会生成out/host/linux-86/lpunpack

1、创建解包临时目录super_temp

2、解包super.img时必须将super.img转换成raw格式,否则会报如下错误

img镜像 img镜像解包_linux_07

3、解包super_raw.img到super_temp,使用指令lpunpack super_raw.img super_temp/

img镜像 img镜像解包_重启_08


解包后的内容如下:

img镜像 img镜像解包_解包_09


img镜像 img镜像解包_重启_10


从上面图片可以看到super解包出来的img是raw格式。

六、解析出raw格式镜像(以system_a.img为例)
 

1、在windows通过ext4-exactor解压(以system_a.img为例子)

工具下载地址:

  1) 在windows上,把附件中的ext4-exactor.rar解压到d:\盘,解压成ext4-exactor文件夹;

  2) 把system_a.img拷进ext4-exactor文件夹,并在ext4-exactor文件夹中新建一个system文件夹;

  3) 打开cmd 终端,然后在终端输入:ext4-exactor.exe  system_a.img  system  回车 

img镜像 img镜像解包_img镜像_11

命令执行完之后,system_a.img镜像中的文件就已经解压在system目录中,如下图:

img镜像 img镜像解包_解包_12