Android的恢复模式

来源:互联网 发布:手机蜂窝数据打不开 编辑:程序博客网 时间:2024/05/21 13:31

KEY:


  • 摄像头+ 
            电源:引导程序模式,ADP里则可以使用FASTBOOT模式
           

  • 家+电源:恢复模式
           

  • 正常启动


        引导程序正常启动,又有三种方式,按照BCB(Bootloader的
控制块,下节介绍)中的命令分类:


  • 命令==“启动恢复” 
            →启动恢复模式recovery.img。
           

  • 命令== 
            'update-radio/hboot→更新固件(引导程序)
           

  • 其他→启动的boot.img


恢复涉及到的其他系统及文件

  • CACHE分区文件


 

    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 :/恢复/命令命令
                      

                      

                      

                      


             


两种恢复
案例

  • FACTORY 
            RESET(恢复出厂设置)


 

  • 用户选择“恢复出厂设置”
           
  • 设置系统将“ - wipe_data”命令写入/缓存/恢复/命令
           
  • 系统重启,并进入恢复模式(/ sbin目录/恢复)
           
  • get_args()
            将
            “启动恢复”和“ - wipe_data”写入BCB
           
  • erase_root()
            格式化(擦除)数据分区
           
  • erase_root()
            格式化(擦除)高速缓存分区
           
  • finish_recovery()
            擦除BCB
           
  • 重启系统

    • OTA 
              安装(OTA升级)

  • 升级系统下载
            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 
               明确的恢复命令,并准备引导
              系统(希望),我们的日志文件复制到缓存以及系统
              读,并记录我们被要求返回沟通的任何意图
              系统。]
             
    • 重新启动()

    恢复模式流程图
    以下流程图绘制了系统从启动加载引导程序后的行为流程。

    点击这里打开新的窗口CTRL +鼠标滚轮放大/缩小

                    

     

     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,关机-关机