当前位置:操作系统 > 安卓/Android >>

Android 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
G1中的三种启动模式
        MAGIC KEY:

 

camera +
        power:bootloader模式,ADP里则可以使用fastboot模式
       

home + power:recovery模式
       

正常启动


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

 

command == 'boot-recovery'
        → 启动recovery.img。recovery模式
       

command ==
        'update-radio/hboot' → 更新firmware(bootloader)
       

其他 → 启动boot.img


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


CACHE分区文件


 

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

/cache/recovery/command:
                recovery命令,由主系统写入。所有命令如下:
               
--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过程日志,由主系统读出
               
/cache/recovery/intent:recovery输出的intent
       
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
               
\n
               

               
其中recovery
                command为CACHE:/recovery/command命令
       

 

两种Recovery
Case


FACTORY
        RESET(恢复出厂设置)


 

用户选择“恢复出厂设置”
       
设置系统将"--wipe_data"命令写入/cache/recovery/command
       
系统重启,并进入recover模式(/sbin/recovery)
       
get_args()
        将
        "boot-recovery"和"--wipe_data"写入BCB
       
erase_root()
        格式化(擦除)DATA分区
       
erase_root()
        格式化(擦除)CACHE分区
       
finish_recovery()
        擦除BCB
       
重启系统


OTA
        INSTALL(OTA升级)

 

升级系统下载
        OTA包到/cache/some-filename.zip
       
升级系统写入recovery命令"--update_package=CACHE:some-filename.zip"
       
重启,并进入recovery模式
       
get_args()
        将"boot-recovery"
        和
        "--update_package=..."
        写入BCB
       
install_package()
        作升级
     &

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,