Android Recovery模式

806阅读 0评论2012-03-08 yuzaipiaofei
分类:

Android Recovery模式

(muddogxp 原创,转载请注明)


Recovery简介

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

升级一般通过运行升级包中的META-INF/com/google/android/update-script脚本来执行自定义升级,脚本中是一组recovery系统能识别的UI控制,文件系统操作命令,例如write_raw_image(写FLASH分区),copy_dir(复制目录)。该包一般被下载至SDCARDCACHE分区下。如果对该包内容感兴趣,可以从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正常启动,又有三种方式,按照BCBBootloader Control Block, 下节介绍)中的command分类:

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


两种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+SALT+W 升级或恢复出厂设置

  8. main() 调用 maybe_install_firmware_update()

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

    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后的行为流程。







上一篇:ARM11硬件编解码例程
下一篇:Build-in initramfs