(三)android升级--系统升级方法和启动模式

1、系统更新的两种方法

(1)从文档一我们知道了怎么去制作android升级所需要的升级包,当然升级包做好后,我们怎么去拿到这个升级包,这里有两种方法能拿到。第一,就是通过离线升级,也就是把制作好的升级包放到TF卡或SD卡中,然后选择它即可;第二,就是通过在线升级,也就是我们所说的OTA升级,通过从服务器在线下载升级包到本地,然后更新,这种方式下载的升级包一般会放在我们的cache分区。

(2)选择升级包后,android系统都会重启并进入recovery模式,然后通过init.rc脚本文件启动recovery(/sbin/recovery)服务来更新我们的系统

(3)所以这里我们必须了解recovery的工作原理,也就是说在选择升级包后,系统是怎么进入到recovery工作模式的

2、android系统的启动模式

(1)android系统启动模式流程图如下图所示:


(2)几种模式介绍

1、magic key

按下开发板快速刷机键,不同开发板的操作有点差别,在我们按下我们板子的快速刷机建后,系统会进入到recovery模式,这时会呈现出一个简单的UI,来提示用户要进行什么操作。比如: “reboot system now”,“wipe data/factory reset”等操作。

2、正常启动

若启动过程中用户没有按下任何按键,bootloader会先读取MISC分区中的启动信息控制块BCB,它是一个存放着command命令的结构体,要是不存放这么一个分区的话,系统会去读取临时创建出来的command文件中的命令,根据不同的命令,系统可以响应不同的操作。下面是BCB控制快重要的结构体:

           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卡中升级我们的升级包时会进入recovery模式是其中一种,其他的比如:系统崩溃,掉电,或则在命令行输入启动命令也会进入recovery模式或其他的启动模式。

为了解我们的升级包具体是怎样在recovery模式中更新完成,并重启到正常系统的,我们还要分析Android中recovery模式的工作原理。



你可能感兴趣的:(android升级,ota)