`
carywei
  • 浏览: 191971 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

recovery流程转载

 
阅读更多
=============================================

恢复出厂设置流程概括:

一. 设置模块中进行恢复出厂设置操作,系统一共做了两件事:

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 做了很好的解释,地址:

http://www.hiapk.com/bbs/thread-6391-1-1.html



2. 制作 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/littleton

cp /tftpboot/zImage20100202 vendor/marvell/littleton/kernel



如果不创建res目录和拷贝内核将会出现以下错误:

No private recovery resources for TARGET_DEVICE littleton

make: *** 没有规则可以创建“out/target/product/littleton/kernel”需要的目标“vendor/marvell/littleton/kernel”



命令: make recoveryimage 单独生成 recovery.img

out/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 分区情况

0x00000000-0x00100000 : /"Bootloader/"                 --1M

0x00100000-0x00500000 : /"Kernel/"                     --4M  0x400000

0x00500000-0x06500000 : /"system/"                     --96M 0x6000000

0x06500000-0x09500000 : /"userdata/"                   --48M 0x3000000   

0x09500000-0x0f500000 : /"systembackup/"               --96M    

0x0f500000-0x0fd00000 : /"massstorage/"                --8M     

0x0fd00000-0x0ff00000 : /"massstorage2/"               --2M       

0x0ff00000-0x10000000 : /"massstorage3/"               --1M  



在目前的内核中我们还没有使用 cache 分区 和 recovery 分区,所以修改内核配置文件:

arch/arm/mach-pxa/include/mach/part_table.h

把以下分区:

0x09500000-0x0f500000 : /"systembackup/"               --96M    

0x0f500000-0x0fd00000 : /"massstorage/"                --8M  

改为:

0x09500000-0x0f500000 : /"cache/"                      --96M    

0x0f500000-0x0fd00000 : /"recovery/"                   --8M     

让 android 系统能正常挂载和使用 cache  recovery 分区。



烧写编译好的 recovery.img 到 recovery 分区;

烧写地址已经更新,具体参考文件:

http://192.168.2.148/smartphone/td0901/release/images/readme.txt

=====================================

烧写 cache 分区

nanderase -z 0x09500000 0x6000000

tftp recovery.img

nandwrite -y 0x80800000 0x09500000 <cache.img actual length>



烧写 recovery 分区

nanderase -z 0xf500000  0x800000

tftp recovery.img

nandwrite -y 0x80800000 0xf500000 <recovery.img actual length>

======================================



恢复模式流程分析

完成了以上准备工作,当我们按特定的组合键或者恢复出厂设置,那么就会进入 recovery 模式:

从 recovery 模式的 init.rc 文件可以看出,它仅仅启动了几个服务 

service recovery /sbin/recovery

service 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;

        }

    }

}

======================================
分享到:
评论

相关推荐

    android recovery运行流程(基于MTK 8217平台)

    Android Recovery运行流程主要涉及系统恢复、更新等功能的执行,它是基于Android系统的紧急恢复程序。MTK(MediaTek)是智能手机和移动设备常用的芯片解决方案提供商,而8217平台则是其产品线中的一款芯片。Recovery...

    android recovery原理讲解

    ### Android Recovery原理详解 #### Recovery概述 Android Recovery模式是Android操作系统的一个重要组成部分,主要用于设备的维护、升级以及恢复。此模式允许用户执行一系列高级任务,比如恢复出厂设置、执行OTA...

    EasyRecovery.zip

    无论你是技术小白还是资深电脑用户,都可以通过其直观的界面和清晰的操作流程,快速上手进行文件恢复。 首先,EasyRecovery的核心功能在于其深度扫描能力。它能够深入硬盘的每个角落,寻找被标记为已删除但实际上并...

    华为通用官方recovery恢复教程(同样适用于第三方recovery刷入)

    ### 华为通用官方Recovery恢复教程 #### 一、背景与目的 随着智能手机功能的日益强大,越来越多的用户选择对自己的设备进行Root操作以获得更高级别的系统控制权。然而,在进行Root操作后,可能会导致华为手机的...

    刷入recovery工具

    "刷入recovery工具"是一款专门用于更新或替换手机Recovery的软件,它简化了操作流程,让用户无需专业知识也能完成刷入工作。网络上通常会有详细的图文教程,指导用户一步步进行。 四、刷入步骤概览 1. 准备工作:...

    自制recovery简易教程

    以上就是自制recovery的基本流程,虽然这个过程可能有些复杂,但是一旦掌握,将极大地增强你对Android设备的掌控力,让你能更自由地定制和优化你的手机系统。请务必谨慎操作,遵循安全指南,避免不必要的风险。

    Recovery解包打包工具_mkboot

    在IT行业中,Recovery是一种特殊的系统模式,用于修复、备份或恢复手机系统。"Recovery解包打包工具_mkboot"是专为一加社区设计的一款工具,它主要用于处理与一加设备Recovery相关的操作,包括对Recovery映像的解包...

    Z5 mini 中文recovery

    "Z5 mini 中文recovery" 是针对中兴努比亚Z5 mini智能手机的一个特殊系统恢复环境,通常称为中文版的Recovery Mode。Recovery Mode是一种特殊的系统状态,用户可以在其中执行一系列高级操作,如安装更新、备份数据、...

    小米6刷入recovery工具

    在这个过程中,我们看到的"小米6一键刷入recovery(需要先解bl锁).bat"文件是一个批处理脚本,它通常包含了一系列自动化命令,帮助用户简化刷入Recovery的流程。这个脚本可能包含了运行ADB(Android Debug Bridge)和...

    Excel Password Recovery 含sn

    4. 用户友好:界面简洁,操作流程直观,适合各种用户群体。 四、使用Excel Password Recovery的步骤 1. 下载并安装“Excel Password Recovery”软件。 2. 打开软件,选择待恢复的Excel文件。 3. 选择合适的恢复...

    如何进入Recovery模式

    安卓手机Recovery模式详解 Recovery模式可以说是安卓手机的高级模式,其功能相当强大。在安卓手机无法格式化SD卡的情况下,进入Recovery模式即可轻松格式化SD卡。另外,再刷机、双wipe等方面均需要进入到该模式下...

    Android Recovery介绍

    下面是 Recovery 模式的流程图: [流程图] Li Shaoyan, April 30, 2010.Android Recovery 模式 Recovery 模式是 Android 系统中的一种特殊模式,用于进行恢复出厂设置、OTA 升级、patch 升级及 firmware 升级。...

    华为手机通用recovery刷入工具

    - **操作流程**:刷入Recovery通常需要进入手机的Fastboot模式,使用USB连接电脑并运行刷入工具。具体步骤应按照工具附带的指南进行,避免误操作。 - **安全检查**:在下载任何工具和ROM包时,务必确保来源可靠,...

    EasyRecovery_Enterprise.rar

    EasyRecovery Enterprise就是这样的一款软件,它无需激活或付费,能够直接对已删除的数据进行恢复,大大简化了用户操作流程,降低了数据恢复的门槛。 EasyRecovery是由Ontrack公司开发的一款专业级数据恢复软件,其...

    htcg14 recovery

    总的来说,"htcg14 recovery"为HTC G14用户提供了一个强大的系统恢复解决方案,尤其适合那些熟悉Android系统和刷机流程的进阶用户。通过自定义Recovery,用户能够更好地管理和维护自己的设备,享受更加个性化的...

    小米助手(刷Recovery工具及小米5recovery.img)最新官方版

    在本压缩包中,包含的是小米助手的最新官方版本及相关刷机资源,特别是针对小米5手机的Recovery系统刷新功能。Recovery是Android系统中的一个重要组成部分,它在手机正常启动之外提供了一个安全模式,用于安装更新、...

    华为,荣耀官方recovery1.0

    【华为,荣耀官方recovery1.0】 在智能手机领域,特别是Android系统中,"recovery"是一个非常重要的概念。华为和荣耀作为知名的Android设备制造商,为用户提供了官方的recovery工具,即“华为,荣耀官方recovery1.0...

    红米Note3全网通一键刷入recovery工具.zip

    【红米Note3全网通一键刷入recovery工具】是一个专为红米Note3全网通版设计的软件包,主要用于更换或更新手机的recovery...对于不熟悉Android系统或刷机流程的用户,建议寻求专业人士的帮助或在安全的环境中进行尝试。

    安卓_Recovery_恢复模式

    在安卓系统中,Recovery模式是一个非常重要的工具,它允许用户执行系统级别的操作,如备份、恢复、安装更新以及修复手机。这篇详细的文章将深入探讨Recovery模式的概念、功能、如何进入以及如何利用它来优化你的安卓...

    一键小米8recovery工具

    小米8 Recovery工具是一款专为小米8手机设计的实用软件,旨在帮助用户轻松刷入第三方Recovery系统。Recovery是Android设备中的一个重要组成部分,它在系统启动时提供了一个特殊的环境,用于执行更新、备份、恢复数据...

Global site tag (gtag.js) - Google Analytics