android恢复出厂设置以及系统升级流程_第1页
android恢复出厂设置以及系统升级流程_第2页
android恢复出厂设置以及系统升级流程_第3页
android恢复出厂设置以及系统升级流程_第4页
android恢复出厂设置以及系统升级流程_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

android恢复出厂设置以及系统升级流程 android恢复出厂设置以及系统升级流程2011-12-06 17:146654人阅读评论(3)收藏举报androidcachethreadnulluisystem/simple/?t5938.html 复制代码恢复出厂设置流程概括:一. 设置模块中进行恢复出厂设置操作,系统一共做了两件事:1. 往 /cache/recovery/command 文件中写入命令字段: 2. 重启系统二. 重启系统会必须进入 recovery 模式进入 recovery 模式的几种方式1. 通过读取 /cache 分区中文件 /cache/recovery/command 内容进入2. 通过按键操作进入 (G1 通过同时按 HOME 和 挂断键)以上两种方式进入都需要 blob的支持三. 所以恢复出厂设置,进入 recovery 模式,必须做以下几件事情:1. blob 必须能从 recovery 分区中装载内核和文件系统2. flash 必须有 cache 分区 和 recovery 分区3. 必须编译提供 recovery.img 烧录到 recovery 分区recovery.img 解析:1. 理解 recovery.img在制作 recovery 镜像之前,我们必须理解什么是 recovery 以及 它有哪些内容,这里省略,文章:<<recovery.img与boot.img简单对比分析>> 对 recovery 做了很好的解释,地址:/bbs/thread-6391-1-1.html2. 制作 recovery.img因为在文件: ./vendor/marvell/littleton/BoardConfig.mk 中有:TARGET_NO_KERNEL := true导致我们目前在编译 cupcake 的时候,默认没有生成 recovery.img,要生成 recovery.img 必须屏蔽 TARGET_NO_KERNEL := true创建目录: vendor/marvell/littleton/recovery/res拷贝编译好的内核到目录:vendor/marvell/littletoncp /tftpboot/zImage vendor/marvell/littleton/kernel如果不创建res目录和拷贝内核将会出现以下错误:No private recovery resources for TARGET_DEVICE littletonmake: * 没有规则可以创建“out/target/product/littleton/kernel”需要的目标“vendor/marvell/littleton/kernel”命令: make recoveryimage 单独生成 recovery.imgout/host/linux-x86/bin/mkbootimg -kernel out/target/product/littleton/kernel -ramdisk out/target/product/littleton/ramdisk-recovery.img -output out/target/product/littleton/recovery.img恢复出厂设置,内核相关部分:2009年 12 月23 日falsh 分区情况0x-0x : Bootloader -1M0x-0x : Kernel -4M 0xx-0x : system -96M 0xx-0x : userdata -48M 0x 0x-0x0f : systembackup -96M 0x0f-0x0fd00000 : massstorage -8M 0x0fd00000-0x0ff00000 : massstorage2 -2M 0x0ff00000-0x : massstorage3 -1M 在目前的内核中我们还没有使用 cache 分区 和 recovery 分区,所以修改内核配置文件:arch/arm/mach-pxa/include/mach/part_table.h把以下分区:0x-0x0f : systembackup -96M 0x0f-0x0fd00000 : massstorage -8M 改为:0x-0x0f : cache -96M 0x0f-0x0fd00000 : recovery -8M 让 android 系统能正常挂载和使用 cache recovery 分区。烧写编译好的 recovery.img 到 recovery 分区;烧写地址已经更新,具体参考文件:48/smartphone/td0901/release/p_w_picpath/readme.txt烧写 cache 分区nanderase -z 0x 0xtftp recovery.imgnandwrite -y 0x 0x <cache.img actual length>烧写 recovery 分区nanderase -z 0xf 0xtftp recovery.imgnandwrite -y 0x 0xf <recovery.img actual length>恢复模式流程分析完成了以上准备工作,当我们按特定的组合键或者恢复出厂设置,那么就会进入 recovery 模式:从 recovery 模式的 init.rc 文件可以看出,它仅仅启动了几个服务 service recovery /sbin/recoveryservice adbd /sbin/adbd recovery以下是 recovery 流程分析,主函数在文件:bootable/recovery/recovery.c int main(int argc, char *argv) . ui_init(); /初始化ui get_args(&argc, &argv); .void ui_init(void) gr_init(); ev_init(); . pthread_create(&t, NULL, progress_thread, NULL); pthread_create(&t, NULL, input_thread, NULL);recovery 模式有简单的交互式界面,它是通过 ui_init(),ev_init()等一些列操作,完成字符ui界面和按键事件等初始化。input_thread 线程里面处理按键事件。函数 get_args 会读取 /cache/recovery/command 文件,并根据命令字段进行相应操作,因为进行恢复出厂设置的时候 /cache/recovery/command 的内容为 -wipe-data所以它会擦除 data 和 cache 分区:erase_root(DATA:)erase_root(CACHE:)分区擦除后,系统重启,然后进入正常开机流程,重新使用 system 分区的内容完成开机初始化,此过程跟我们第一次烧写软件过程一致。如果是按 home 键 和 挂机键开机,那么进入 字符选择界面,函数为:static void prompt_and_wait() char* headers = prepend_title(MENU_HEADERS); for (;) finish_recovery(NULL); ui_reset_progress(); int chosen_item = get_menu_selection(headers, MENU_ITEMS, 0); / device-specific code may take some action here. It may / return one of the core actions handled in the switch / statement below. chosen_item = device_perform_action(chosen_item); switch (chosen_item) case ITEM_REBOOT: /系统重启 return; case ITEM_WIPE_DATA: /擦除数据分区 break; case ITEM_WIPE_CACHE: /擦除 cache 分区 break; case ITEM_APPLY_SDCARD: /通过防止 update.zip 包到 sdcard 根目录实现系统升级 break; 一、应用层流程分析设置模块中恢复出厂设置,不管是否删除SD卡,最终都会执行如下两步:1、 往/cache/recovery/command文件中写入命令字段2、 重启系统,进入recovery模式具体可参考framework/base/core/java/android/os/RecoverySystem.java文件,代码片段如下:在rebootWipeUserData方法中,会调用bootCommand方法,并传入参数-wipe_data命令字段,重启进入recovery模式后,recovery服务会通过读取此参数来擦除data和cache分区,详细流程见下文。 二、恢复模式流程分析重启后,从recovery模式的init.rc文件中可以看到启动recovery服务,具体可参考bootable/recovery/etc/init.rc文件,代码片段如下:recovery服务的主函数在bootable/recovery/recovery.c文件中,main函数的分析如下:ui_init()说明:初始化ui,recovery模式的交互界面get_args(&argc, &argv);说明:读取/cache/recovery/command文件,并根据命令字段进行相应操作,因为恢复出厂设置的时候/cache/recovery/command的内-wipe_data,所以它会擦除data和cache分区,代码片段如下:分区擦除后,系统重启,然后进正常开机流程,重新使用system分区的内容完成开机初始化,代码片段如下:至此,恢复出厂设置流程完毕。=开发经验 recovery.img与boot.img简单对比分析recovery,boot今天对比分析了一下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)和初始化配置文件(p、init.trout.rc、init.rc、init.goldfish.rc、)都不一样。这就是系统没有进入图形界面而进入了类似文本界面,并可以通过简单的组合 键进行恢复的原因。通过查阅相关资料,对android的recovery模式有了一定的了解:Android可以通过Recovery模式,实现恢复出厂设置、OTA升级、patch升级及firmware升级。在关机后,同时按下home+ power键可以进入recovery模式。大部分升级(包括刷机)都可以通过一个SD卡中的updata.zip文件升级包进行傻瓜式升

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论