KEY:
-
摄像头+
电源:引导程序模式,ADP里则可以使用FASTBOOT模式
-
家+电源:恢复模式
-
正常启动
引导程序正常启动,又有三种方式,按照BCB(Bootloader的
控制块,下节介绍)中的命令分类:
-
命令==“启动恢复”
→启动恢复模式recovery.img。
-
命令==
'update-radio/hboot→更新固件(引导程序)
-
其他→启动的boot.img
恢复涉及到的其他系统及文件
Recovery
工具通过NAND
cache分区上的三个文件和主系统打交道。主系统(包括恢复出厂设置和OTA升级)可以写入recovery所需的命令,读出recovery过程中的LOG和intent。
- /缓存/恢复/命令:
恢复命令,由主系统写入。所有命令如下:
- - send_intent anystring
-写文本recovery.intent
- - update_package =根:路径
-验证安装OTA包文件
- 的- wipe_data
-擦除用户数据 (和缓存),然后重新启动
- - wipe_cache
-擦拭缓存(而不是用户数据 ),然后重新启动
- /缓存/恢复/日志:恢复过程日志,由主系统应将其译为出
- /缓存/恢复/目的:恢复输出的意图
- MISC分区内容的Bootloader控制块 (BCB)存放恢复 bootloader的消息。结构如下:结构 bootloader_message {
[32] 字符 命令
字符
状态[32]; / /未知用途
的char
恢复[1024];
};
-
command可以有以下两个值
“boot-recovery”:标示recovery正在进行,或指示bootloader应该进入recovery
mode
“update-hboot/radio”:指示bootloader更新firmware
-
恢复内容“恢复\ n \ n “ 其中恢复 命令为CACHE :/恢复/命令命令
两种恢复
案例
用户选择“恢复出厂设置”
设置系统将“ - wipe_data”命令写入/缓存/恢复/命令
系统重启,并进入恢复模式(/ sbin目录/恢复)
get_args()
将
“启动恢复”和“ - wipe_data”写入BCB
erase_root()
格式化(擦除)数据分区
erase_root()
格式化(擦除)高速缓存分区
finish_recovery()
擦除BCB
重启系统
升级系统下载
OTA包到/缓存/一些档案名称。
升级系统写入恢复命令“ - update_package = CACHE:一些档案名称。”
重启,并进入恢复模式
get_args()
将“启动恢复”
和
“ - update_package = ...”
写入BCB
install_package()
作升级
finish_recovery()
擦除BCB
*
如果安装包失败**
prompt_and_wait()等待用户操作,选择ALT + S或ALT + W
升级或恢复出厂设置
主()
调用
maybe_install_firmware_update()
如果包里有HBOOT /无线的固件则继续,否则返回
将
“启动恢复”
和“ - wipe_cache”
写入BCB
将
固件映像写入缓存分区
将
“update-radio/hboot”
和“ - wipe_cache”
写入BCB
重启系统
引导程序自身更新固件
引导程序
将“启动恢复”
写入BCB
erase_root()
擦除CACHE分区
清除
BCB
main()中
调用重启()
重启系统
恢复模式流程
/初始化
→init.rc→
/ sbin目录/恢复→
主():recovery.c
- ui_init():ui.c
[UI初始化]
- gr_init():minui / graphics.c
[设置tty0的图形
模式,开放FB0]
- 的ev_init():minui / events.c
打开/ dev /输入/事件*]
- res_create_surface:minui / resource.c
创建后所使用的所有位图的表面,包括图标 ,骨形态发生蛋白]
- 创建
2个线程:进步/ input_thread的[创建进度显示和输入
事件处理程序线程]
- get_args():recovery.c
- get_bootloader_message():bootloader.c的
[:读mtdblock0(杂项分区)为
命令行的第2页]
- 检查,
如果NAND杂项分区的引导信息。如果是的话,请填写ARGC / ARGV。
- 如果
没有,/缓存/恢复/命令的参数,并填写ARGC / ARGV。
- set_bootloader_message():bootloader.c的
[设置引导程序消息回至mtdblock0]
- 分析器
的argv []上面写满
- register_update_commands():commands.c
[注册的所有命令的名字和钩子函数]
- registerCommand():commands.c
- 注册
的名称,钩,类型,饼干的命令。
- 命令,
如:断言,删除,:copy_dir,符号链接,write_raw_image。
- registerFunction():commands.c
- 注册
名称,钩,饼干的功能。
- 。功能,
例如:get_mark,比赛,getprop,file_contains
- install_package():
- translate_root_path():roots.c
“SYSTEM:lib”目录,并把它转化为一个字符串,如
“/系统/ lib”,翻译的updater.zip的路径]
- mzOpenZipArchive():zip.c
开放updater.zip的文件(uncompass)]
- handle_update_package():install.c
- verify_jar_signature():verifier.c
验证签名keys.inc关键的;确认清单和压缩
包的压缩包]
- verifySignature()
[验证签名档:CERT.sf / RSA。]
- digestEntry():verifier.c
CERT.sf文件的SHA-1摘要]
- RSA_verify(公共
关键:keys.inc,的签名:CERT.rsa,CERT.sf文摘“):的libc / rsa.c的
[确认2048位的RSA
SHA-1哈希值与预期的PKCS1.5签名。使用公共密钥解密CERT.rsa的
原SHA消化,然后比较来消化的CERT.sf]
- verifyManifest()
[清单SHA1摘要CERT.sf. 然后做摘要中
MANIFEST.MF。比较他们]
- VerifyArchive将()
中的所有文件update.zip的验证与摘要中列出的
MANIFEST.MF]
- find_update_script():install.c
META-INF/com/google/android/update-script更新脚本]
- handle_update_script():install.c
从脚本文件中读取命令等,并做解析器,执行]
- parseAmendScript():amend.c
调用yyparse()来解析命令]
- exeCommandList():install.c
- exeCommand():execute.c
[调用命令钩子函数]
- 擦除
数据/缓存分区
- prompt_and_wait():recovery.c
等待用户输入:1)重新启动2)update.zip的)擦拭数据]
- ui_key_xxx和
GET ALT + X键
- 1)
什么也不做
- 2)
install_package(SDCARD:update.zip的“的)
- 3)
erase_root()→
format_root_device()DATA / CACHE
- may_install_firmware_update():firmware.c
[remember_firmware_update的()被调用的write_hboot / radio_image
命令,它存储图像高速缓存分区引导程序,并
写update-hboot/radio命令MISC分区为引导程序
的消息,让引导程序更新后重新启动]
- set_bootloader_message()
- write_update_for_bootloader():bootloader.c的
固件映像写入到缓存分区,与update_header,
busyimage和failimage]
- finish_recovery():recovery.c
明确的恢复命令,并准备引导
系统(希望),我们的日志文件复制到缓存以及系统
读,并记录我们被要求返回沟通的任何意图
系统。]
- 重新启动()
恢复模式流程图
以下流程图绘制了系统从启动加载引导程序后的行为流程。
WIPE清除手机的信息就是格式化然后你在刷你一共32元的ROM。
5,擦拭-清除
5-1,擦拭数据/工厂复位-清除内存数据和缓存数据
5-2,擦拭的Dalvik缓存-清除缓存数据+分机分区内数据
5-3,擦除SD:ext分区-只清除分机分区内数据
5-4,擦拭电池统计-清除电池数据
5-5,擦拭旋转设置-清除传感器内设置的数据分区,分区的SD卡-分区SD卡
6-1,分区SD -自动为SD卡分区
6-2,修复SD:转-修复分机分区
6-3,SD:ext2到ext3 -将现在的ext2分区转换为ext3的分区(推荐)
6-4,SD的ext3到ext4 -将ext3的分区转换为ext4的分区(C4卡不推荐,C6卡推荐)想多了解请看下面:
1,重新启动系统-重启
2,USB-MS切换-在恢复 备份- NAND备份
3-2,NAND +分机备份-与非备份(系统和分机分区一同备份)
3-3,NAND恢复-还原(就是还原3-1,3-2的最后一次备份)
3 4,BART备份- BART备份(包括系统和分机分区)
3-5,BART恢复-还原最后一次的BART备份的Nand备份类似于系统的备份而BART则像是PC上鬼的备份。的Nand备份它不会备份分机分区(就是第二分区没有分区的可以借着有这个)所以你的如果APP2SD了那么装在第二分区的程序用的Nand恢复是办不到的BARŢ则可以备份到分机分区用BART恢复则可以恢复整个系统 从sdcard拉链-从SD卡根目录的。拉链ROM刷机包刷机
5,擦拭-清除
5-1,擦拭数据/工厂复位-清除内存数据和缓存数据
5-2,擦拭的Dalvik缓存-清除缓存数据+分机分区内数据
5-3,擦除SD:ext分区-只清除分机分区内数据
5-4,擦拭电池统计-清除电池数据
5-5,擦拭旋转设置-清除传感器内设置的数据,分区的SD卡-分区SD卡
6-1,分区SD -自动为SD卡分区
6-2,修复SD:转-修复分机分区
6-3,SD:ext2到ext3 -将ext2的分区转换为ext3的分区(推荐)
6-4,SD的ext3到ext4 -将ext3的分区转换为ext4的分区(C4卡不推荐,C6卡推荐)
7,其它-其它
7-1,修复apk文件的uid不匹配-修复APK程序
7-2,移动应用程序+ dalv到SD -移动程序和虚拟缓存到SD卡(这个可不是APP2SD)
7-3,将recovery.log到SD -移动刷机日志文件到SD卡(执行此操作后,SD卡根目录会出现一个“recovery.log”文件即为刷机日志文件)
8,关机-关机