1.全量升级:

  完整的下载新版本固件,下载完成后将固件搬运到APP程序运行的位置。(一般来说是将APP从片外flash搬运到片内flash上)。搬运完成后校验通过后重启APP。

2.差分升级:

  利用算法,做出原版APP和新版APP程序的差分包,将差分包下载到flash,内部的BootLoader程序在利用算法将新版APP合成,合成后在搬运,搬运后校验,重启。
  一般制作出来的差分包只有原包的5%左右。省空间!

服务器端: 生成差分包,bsdiff算法

1.对old文件中所有子字符串形成一个字典;
2.对比old文件和new文件,产生diff string和extra string;

3.将diff string 和extra string 以及相应的控制字用zip压缩成一个patch包。

设备端: 生成new File,bspatch算法

1.接收patch包;

2.解压patch包;

3.还原new文件。

3.原地升级:

相比差分升级,合包的过程,直接搬运。
容错率低。

4.AB面升级(AB系统升级)

  Android从7.0开始,引入了新的OTA升级方式:A/B System Updates
  A/B系统是指设备上有A和B两套可以工作的系统(用户数据只有一份,为两套系统共用),我们可以理解为一套系统分区,另外一套为备份分区。其系统版本可能一样,也可能不一样;通过升级,可以将旧版本也更新为新版本。当然,设备出厂时这两套系统肯定是一样的。

如图所示:

A/B 系统更新可带来以下好处:

  • OTA 更新可以在系统运行期间进行,而不会打断用户。用户可以在 OTA 期间继续使用其设备。在更新期间,唯一的一次宕机发生在设备重新启动到更新后的磁盘分区时。
  • 更新后,重新启动所用的时间不会超过常规重新启动所用的时间。
  • 如果 OTA 无法应用(例如,因为刷机失败),用户将不会受到影响。用户将继续运行旧的操作系统,并且客户端可以重新尝试进行更新。
  • 如果 OTA 更新已应用但无法启动,设备将重新启动回旧分区,并且仍然可以使用。客户端可以重新尝试进行更新。
  • 任何错误(例如 I/O 错误)都只会影响未使用的分区组,并且用户可以进行重试。由于 I/O 负载被特意控制在较低水平,以免影响用户体验,因此发生此类错误的可能性也会降低。
    更新包可以流式传输到 A/B 设备,因此在安装之前不需要先下载更新包。流式更新意味着用户没有必要在 /data 或 /cache 上留出足够的可用空间来存储更新包。
  • 缓存分区不再用于存储 OTA 更新包,因此无需确保缓存分区的大小要足以应对日后的更新。
  • dm-verity 可保证设备将使用未损坏的启动映像。如果设备因 OTA 错误或 dm-verity问题而无法启动,则可以重新启动到旧映像。(Android 验证启动不需要 A/B 更新。)

Recovery系统升级

Recovery系统安卓7.0以前传统的OTA方式:设备上有一个Android主系统和一个Recovery系统,Android主系统运行时检测是否需要升级,如果需要升级,则将升级的数据包下载并存放到cache分区,重启系统后进入Recovery系统,并用cache分区下载好的数据更新Android主系统,更新完成后重新启动进入Android主系统。如果更新失败,设备重启后就不能正常使用了,唯一的办法就是重新升级,直到成功为止。

OTA常见方案分析(差分升级 全量升级 AB面升级 Recovery系统升级)相关推荐

  1. 【STM32】BootLoader介绍、编写 以及 OTA常见方案分析(差分升级 全量升级 AB面升级)

    参考博客:STM32 BootLoader升级固件_cyang's blog-CSDN博客 STM32固件升级详解(BootLoader)_EmbeddedOsprey-CSDN博客_stm32升级b ...

  2. 企业级MySQL数据库备份方案:增量备份、全量备份、逻辑备份

    一份好的备份方案无非包括以下几点: 为什么需要备份? 备份的方式有哪些? 某几种备份方式的区别在哪? 备份实战操作概述 恢复实战操作概述 其它备注信息 那么,此文将从以上几个角度,结合一些实际的实战经 ...

  3. stm32 esp8266 ota升级-自建mqtt和文件服务器全量升级

    stm32 esp8266 ota系列文章: stm32 esp8266 ota-快速搭建web服务器之docker安装openresty stm32 esp8266 ota升级-tcp模拟http ...

  4. clickhouse集群部署方案分析

    常见的三种集群架构方案 注:本文摘自网上内容,原文地址:https://zhuanlan.zhihu.com/p/161242274 ClickHouse分布式集群常见方案一:MergeTree + ...

  5. bugly的全量更新与热更新

    bugly开发文档地址:https://bugly.qq.com/docs/introduction/app-upgrade-introduction/?v=20180709165613: 我们在使用 ...

  6. IoT物联网设备OTA:全量升级和增量升级

    各位看官好,上一篇文章我们聊了一下关于 OTA 升级过程中,新的软件包是如何从开发者的电脑上,安全的下载到嵌入式设备中的. 这个流程似乎很简单,不就是下载一个文件而已嘛,怎么还值得写成一篇文章呢? 其 ...

  7. nwjs桌面应用升级方案 桌面应用更新 支持增量全量更新

    桌面应用程序的更新逻辑一般为:启动–检测版本号–有更新–下载新版本资源包–解压–替换文件–重启: 1.为了更加直观,请看5毛钱特效: 2.本文案例主要用nwjs,其他框架升级原理同理.updater. ...

  8. Android OTA升级(1):编译升级全包

         Android原生系统中就已经支持OTA升级.所谓OTA升级就是通过空中接口获取升级包,然后更新系统固件.一般地,升级包无论如何获取,哪怕是直接TCard本地升级,也被称为OTA升级.    ...

  9. 直播新架构升级:全量支撑淘宝双11直播

    淘宝直播最近连续三年直播引导成交大幅增长,2020年以来,有100多种职业转战淘宝直播间,无论达人身份还是商家身份,都在新风口的驱动下大量入场.如何应对双十一这种高峰值用户直播需求,这无疑对淘宝直播提 ...

最新文章

  1. 以为精通Java 线程池,看到这些误区,还是年轻了...
  2. DisARM:用于3D目标检测的位移感知关联模块(CVPR2022)
  3. Linux 第70天 mariadb transaction, log
  4. android javacv直播,无插件即时视频播放
  5. NSPredicate的用法
  6. 老BOJ 13 K-based Numbers
  7. 嗯,查询滑动窗口最大值的这4种方法不错....
  8. 【Shell脚本】TDS离线备份还原
  9. Hadoop Hive
  10. 如何解决在Windows Server 2008 R2 上安装证书服务重启后出现 CertificationAuthority 91错误事件...
  11. Linux-sed command
  12. 第七次全国人口普查公报(第三号) ——地区人口情况
  13. 深入理解机械系统的模态与振动
  14. 身份证编号前六位对应地区(上)
  15. DHCP Option 82
  16. 中国准货币体系的概要简析
  17. udal导mysql_MySQL性能测试工具之mysqlslap
  18. 微信文件夹的dat文件怎么打开_微信dat后缀的文件怎么打开
  19. Autosar CPU core trust/Nontrust配置
  20. 【教程】Ubuntu安装、使用gephi

热门文章

  1. mysql三个层次_数据库的基本结构三个层次
  2. c++list支持索引吗_还在为不懂Python切片操作及原理而苦恼吗?漫画帮你立马理解掌握...
  3. 解决arXiv上传LaTeXpaper的坑
  4. C++中指针*与指针引用*的区别说明
  5. P300脑机接口及数据集处理
  6. 基因突变不是随机的?!Nature最新论文挑战进化论
  7. 三星最新屏幕黑科技:可拉伸的OLED屏,能贴在皮肤上
  8. 就挺凡尔赛的!李开复谈20年后的AI,崔宝秋论开源之道,清华唐杰的PPT成了“香饽饽” | MEET2021智能未来大会...
  9. 余承东:国内用华为P40 Pro+就能拍照测体温,还很精准
  10. 入门Python神经机器翻译,这是一篇非常精简的实战指南