Android系统Recovery工作原理之使用update.zip升级过程分析(三)---Android系统的三种启动模式

            Android系统Recovery工作原理之使用update.zip升级过程分析(三)---Android系统的三种启动模式

        

        以下的篇幅开始分析我们在上两个篇幅中生成的update.zip包在具体更新中所经过的过程,并根据源码分析每一部分的工作原理。

一、       系统更新update.zip包的两种方式

    1.  通过上一个文档,我们知道了怎样制作一个update.zip升级包用于升级系统。Android在升级系统时获得update.zip包的方式有两种。一种是离线升级,即手动拷贝升级包到SD卡(或NAND)中,通过settings-->About phone-->System Update-->选择从SD卡升级。另一种是在线升级,即OTA  Install(over  the  air)。用户通过在线下载升级包到本地,然后更新。这种方式下的update.zip包一般被下载到系统的/CACHE分区下。

     2.  无论将升级包放在什么位置,在使用update.zip更新时都会重启并进入Recovery模式,然后启动recovery服务(/sbin/recovery)来安装我们的update.zip包。

    3.  为此,我们必须了解Recovery模式的工作原理以及Android系统重启时怎样进入Recovery工作模式而不是其他模式(如正常模式)。

二、       Android系统中三种启动模式

       首先我们要了解Android系统启动后可能会进入的几种工作模式。先看下图:

                

       由上图可知Android系统启动后可能进入的模式有以下几种:

       (一) MAGIC KEY(组合键):

              即用户在启动后通过按下组合键,进入不同的工作模式,具体有两种:             

             ① camera + power:若用户在启动刚开始按了camera+power组合键则会进入bootloader模式,并可进一步进入fastboot(快速刷机模式)。

        ② home + power :若用户在启动刚开始按了home+power组合键,系统会直接进入Recovery模式。以这种方式进入Recovery模式时系统会进入一个简单的UI(使用了minui)界面,用来提示用户进一步操作。在tcc8800开发板中提供了一下几种选项操作:

                                “reboot system now”

                                “apply update from sdcard”

                                “wipe data/factory reset”

                                “wipe cache partition”

       (二)正常启动:

                 若启动过程中用户没有按下任何组合键,bootloader会读取位于MISC分区的启动控制信息块BCB(Bootloader Control Block)。它是一个结构体,存放着启动命令command。根据不同的命令,系统又 可以进入三种不同的启动模式。我们先看一下这个结构体的定义。

             struct bootloader_message{

                      char command[32];  //存放不同的启动命令

                      char status[32];   //update-radio或update-hboot完成存放执行结果

                      char recovery[1024]; //存放/cache/recovery/command中的命令

             };

         我们先看command可能的值,其他的在后文具体分析。command可能的值有两种,与值为空(即没有命令)一起区分三种启动模式。

         ①command=="boot-recovery"时,系统会进入Recovery模式。Recovery服务会具体根据/cache/recovery/command中的命令执行相应的操作(例如,升级update.zip或擦除cache,data等)。

         ②command=="update-radia"或"update-hboot"时,系统会进入更新firmware(更新bootloader),具体由bootloader完成。

         ③command为空时,即没有任何命令,系统会进入正常的启动,最后进入主系统(main system)。这种是最通常的启动流程。

         Android系统不同的启动模式的进入是在不同的情形下触发的,我们从SD卡中升级我们的update.zip时会进入Recovery模式是其中一种,其他的比如:系统崩溃,或则在命令行输入启动命令式也会进入Recovery或其他的启动模式。

        为了解我们的update.zip包具体是怎样在Recovery模式中更新完成,并重启到主系统的,我们还要分析Android中Recovery模式的工作原理。

     

             下一篇幅开始看具体的Recovery模式工作原理,以及其在更新中的重要作用。



  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Android 4.4.3系统中,可以利用recoveryupdate.zip升级包进行RSA加密及解密,具体步骤如下: 1. 生成RSA公私钥对。可以使用openssl工具生成,命令如下: ``` openssl genrsa -out private_key.pem 2048 openssl rsa -in private_key.pem -pubout -out public_key.pem ``` 这样就生成了一个私钥文件 private_key.pem 和一个公钥文件 public_key.pem。 2. 将公钥文件添加到Android系统中。将 public_key.pem 文件复制到 Android 系统的 /res/keys 目录下。 3. 利用私钥文件对 update.zip 进行签名。使用以下命令对 update.zip 进行签名: ``` openssl dgst -sha1 -sign private_key.pem < update.zip > update.zip.signature ``` 这样就会生成一个签名文件 update.zip.signature。 4. 将签名文件添加到 update.zip 中。使用以下命令将签名文件添加到 update.zip 中: ``` zip -r update_signed.zip update.zip update.zip.signature ``` 这样就生成了一个签名后的升级update_signed.zip。 5. 在recovery中进行升级。将签名后的升级update_signed.zip 放到 SD 卡中,然后进入 recovery,选择 install zip from sdcard,然后选择 update_signed.zip 进行升级。 6. 在recovery中进行解密。如果需要在 recovery 中解密 update_signed.zip,可以使用以下命令: ``` openssl dgst -sha1 -verify /res/keys/public_key.pem -signature META-INF/CERT.RSA META-INF/MANIFEST.MF ``` 这样就可以验证签名,并且解密 update_signed.zip。 请注意,以上步骤仅适用于 Android 4.4.3 系统,其他版本的 Android 系统可能会有所不同。此外,RSA加密算法虽然安全性较高,但是加密解密过程较为耗时,可能会影响系统性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值