免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 918 | 回复: 0
打印 上一主题 下一主题

Android recovery 系统 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:41 |只看该作者 |倒序浏览
1.Recovery 简介
Android 利用Recovery 模式,进行恢复出厂设置,OTA 升级,patch 升级及firmware 升级。

升级一般通过运行升级包中的META-INF/com/google/android/update-script 脚本来执行自定义升级,脚本中是一组recovery 系统能识别的UI 控制,文件系统操作命令,例如write_raw_image (写FLASH 分区),copy_dir (复制目录)。该包一般被下载至SDCARD 和CACHE 分区下。

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

2.启动模式
(1)bootloader 模式(正常启动模式)
 (a)command == 'boot-recovery' → 启动recovery.img 进入recovery 模式
 (b)command == 'update-radio/hboot' → 更新firmware (bootloader)
 (c)其他 → 启动boot.img

(2)recovery 模式

3.Recovery涉及到的其他系统及文件
(1)CACHE 分区文件
/cache/recovery/command : recovery 命令,由android主系统写入。
所有命令如下:
--send_intent=anystring - write the text out to recovery.intent
--update_package=root:path - verify install an OTA package file
--wipe_data - erase user data (and cache), then reboot
--wipe_cache - wipe cache (but not user data), then reboot

/cache/recovery/log : recovery 过程日志,由android主系统读出

/cache/recovery/intent : recovery 输出的 intent

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

(2)MISC 分区内容
Bootloader Control Block (BCB) 存放 recovery bootloader message 。结构如下:
struct bootloader_message {
char command[32];
char status[32]; // 未知用途
char recovery[1024];
};
command 有以下两个值:
boot-recovery:标示 recovery 正在进行,或指示 bootloader 应该进入 recovery mode
update-hboot/radio:指示 bootloader 更新 firmware

recovery 内容为:
“recovery\n
<recovery command>\n
<recovery command> ”
其中 recovery command 为 CACHE:/recovery/command 命令。

========================================================================
1.FACTORY RESET (恢复出厂设置)
(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)重启系统

2.OTA INSTALL ( OTA 升级)
(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() 作升级
(7)finish_recovery() 擦除 BCB
(8)** 如果安装包失败 ** prompt_and_wait() 等待用户操作,选择 ALT+S 或 ALT+W 升级或恢复出厂设置
(9)main() 调用 maybe_install_firmware_update()
a.如果包里有 hboot/radio 的 firmware 则继续,否则返回
b.将 "boot-recovery" 和 "--wipe_cache" 写入 BCB
c.将 firmware image 写入 cache 分区
d.将 "update-radio/hboot" 和 "--wipe_cache" 写入 BCB
e.重启系统
f.bootloader 自身更新 firmware
g.bootloader 将 "boot-recovery" 写入 BCB
h.erase_root() 擦除 CACHE 分区
i.清除 BCB
(10)main() 调用 reboot() 重启系统

3.流程图



4.参考:
http://blogold.chinaunix.net/u/14459/showart_1911144.html




您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP