Android手机FOTA升级的大概流程介绍

本文内容转载自FOTA升级流程以及FOTA相关知识总结两篇文章,有需要可去原文查看。

Android设备的系统升级有两种方式:

(1)下载更新包到手机后,手动安装,即所谓“卡刷包”的形式更新;

(2) 通过 Over-the-air(OTA)的方式更新系统,简称为FOTA(Firmware Over The Air)。FOTA升级有两种方式,一种是Full update,即将整个IMG置于升级包中,然后将升级包直接拷贝到系统;一种是Increamental update,即通过增量式的差分包,只是将系统更新的部分打包,然后以打补丁的形式应用到系统。

Android系统分区

在介绍FOTA升级流程之前,先来看看Android系统的分区。一般,Android系统有如下几个分区(不同厂商、设备可能有差异):

  • /boot:用于系统启动的分区,包括Linux系统内核和最小的系统文件。它负责安装系统和其他分区,并加载system分区的代码。没有该分区,手机是无法正常启动的;
  • /system:该分区包含了出了 kernel/ramdisk之外的系统应用程序和库文件。正常操作情况下,该分区是只读状态, 其内容仅在OTA更新期间更改;
  • /recovery:用于系统升级打补丁,包含了一个完整的Linux操作系统和一个特殊的recovery包。FOTA升级时,下载完更新包后,进入recovery模式,recovery程序会读更新包,然后将各个patch应用到各个分区;
  • /misc:升级时,recovery用于存储相关信息的小分区
  • /data:主要包含了用户的数据,如联系人、短信、设置以及安装的应用。清除该分区等同于将手机重置,OTA不会影响该分区;
  • /cache:应用使用的临时储存区域,访问该区域需要特殊权限,同时要用于储存下载的FOTA包。其他程序使用这个空间,期望文件可以随时消失。某些OTA软件包安装可能会导致此分区被完全擦除。

FOTA升级流程

  • 手机会定期检测是否有更新(也可手动检测),并通知用户有新版本可用。
  • 将安装包下载到cache分区,若cache分区不够,下载到data分区(这时候要注意是否有写入和删除权限),并根据system/etc/security/otacerts.zip的证书验证其加密签名。系统提示用户安装更新。
  • 系统重启到recovery模式,运行的是recovery分区中的系统内核。而不是boot中的系统。
  • init进程通过执行init.rc 脚本:service recovery /sbin/recovery 启动recovery程序
  • recovery首先校验下载的安装包是否与res/keys(ramdisk)中的公匙相匹配。
  • recovery根据脚本解析安装包,然后将修改分别更新到对应的分区中,在system 分区中包含了用于更新recovery分区的内容。
  • 系统正常启动:启动更新后的boot,system分区。启动时检测是否对recovery分区有更新,若有差异,则更新到recovery分区(这里也是为什么修改了recovery的代码后,需要更新完,且在下个更新中才能得到验证)
  • 设备通知服务器更新完成。

OTA包的制作可去FOTA相关知识总结查看。

©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页