最近在做AVB校验,学习的时候就看到AVB里面有A/B系统。就挺纳闷这个是什么?
这个有什么用?在学习的时候看到了这个和OTA升级有关系?
下面看看为什么需要A/B系统,A/B是什么?
在这里、感谢这个时代的便捷性,感谢前辈精彩的blog,原文内容更加丰富哦。
为什么需要A/B系统?
什么是OTA升级
这就得了解一下OTA升级。
OTA(Over-the-AirTechnology)升级是指手机终端通过无线网络下载远程服务器上的升级包,对系统或应用进行升级的技术。
想想你每次手机升级是不是推送就来了,没说让你把手机寄回去嘛。
OTA(Over The Air)是一项基于短消息机制,通过手机终端或服务器(网上)方式实现SIM卡内业务菜单的动态下载、删除与更新,使用户获取个性化信息服务的数据增值业务(简称OTA业务),是通过移动通信(GSM或CDMA)的空中接口对SIM卡数据及应用进行远程管理的技术。
通过OTA空中下载技术,手机用户只要进行简单操作,就可以按照个人喜好把网络所提供的各种业务菜单利用OTA机制下载到手机中,并且还可以根据自己的意愿定制具体业务。
(技术还是要结合具体得场景会更加容易理解,脑子里能感性的想到手机升级的场景就好了)
二、ota升级方式有哪几种
1、乒乓升级
两个大小相同的分区APP1、APP2,如果当前在APP1分区执行代码,升级时就把固件下载到APP2分区。升级成功后设备重启,模组切换到APP2分区执行;下次再升级就切换到APP1分区,一直这样轮询。
2、拷贝升级
两个大小相同的分区APP、OTA。 APP分区存放要执行的固件,当OTA升级时会先把OTA数据包写入OTA分区,然后再将OTA数据搬移到APP数据区,最后从APP数据区启动执行。
3、压缩升级
两个大小相同的分区APP、OTA。 APP分区存放要执行的固件,OTA分区存放OTA数据的压缩包,bootload启动时会先将OTA压缩包解压,再搬移到APP分区。
其中,APP分区会比OTA分区要大,可以大大节省空间。
4、差分升级
差分升级又叫增量更新,是将旧版本与新版本的数据文件做差分,得到升级部分的补丁即差分包;用户下载了差分包之后,将旧版本数据与差分包进行组合,以得到新版本的数据文件,多数采用BSDiff差分算法。(这个游戏里面很多都是这样)
然后当我们把上面的APP1、APP2、OTA分区切成A/B两个分区的时候,是不是就好理解了。
下面进入A/B分区
A/B系统
A/B系统是什么?
顾名思义,A/B系统就是设备上有A和B两套可以工作的系统(用户数据只有一份,为两套系统共用),简单来讲,可以理解为一套系统分区,另外一套为备份分区。其系统版本可能一样;也可能不一样,其中一个是新版本,另外一个旧版本,通过升级,将旧版本也更新为新版本。当然,设备出厂时这两套系统肯定是一样的。
之所以叫套,而不是个,是因为Android系统不是由一个分区组成,其系统包括boot分区的kernel和ramdisk,system和vendor分区的应用程序和库文件,以及userdata分区的数据
A/B系统实现了无缝升级(seamless updates),有以下特点:
- 出厂时设备上有两套可以正常工作的系统,升级时确保设备上始终有一个可以工作的系统,减少设备变砖的可能性,方便维修和售后。
- OTA升级在Android系统的后台进行,所以更新过程中,用户可以正常使用设备,数据更新完成后,仅需要用户重启一次设备进入新系统(这场景熟不熟悉)
- 如果OTA升级失败,设备可以回退到升级前的旧系统,并且可以尝试再次更新升级。
A/B系统前身-Android主系统和一个Recovery系统
Android 7.0上传统OTA方式和新的A/B系统方式都存在,只是编译时只能选择其中的一种OTA方式。由于A/B系统在分区上与传统OTA的分区设计不一样,二者无法兼容,所以7.0以前的系统无法通过OTA方式升级为A/B系统。
在Android 7.0之前,设备上有一个Android主系统和一个Recovery系统,Android主系统运行时检测是否需要升级,如果需要升级,则将升级的数据包下载并存放到cache分区,重启系统后进入Recovery系统,并用cache分区下载好的数据更新Android主系统,更新完成后重新启动进入Android主系统。如果更新失败,设备重启后就不能正常使用了,唯一的办法就是重新升级,直到成功为止。(想起当年按着开机键和音量键,进入recovery模式没)
A/B系统的不一样
与传统OTA方式相比,A/B系统的变化主要有:
1、系统的分区设置
- 传统方式只有一套分区
- A/B系统有两套分区,称为slot A和slot B
2、跟bootloader沟通的方式
- 传统方式bootloader通过读取misc分区信息来决定是进入Android主系统还是Recovery系统
- A/B系统的bootloader通过特定的分区信息来决定从slot A还是slot B启动
3、系统的编译过程
- 传统方式在编译时会生成boot.img和recovery.img分别用于Android主系统和Recovery系统的ramdisk
- A/B系统只有boot.img,而不再生成单独的recovery.img
4、OTA更新包的生成方式
- A/B系统生成OTA包的工具和命令跟传统方式一样,但是生成内容的格式不一样了
由于内容较多,分多篇文章来详细分析整个A/B系统。(大家点击参考链接二进入前辈原文全系列学习,我只是做个学习笔记)
本文主要从分区和总体操作流程上来描述A/B系统,也可以参考Android官方对A/B系统的说明:“A/B System Updates”。
A/B系统的优势
整个A/B系统的升级更新在后台完成,升级中任何时间点都是可中断和可恢复的,相当于下载中的断点续传,更新操作对用户是透明的,在不影响用户操作的情况下完成升级。
设备可以设置数据下载、更新升级的场景和策略,例如:
只有在WiFi连接时才下载数据 电量较少时不下载数据、不进行更新 用户没有活动时才进行数据下载和更新等 具体有哪些策略依赖于开发者和用户的设置。
到这里大家应该有个感性的认识对于A/B系统,这就是本文的目的。对于更多的详细的内容,大家可以访问参考链接二继续学习。
参考链接: