系统升级系列一

系统升级概览

Posted by Cheson on December 11, 2018

概述

系统升级是一块独立、完整又庞大的模块,其中涉及了下到uboot,上到服务器的知识点,整个系列中我会讲述到android原生系统的升级方式和X公司在原生基础上定制的升级方式,其中包含了我在工作中接触到的技术细节,修改过的需求和问题以及自己对这个模块的设计理解。在这之前有必要向未接触过此模块的读者先介绍下系统升级的概览,先知系统升级做了什么事,然后才能去看懂它是怎么去做的,这也是我一贯写技术博客所坚持的方式。

OTA

什么是OTA,我们先从一张图来看下它的业务模型
OTA业务模型
而OTA业务的官方解释我们参考百度百科就可以了

OTA(Over-the-Air Technology)空中下载技术。是通过移动通信(GSM或CDMA)的空中接口对SIM卡数据及应用进行远程管理的技术。空中接口可以采用WAP、GPRS、CDMA1X及短消息技术。OTA技术的应用,使得移动通信不仅可以提供语音和数据服务,而且还能提供新业务下载。

对OTA技术的需求最早出现在2000年的日本。移动用户迅猛增长、对新兴通信技术和手机的要求也越来越高,新推出的手机更加智能化和多媒体化,往往配置了先进的处理器芯片、安装了网络浏览器和媒体播放器等各种应用软件,有的还配备了摄像头等附属设备。这样的手机尽管功能更丰富,但比那些仅有通话功能的手机也更容易出现问题。手机也会像PC一样死机或者丢失内部数据,甚至还面临着手机病毒的威胁,按日本相关法规厂商也只能被迫对这些出现了功能故障的手机进行召回,增加了额外的成本。有什么方式能帮助厂商方便地更新手机系统软件而不需要再召回问题手机呢?空中下载技术OTA由于其突破性的理念应运而生,它可以通过移动通信(GSM或CDMA)网络的空中接口对移动数据及应用进行远程管理,而空中接口可以采用WAP、GPRS、CDMA1X以及广为普及的短消息(SMS)技术,这样手机系统更新就可以通过无线下载方式来进行,就像PC通过互联网下载软件更新一样方便。

一言以盖之:移动终端通过无线技术向服务器请求更新升级,服务器应答并提供更新内容,移动终端下载后自行安装。

总结了下OTA业务的通用流程如下图

OTA通用流程

FOTA

在做移动终端的公司待着我们通常还会听到另一个名词叫FOTA,同样看下FOTA的官方名片

FOTA(Firmware Over-The-Air)移动终端的空中下载软件升级,指通过云端升级技术,为具有连网功能的设备:例如手机、平板电脑、便携式媒体播放器、移动互联网设备等提供固件升级服务,用户使用网络以按需、易扩展的方式获取智能终端系统升级包,并通过FOTA进行云端升级,完成系统修复和优化。

FOTA的本质是固件升级,包括驱动、系统、功能、应用等的升级,和硬件没有直接关系。适用的终端范围很广,基本可以为市场上所有的终端提供升级服务, 无论对于电信运营商还是终端设备制造商,通过集群应用、网格技术和分布式服务端,能够在同一时间内处理大量用户的终端升级需求。FOTA和OS的关系较密切,不同的OS版本,需要开发不同的FOTA适配版本,同时通过FOTA模块下载的系统升级包,也要和OS进行密切的匹配,不但要进行硬件驱动的调试,还要进行版本的兼容测试,但这样的升级包一般由终端厂商提供,FOTA更多的是保证将升级包下载,并且安装至终端,在智能时代,FOTA云升级将成为智能终端的标准配置。

其跟OTA的区别就是前面的”F”,而Firmware是移动终端设备的核心所在,硬件无法在线升级,数据可以在线下载,唯独出厂时所带的固件,即使软件确有固定,在OTA产生之前只有开发人员,售后维修人员或是那些发烧友有能力去自行升级固件。FOTA的存在完美的解决了这种困境,当系统中预置的应用或是更底层的框架,内核等软件迭代更新时,用户可以直接通过FOTA技术快速的将自己设备的固件更新到最新版本。

FOTA从业务功能上来看可以视作OTA技术在某领域的特定应用。

GOTA

Google作为Android的生父,自己也开发了Google OTA(GOTA),OTA的服务器是由Google搭建,OEM厂商或者品牌商需要向Google申请账号。客户端的升级程序包含在GMS包里。

其实GOTA的概念还是在FOTA的范畴内,只是标示了特定的方案提供商。

XOTA

有了上面的GOTA做铺垫,那么我们来聊聊XOTA。因为Android系统FOTA方案的实现主要包括了服务器,终端的升级程序,而实际升级安装的技术是Android系统已经提供给我们的。所以开发一款产品的FOTA实现,需要做的就是服务器的搭建和维护,升级程序的开发。那么读者可能有一个问题,升级程序没有通用的吗?因为升级程序是和服务器交互的,所以需要根据服务器的地址、配置来做适配。GOTA的由来也就是Google搭建了服务器,写好了升级程序,想要用的厂商就需要这两者皆用。

按照这个逻辑不论是那个厂商,如果搭建了自己的服务器,开发了配套的升级程序,那么也可以提供给其他厂商使用,就可以叫做自己的OTA,这里的X就是一个代号。

卡刷

在Android手机刚兴起的时代,卡刷是很流行的一个方式,对于玩机爱好者或是发烧友来说,这个是必备的一个技能。它可以帮助你把设备刷到你想要的ROM。

而操作方式就是先从网上下载想要的ROM,可以是官方的,也可以是第三方定制的ROM,当然必须得是跟机型相匹配的,否则设备有变砖的可能性。然后把ROM放入到一张sd卡中,通常是将升级包命名成update.zip,直接放到sd卡的根目录下。升级包的放置位置至关重要,当然这个决定权是属于Recovery系统的开发者,因为最后卡刷升级是在Recovery模式下进行。接下来就是重启设备进入到Recovery,双清(清除data,cache)之后,选择sd卡升级,升级包没有问题的话,后面就跟用户无关了,会让设备升级到你下载的ROM,然后重启。

线刷

线刷指的是通过usb线将移动终端和PC相连,通过PC端的工具来烧写系统,其俗称的由来我想来大概是因为之间有一条usb线作为媒介吧。而其原理是通过Android SDK里所带的fastboot工具,将特定的系统镜像写入到对应的分区中去。而此时设备需进入到fastboot模式。