当前位置: 代码迷 >> 综合 >> recovery.img与boot.img简单对比分析
  详细解决方案

recovery.img与boot.img简单对比分析

热度:62   发布时间:2024-01-09 22:36:06.0
今天对比分析了一下recovery.img和boot.img的结构,从中粗略知道了Android手机中的恢复模式是怎么回事。
以下是文件结构的对比图:

从中我们知道:

(1)recovery.img其实已经是进入了Linux系统。

(2)recovery.img为了具有恢复系统的能力,比普通的boot.img目录结构中:
       1、多了/res/images目录,在这个目录下的图片都是恢复时我们看到的背景画面。
       2、多了/sbin/recovery二进制程序,这个就是恢复用的程序。
       3、/sbin/adbd不一样,应该和恢复有关。

(3)Android系统中的初始化程序(init)和初始化配置文件(default.prop、init.trout.rc、init.rc、init.goldfish.rc、)都不一样。这就是系统没有进入图形界面而进入了类似文本界面,并可以通过简单的组合键进行恢复的原因。
通过查阅相关资料,对android的recovery模式有了一定的了解:
Android 可以通过Recovery 模式,实现恢复出厂设置、OTA 升级、patch 升级及firmware 升级。在关机后,同时按下home + power 键可以进入recovery 模式。
大部分升级(包括刷机)都可以通过一个SD卡中的"updata.zip"文件升级包进行傻瓜式升级(步骤简单的升级)。而这一过程就是在系统进入Recovery 模式后,通过升级程序运行升级包中“META-INF/com/google/android/update-script 脚本来执行各种不同的自定义升级,脚本中是一组recovery 模式下系统能识别的UI 控制命令和文件系统操作命令,例如write_raw_image (烧写FLASH 分区)、copy_dir (复制目录)等等。
具体的Recovery 模式执行过程,有空看了源码再细说。

本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/tekkamanitachi/archive/2009/06/24/4295703.aspx
另外:
如何解包分析Gphone的文件系统
为了要分析G1的文件系统,用实际的手机上的文件系统来分析最有说服力。所以如何来提取的解包分析Gphone的文件系统呢?通过网上查找资料,很容易得到解决方法!
一、提取镜像文件。
要提取镜像文件,你同手机的超级终端连接必须得有root权限。也就是你用"adb shell"登录手机后的提示符为“#”,如果没有,你就运行su命令来获取。但是没有刷过机的一般没有这个权限。我的G1一到手就是刷上安卓网的2.2系统的,所以本上就有Root权限。
先在G1上插入SD卡,然后把G1和电脑通过USB相连。下载SDK,解包后,通过shell在tools目录下运行:
sudo ./adb kill-server
sudo ./adb shell
* daemon not running. starting it now *
* daemon started successfully *
# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00040000 00020000 "misc"
mtd1: 00500000 00020000 "recovery"
mtd2: 00280000 00020000 "boot"
mtd3: 05a00000 00020000 "system"
mtd4: 01e00000 00020000 "cache"
mtd5: 059c0000 00020000 "userdata"
mtd6: 10000000 00020000 "msm_nand"
# cat /dev/mtd/mtd1 > /sdcard/mtd1.img
# cat /dev/mtd/mtd2 > /sdcard/mtd2.img
这样 recovery和boot镜像都在你的SD卡上了。
二、释放镜像中的文件
以上提取的两个文件,其实内容是差不多的,但是 recovery是在boot被破坏时恢复系统用的,所以进入 recovery不会进入GUI,而是一个字符的恢复模式,并且比boot多了恢复时用的程序,这些对比我会在以后写出。因为这两个镜像差不多,所以解压也是一样。释放镜像要使用以下小工具:split_bootimg.pl 。将镜像和以上四个工具放在同一个文件夹下,然后解压。
解压方法:
./split_bootimg.pl boot.img
mkdir ramdisk
cd ramdisk
gzip -dc ../boot.img-ramdisk.gz | cpio -i
cd ..
这样,在这个文件夹下,你会看到
ramdisk文件夹,就是释放出的启动用的ramdisk。
boot.img-kernel,就是系统的Linux内核了。
明天对比recovery和boot镜像的不同。
后天介绍镜像的制作和如何刷机。
本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/tekkamanitachi/archive/2009/06/23/4292479.aspx
  相关解决方案