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平台的刷机步骤相对简单,在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分区导出来,一般需要以下几个步骤:
FlashTool切换到“ReadBack”模式,即读取flash模式
新增一个导出项,设置保存的文件名和存放位置,这里简单取名为cache.img,存放在桌面上
设置cache分区在整块flash中的物理起始位置和分区大小。其中,物理位置和分区大小的数值,可以从上面介绍的MTxxx_Android_scatter.txt分区表中得到。
点击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/
1
2
3
即可访问cache分区里面的内容:
其中, /cache/recovery/last_log 就是整个OTA升级的过程日志,通过该日志便可排查OTA的相关问题.