iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >设备OTA空中升级原理是怎样的
  • 360
分享到

设备OTA空中升级原理是怎样的

2024-04-02 19:04:59 360人浏览 安东尼
摘要

这篇文章给大家介绍设备OTA空中升级原理是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 背景没有完美的软件,因为设计缺陷、业务需求更新,软件始终都在不断升级完善。新软件如何

这篇文章给大家介绍设备OTA空中升级原理是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

设备OTA空中升级原理是怎样的

1. 背景

没有完美的软件,因为设计缺陷、业务需求更新,软件始终都在不断升级完善。新软件如何替换正在运行的旧软件就是本文关注的重点,尤其是针对电子产品,设备空中升级OTA,受限于硬件资源,需要选择不同的方案进行软件升级。

2. 空中升级流程

在线升级流程,简化就是设备运行旧软件的同时,获取新软件包,再执行特殊操作使用新软件覆盖旧软件,最后运行新软件。图片根据硬件资源和系统整体框架,选择不同的升级方案,方案需要结合实际选择最佳的,技术层面是次要的。

3. 空中升级的方案

3.1. 整包升级

以STM8单片机升级为例,单片机最小系统运行流程如下:图片要加入在线升级功能,就需要将主应用程序拆分,类似有2套程序在设备内运行,标准称呼是bootload+app,其中bootload始终不变,它接收新软件包并覆盖app区域。

硬件限制解决方案
单片机自身没有网络连接功能,只能基于外挂的网络模块从远端服务器下载新软件包,再通过串口传输给单片机由外挂主机下载新软件包,并通知单片机进入升级模式
单片机内部RAM小,不能进行复制运算或者缓存大量数据;单片EEPROM小,不能保存完整的新软件包只能在Bootload期间分段接收新软件并立刻写入flash

整体方案如下图:

设备OTA空中升级原理是怎样的

难点与风险

单片机在app收到升级请求,需要重启进入bootload,对于以单片机为主控的设备,需要保证单片机重启期间网络模块不断电,所以因升级进入bootload要立刻恢复网络模块主机供电,必要时需要硬件支持。

单片机ram和rom有限,采用分段接收新软件包,直接写入flash,因此在应用层协议上需要确保数据包不会错误或遗漏或重发,目前采用Ymodem协议居多。升级包需要转成bin文件,单片机接收后写到app的起始地址。

单片机分段接收后写入flash,整个过程需要10秒以上,期间如果断电,单片机软件的app处于损坏状态,需要单片机有超时机制重启,再次开启升级并主动要求网络模块重传新软件包。

一般PC软件无需考虑内存和存储空间,也是采用整包升级,两个文件同时保存。例如app.exe运行时下载新的app_new.exe,下载校验后,app.exe自毁删除自身,然后将app_new.exe重命名为app.exe并启动。

3.2. 差分升级

差分升级软件框架同整包升级一样,区别在于新软件包的提供方式不同。

设备OTA空中升级原理是怎样的

单片机软件一般不超过50KB,复杂微处理器的软件一般都比较大,但其RAM也大,下载完整的新软件包耗时长且浪费流量,因此可以基于新旧两版软件的差异,将差异文件传给设备,由设备运算还原出新软件包升级。

难点与风险

差分包的制作与还原算法验证,在bootload还原出新软件包时考虑到RAM,差分包是按块生成,还原也是按块执行,每块新软件写入前,需要先备份旧块,防止异常断电无法还原。图片万一出现异常,重启还是进入bootlaod,查询上次已经还原到第几块,继续后面操作。有些为了再次减小差分包大小,还会对文件进行压缩,还原前先解压。

升级时,必须保证生成的差分包是基于当前设备内运行的版本,如设备运行V01,但是提供的差分包却是基于V02到V03的,则会导致异常。或者在文件中预设特殊版字符,版本匹配才进行差分还原升级。而整包没有该缺点,只要bootlaod正常,任意app软件版本可以互相升级。

3.3. 动态加载

动态加载在PC软件中很常见,多个exe可执行文件共用dll库文件,这样exe文件很小,缺点是要保证exe正常运行,需要在指定的路径下存放dll文件。图片对嵌入式平台,动态加载的可以理解为始终保持底层基础框架不变,修改或替换不同的上层业务逻辑,实现不同的效果。为保证底层和上层之间调用关系,必须固定部分接口地址,也就是两者中间的接口映射,主要通过链接实现。图片嵌入式软件从源码到可下载到设备的映像文件,需要经过的步骤:图片动态加载就是在链接阶段,将上层代码obj编译成axf可动态加载的文件,而不是直接与其他obj合并成可执行文件。主要是使用armlink配置-entry指定映像文件的初始入口点或者在代码中使用#pragma  arm section  code关键字,保证动态的上层有固定的入口地址。凡是上层调用的底层接口,在编译阶段函数体指针都赋为空指令保证编译,后续再指向底层的真实地址。图片

其作用发生在系统启动阶段,从flash加载到内存,整个文件内的接口相对地址不变,整体偏移。这样,软件还是可以计算获取动态映像文件的入口地址。加载到内存区域,需确保该区域不会被占用,否则内存覆盖肯定会导致异常。

底层启动后,只能查到动态加载文件的入口函数,但实际底层与上层交互的接口肯定不止一个,而且上层也必然会调用底层接口,这就需要在第一个明确地址的函数体内实现上下层地址映射。这里有2种方案,一种是函数指针赋值,一种是根据字符串查找。底层需要给上层调用的接口,底层映射接口函数指针表,按固定顺序赋值给上层函数指针;或者底层只提供上层一个函数,但是改函数体内查字符串获取函数指针。这样实现上层调用事先固定的底层接口。

上层给底层提供的接口,也是提前固定的函数指针,也用上面的方法对接。接口映射的核心是动态加载块有一个函数的地址是链接时指定的,在这个函数内实现上下层函数映射。除函数外,全局变量也是同样的使用指针传递。

难点与风险

前面2种使用bootload+app的方案,属于比较常规的方案,其本质是一块芯片运行2套互不干扰的软件,而动态加载的上下层之间有固定的接口,不能使用接口以外的交互。

动态加载对链接和arm底层要求高,在升级方向应用较少,因为对软件开发接口使用存在限制,但动态加载实现了上下层隔离,避免代码调用混乱,也为跨平台、多语言开发提供了基础。

4. 结论

在线升级为了产品在不召回的情况下,以较低的成本解决售后问题;升级是为了解决问题,但是一旦失败则可能导致设备变砖。前期测试应选择不同设备模拟升级异常,如强制断电或软件包异常,设备必须有自我恢复的机制。

关于设备OTA空中升级原理是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 设备OTA空中升级原理是怎样的

本文链接: http://www.lsjlt.com/news/81678.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 设备OTA空中升级原理是怎样的
    这篇文章给大家介绍设备OTA空中升级原理是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 背景没有完美的软件,因为设计缺陷、业务需求更新,软件始终都在不断升级完善。新软件如何...
    99+
    2024-04-02
  • patch升级过程是怎样的
    本篇文章为大家展示了patch升级过程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 记一次补丁升级过程从11.2.0.4.0 到11.2.0.4.3&n...
    99+
    2024-04-02
  • 升级到Https的脚本是怎样的
    升级到Https的脚本是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。现在很多站长都会考虑将自己的站点从http升级到https,不仅是基于安全的考虑,有的也是因为第...
    99+
    2023-06-17
  • MySQL 5.6.27升级MySQL 5.7.18版本的升级步骤是怎么样的
    MySQL 5.6.27升级MySQL 5.7.18版本的升级步骤是怎么样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 ...
    99+
    2024-04-02
  • XtraBackup备份原理和优缺点是怎样的
    本篇文章给大家分享的是有关XtraBackup备份原理和优缺点是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 ...
    99+
    2024-04-02
  • 升级Linux内核的教程是怎样的
    本篇文章为大家展示了升级Linux内核的教程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。大家好,今天我们学习一下如何从Elrepo或者源代码来安装最新的Linux内核4.0。代号为&...
    99+
    2023-06-13
  • ZABBIX3.2升级3.4的过程是怎么样的
    本篇文章给大家分享的是有关ZABBIX3.2升级3.4的过程是怎么样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。停止zabbix服务service zabbix_...
    99+
    2023-06-06
  • Oracle数据库异机升级是怎样的
    这期内容当中小编将会给大家带来有关Oracle数据库异机升级是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。架构介绍:源库:单实例  ip:192.168...
    99+
    2024-04-02
  • Ubuntu 9.04升级到9.10的过程是怎样的
    这篇文章将为大家详细讲解有关Ubuntu 9.04升级到9.10的过程是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Ubuntu 9.10(Karmic Koala)采用GNOME ...
    99+
    2023-06-13
  • Python升级和兼容性配置是怎样的
    Python升级和兼容性配置是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python里面有个现象很奇怪,一般要学习Python都会纠结是学习2和3,这个差别和纠结Ja...
    99+
    2023-06-04
  • mysql5.1.37升级到5.5.3遇到的问题是怎样的
    本篇文章为大家展示了mysql5.1.37升级到5.5.3遇到的问题是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在升级完后,导入之前备份的数据 ...
    99+
    2024-04-02
  • bootstrap3.0中栅格系统原理是怎样的
    这篇文章给大家介绍bootstrap3.0中栅格系统原理是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。栅格系统(布局)Bootstrap内置了一套响应式、移动设备优先的流式栅格...
    99+
    2024-04-02
  • react事件原理是怎样的
    react事件原理是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一 前言今天我们来一起探讨一下React事件原理,这篇文章,我尽量用通...
    99+
    2024-04-02
  • JavaScript内部原理是怎样的
    本篇文章给大家分享的是有关JavaScript内部原理是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。简介Javascript &nbs...
    99+
    2024-04-02
  • Cacti系统更新和升级流程是怎样的
    Cacti系统更新和升级通常包括以下步骤: 1.备份数据:在进行系统更新和升级之前,务必备份Cacti系统中的重要数据,以防止数据丢...
    99+
    2024-03-12
    Cacti
  • zabbix升级至3.0.2安装步骤是怎么样的
    这期内容当中小编将会给大家带来有关zabbix升级至3.0.2安装步骤是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。将原来的zabbix升級至3.0.2版本因在...
    99+
    2024-04-02
  • JavaScript的运作原理是怎样的
    JavaScript的运作原理是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。让我们从浏览器理解的语言开始。浏览器仅理解...
    99+
    2024-04-02
  • InnoDB Redo Log的设计原理以及源码是怎样的
    本篇文章为大家展示了InnoDB Redo Log的设计原理以及源码是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。这篇文章主要学习 InnoDB Redo ...
    99+
    2024-04-02
  • SQL server备份和还原机制是怎样的
    这篇文章将为大家详细讲解有关SQL server备份和还原机制是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。  SQL server备份和还原组件为...
    99+
    2024-04-02
  • mysqldump全备中怎样还原指定的库
    这期内容当中小编将会给大家带来有关mysqldump全备中怎样还原指定的库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。    &nbs...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作