26
2017
09

mtk平台dump系统分区

声明

郑重声明:博文为原创内容,可以转载或引用,但须在明显位置标明原文作者和出处,未经同意不得擅自修改本文内容!博客地址:http://blog.csdn.net/luzhenrong45

1. 为什么要dump Android分区?

一般来讲,Android设备可以正常开机情况下,我们可以通过各种方式和手段访问Android各个分区内容,比如通过adb获取cache分区中recovery目录下的OTA升级日志等。但有时候,遇到设备无法开机的情况,或者需要将设备中的分区内容与刷机镜像进行比对等情况,就需要使用工具将设备中的分区内容dump出来了。在以前写的一篇博文《OTA升级失败排查》《rkflashkit的安装与使用》中有详细介绍过Rockchip平台下是如何将Android设备中 的各个分区导出来的。

最近在工作中,也遇到同样的需求,需要将一台OTA失败后开不了机的设备cache分区导出来(获取升级日志)。与之前不同的是,这台设备是mtk平台(MediaTek,即台湾联发科,全球著名IC设计厂商)的。

下面以CACHE分区为例,记录一下mtk平台导出系统分区的方法。

2. mtk平台如何将Android分区dump出来?

导出系统分区,一般需要利用厂商提供的flash下载工具,比如Rockchip平台是用rkflashkit,而对于mtk平台,厂商则提供了Flash_Tool工具。打开Flash_Tool工具,默认界面显示的是下载界面,即刷机界面。
mtk_download

这里多说几句,mtk平台的刷机步骤相对简单,在Scatter-loading File 这一栏选中编译出来的分区表文件(out产品编译目录),即MTxxx_Android_scatter.txt文件,就自动将Android各个分区的在flash中的起始地址和结束地址就分配好了。xxx的名字一般和mtk芯片的名字是一致的,比如mtk 6580的芯片平台,对应的分区表文件为:MT6580_Android_scatter.txt。

选好MTxxx_Android_scatter.txt文件后,点击Download按钮,接着让设备进入关机状态,FlashTool就会自动识别,开始将镜像烧写到设备中。

在MTxxx_Android_scatter.txt中,可以详尽地知道,各个分区的的“规划”情况。类似如下图所示:

比如cache分区,从描述可以明确知道,cache分区要下载的镜像为cache.img, 以ext4文件系统的格式挂载到系统中,在flash中的起始物理地址为:0xcb000000,分配的大小为:0x10000000(即268435456/1024/1024=256MB)….

言归正传,现在要反向将设备中的cache分区导出来,一般需要以下几个步骤:

  1. FlashTool切换到“ReadBack”模式,即读取flash模式

  2. 新增一个导出项,设置保存的文件名和存放位置,这里简单取名为cache.img,存放在桌面上

  3. 设置cache分区在整块flash中的物理起始位置和分区大小。其中,物理位置和分区大小的数值,可以从上面介绍的MTxxx_Android_scatter.txt分区表中得到。

  4. 点击ReadBack按键,和刷机步骤一样,让设备进入关机即可将设备中指定的flash块dump出来。

3. 旧事重提

将dump出来的cache.img放到linux环境下,创建一个目录(比如cache),将cache.img挂载到cache_dir

sudo mount -t ext4 cache.img cache/

sudo chmod -R 775 cache/

即可访问cache分区里面的内容:

cache_dir

其中, /cache/recovery/last_log 就是整个OTA升级的过程日志,通过该日志便可排查OTA的相关问题.

上一篇:Gson纯Json解析 下一篇:Jquery调用打印机打印(包含去除页眉页脚)