【转】Android Recovery模式

时间:2016-01-07 11:45:10   收藏:0   阅读:170

原文网址:http://leox.iteye.com/blog/975303

 

 

(muddogxp 原创,转载请注明)

Recovery简介

Android利用Recovery模式,进行恢复出厂设置,OTA升级,patch升级及firmware升级。

升级一般通过运行升级包中的META-INF/com/google/android/update-script脚本来执行自定义升级,脚本中是一组recovery系统能识别的UI控制,文件系统操作命令,例如write_raw_image(写FLASH分区),copy_dir(复制目录)。该包一般被下载至SDCARD和CACHE分区下。如果对该包内容感兴趣,可以从http://forum.xda-developers.com/showthread.php?t=442480下载JF升级包来看看。

升级中还涉及到包的数字签名,签名方式和普通JAR文件签名差不错。公钥会被硬编译入recovery,编译时生成在:out/target/product/XX/obj/PACKAGING/ota_keys_inc_intermediates/keys.inc

G1中的三种启动模式

MAGIC KEY:

Bootloader正常启动,又有三种方式,按照BCB(Bootloader Control Block, 下节介绍)中的command分类:

Recovery涉及到的其他系统及文件

Recovery 工具通过NAND cache分区上的三个文件和主系统打交道。主系统(包括恢复出厂设置和OTA升级)可以写入recovery所需的命令,读出recovery过程中的LOG和intent。

 

两种Recovery Case

  1. 用户选择“恢复出厂设置”

  2. 设置系统将"--wipe_data"命令写入/cache/recovery/command

  3. 系统重启,并进入recover模式(/sbin/recovery)

  4. get_args() 将 "boot-recovery"和"--wipe_data"写入BCB

  5. erase_root() 格式化(擦除)DATA分区

  6. erase_root() 格式化(擦除)CACHE分区

  7. finish_recovery() 擦除BCB

  8. 重启系统

 

  1. 升级系统下载 OTA包到/cache/some-filename.zip

  2. 升级系统写入recovery命令"--update_package=CACHE:some-filename.zip"

  3. 重启,并进入recovery模式

  4. get_args() 将"boot-recovery" 和 "--update_package=..." 写入BCB

  5. install_package() 作升级

  6. finish_recovery() 擦除 BCB

  7. ** 如果安装包失败 ** prompt_and_wait() 等待用户操作,选择ALT+S或ALT+W 升级或恢复出厂设置

  8. main() 调用 maybe_install_firmware_update()

    1. 如果包里有hboot/radio的firmware则继续,否则返回

    2. 将 "boot-recovery" 和 "--wipe_cache" 写入BCB

    3. 将 firmware image写入cache分区

    4. 将 "update-radio/hboot" 和 "--wipe_cache" 写入BCB

    5. 重启系统

    6. bootloader自身更新firmware

    7. bootloader 将 "boot-recovery" 写入BCB

    8. erase_root() 擦除CACHE分区

    9. 清除 BCB

  9. main() 调用 reboot() 重启系统

 

Recovery模式流程

 

/init → init.rc → /sbin/recovery →

main():recovery.c

 

 

Recovery模式流程图

以下流程图绘制了系统从启动加载bootloader后的行为流程。

没有床,见blog吧~

 

实际使用的例子:

 

adb shell "echo \"send_intent=xxx\" > /cache/recovery/command"

adb shell "echo \"--update_package=SDCARD:update.zip\" >> /cache/recovery/command"

adb shell sync

adb reboot recovery

原文:http://www.cnblogs.com/wi100sh/p/5109149.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!