0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简述物联网设备OTA软件升级之:完全升级和增量升级

安芯教育科技 ? 来源:IOT物联网小镇 ? 作者:道哥 ? 2021-09-24 15:08 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

各位看官好,上一篇文章我们聊了一下关于 OTA 升级过程中,新的软件包是如何从开发者电脑上,安全的下载到嵌入式设备中的。

这个流程似乎很简单,不就是下载一个文件而已嘛,怎么还值得写成一篇文章呢?

其实这不仅仅是下载文件这么简单,这其中涉及到如何对众多的终端设备进行批量升级的策略问题。

如果你亲自在 AWS 的平台上操刀一次,就知道这其中有很多细节问题是需要考虑的。

一失足成千古恨哪!一旦设备升级策略忽略了一个小细节,也许某一天就是我们的深渊!

包括产品的生产过程也是如此,那些踩过的坑,真是一把鼻涕一把泪,这个问题后面有时间专门写一篇。

今天,我们继续 OTA 升级过程中后续的阶段。

还记得我们之前的假设吗?

设备中正在执行的 V1 版本的程序,包括这 3 个文件,它们位于文件系统中的 /root/app 目录下:

main: 主程序;

config.ini: 配置文件(包括一个配置项:version=V1_0);

mylib.so: 实现了某个算法的动态库,被 main 程序调用;

现在,新的版本 V2 优化了算法,压缩包名称是 app_V2.0.tgz,其中包括文件:

main: 没有变化;

config.ini: 配置项修改了:version=V2_0;

mylib.so: 优化了算法,主要就是想升级这个动态库;

upgrade.sh: 一个脚本程序,新增的文件;

升级包 app_V2.0.tgz 已经被下载到设备本地的文件系统中了,假设解压到目录 /root/upgrade 中。

现在需要做的事情就是:新版本程序,去替代 /root/app 目录中的旧版本程序。

upgrade.sh 升级脚本

我们首先要明白一个问题:执行升级指令、下载压缩包,都是此刻正在执行的 main 程序来执行的。

如果把复制替换的操作也让 main 程序来执行的话,肯定是会出问题的:它不可能去复制一个新的 main 文件,来把自己替换掉!

写过单片机程序的小伙伴肯定都知道:当新的固件下载到 flash 之后,一般都是重新启动设备,然后由 bootloader 来执行具体的文件复制操作。

那么对于带有文件系统的设备来说,也可以模仿类似的操作方式。

比如:当设备重新启动后,当执行 /etc/rc.local 时,此时 main 应用程序还没有启动。

此时就可以在 rc.local 这个文件中去做升级操作。

但是这样的方式,相当于是轻微的侵入了操作系统,总感觉这样做不太好。

此刻, upgrade.sh 升级脚本开始登场了!

这个脚本文件的主要作用就是用来控制升级过程。

这里隐藏这一个很重要的思想:upgrade.sh 是放在升级包中的,它并没有固化在终端设备中。

这样的话,每次执行升级任务时,都可以根据本次的升级需要,来灵活的编写升级脚本。

换句话说:只要能保证升级的通道没有问题,那么升级的过程就完全由这个脚本文件来控制,你想怎么搞,就怎么搞!

完全升级

所谓的完全升级,就是把旧版本的程序全部丢弃,把升级包中的新程序全部复制过去。

此时,升级脚本文件 upgrade.sh 就完成下面这几个主要工作:

停止(kill)当前正在执行的 V1.0 版本的程序;

删除 /root/app 目录下的所有旧文件;

把升级包中所有的新版本文件 /root/upgrade/* 复制到 /root/app 目录下;

这样的完全升级方式是最无脑、最粗鲁的。

当然,还有一些细节问题是需要考虑的。比如:如果复制文件过程中出现错误怎么办?

还有一点,既然刚才提到了配置文件 config.ini,不知您是否会有这样一个疑问:

如果配置信息被用户修改了,那么升级之后,所有的配置信息又被恢复为默认值了,用户的私人配置信息全丢了怎么办?

关于这个问题,我们就继续来聊一下增量升级!

增量升级

所谓的增量升级:就是升级时并不会把所有的文件全部进行替换,而只是替换那些需要更新的文件。

对于我们假设的升级场景,只需要做 2 件事情:

替换 mylib.so 库文件;

把配置文件 config.ini 中的版本字段修改为:version=V2_0;

同样的,所有的升级过程仍然是写在 upgrade.sh 这个升级脚本中:

停止(kill)当前正在执行的 V1.0 版本的程序;

把 /root/upgrade/mylib.so 文件复制到 /root/app 目录下;

使用 sed 命令来修改 config.ini 文件中的 version 字段;

PS:此时升级包中,只需要包含必要的文件就可以了,不需要把其他用不到的文件也放进去了。

从我描述的文字来看,似乎完全升级和增量升级差别不大。

这是因为这里的示例太简单,如果是一个比较复杂的、有多个模块相互配合的应用程序,增量升级的优势就明显了。

关于 OTA 升级过程,就先说这么多了,主要是以思想为主,毕竟每一个项目的需求场景是不一样的,从大方向上明白 OTA 的升级过程就可以了。

One more thing

后台提供一个很多年前项目中的升级脚本文件模板。

作者|道哥

转自|IOT物联网小镇

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OTA
    OTA
    +关注

    关注

    7

    文章

    615

    浏览量

    36834
  • 脚本
    +关注

    关注

    1

    文章

    402

    浏览量

    28727
  • AWS
    AWS
    +关注

    关注

    0

    文章

    438

    浏览量

    25437

原文标题:技术分享 | 物联网设备OTA软件升级之:完全升级和增量升级

文章出处:【微信号:Ithingedu,微信公众号:安芯教育科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    技术笔记 | Ubuntu 系统 OTA 升级全流程详解

    前言:在嵌入式系统设备管理中,OTA(Over-The-Air)升级是实现设备远程维护、功能迭代的核心能力。本文基于Ubuntu系统环境,详细拆解updateEngine工具的
    的头像 发表于 07-31 08:32 ?219次阅读
    技术笔记 | Ubuntu 系统 <b class='flag-5'>OTA</b> <b class='flag-5'>升级</b>全流程详解

    蓝牙空中升级(OTA)原理

    1. 概述 所谓DFU(Device Firmware Update),就是设备固件升级的意思,而OTA(Over The Air)是实现DFU的一种方式而已,准确说,OTA的全称应该
    发表于 07-21 14:50

    东风日产N7开启首次OTA升级

    近日,东风日产举办“NI好 N7首次OTA升级发布会”,并宣布OTA升级即日开启推送。
    的头像 发表于 07-05 13:57 ?592次阅读

    详解蓝牙空中升级(OTA)原理与步骤

    如何实现Bluetooth LE OTA?什么叫DFU?如何通过UART实现固件升级?又如何通过USB实现固件升级?怎么保证升级的安全性?什么叫双区(dual bank)DFU?什么叫
    的头像 发表于 07-04 09:56 ?1583次阅读
    详解蓝牙空中<b class='flag-5'>升级</b>(<b class='flag-5'>OTA</b>)原理与步骤

    长安汽车构建全流程智能网联汽车OTA升级能力体系

    2025年2月,工业和信息化部、市场监管总局联合发布了《关于进一步加强智能网联汽车产品准入、召回及软件在线升级管理的通知》(以下简称《通知》),将汽车软件在线升级
    的头像 发表于 06-04 16:07 ?761次阅读

    瑞萨电子MCU无感OTA升级功能介绍

    在工业控制、电机驱动乃至联网边缘节点中,固件在线升级OTA)已成为产品生命周期管理的标配。然而传统OTA往往伴随停机、风险与低效。瑞萨电
    的头像 发表于 05-15 14:36 ?926次阅读
    瑞萨电子MCU无感<b class='flag-5'>OTA</b><b class='flag-5'>升级</b>功能介绍

    有没有大神使用cubeMX生成初始代码开发实现通过USB(HID)进行OTA升级功能的?

    求助,有没有大神使用cubeMX生成初始代码开发实现通过USB(HID)进行OTA升级功能的
    发表于 04-22 13:35

    RK3568开发板OTA升级

    OTA(Over-The-Air)升级作为一种无损失的系统升级方式,能够远程将新功能部署到产品上,极大地提高了设备的可维护性和可扩展性。除了通过网络直接下载
    的头像 发表于 04-21 14:32 ?868次阅读
    RK3568开发板<b class='flag-5'>OTA</b><b class='flag-5'>升级</b>

    一文解锁OTA远程升级方案!基于RK3562全国产平台

    通过网络下载固件进行升级,也支持下载固件到SD卡或U盘进行升级。 而且,升级固件可按需定制,既能让设备系统全面革新,也能升级1个或多个功能
    的头像 发表于 04-07 10:15 ?520次阅读
    一文解锁<b class='flag-5'>OTA</b>远程<b class='flag-5'>升级</b>方案!基于RK3562全国产平台

    浅谈车规MCU (MGEQ1C064) OTA升级

    的正常程序,用于执行各种应用功能:这部分程序称为App。 整个OTA的简单流程如下: 可以看出,要实现OTA升级,划分FLASH的操作是不可少的,很多MCU通常使用编程软件(如k
    发表于 03-04 12:52

    OTA软件升级管理系统

    OTA(Over-the-Air Technology,空中下载技术)是通过空中下载的方式对车辆中的软件进行远程升级。经纬恒润OTA软件
    的头像 发表于 01-13 09:39 ?974次阅读
    <b class='flag-5'>OTA</b><b class='flag-5'>软件</b><b class='flag-5'>升级</b>管理系统

    STM32F103上位机升级,RS485升级、CAN升级

    外置Flash。该开发板提供上位机升级软件,购买者可使用该上位机配合我们的升级例程学习给MCU在线更新升级 上位机软件使用VS2022开发平
    发表于 01-03 08:57

    OTA升级】无需数据线,一条命令即可完成固件升级

    OTA无线升级过程视频演示:OTA介绍OTA(Over-The-Air,空中升级)是一种通过无线通信技术实现远程更新
    的头像 发表于 12-11 01:00 ?4243次阅读
    【<b class='flag-5'>OTA</b><b class='flag-5'>升级</b>】无需数据线,一条命令即可完成固件<b class='flag-5'>升级</b>!

    九芯电子NVH/NVF语音芯片OTA升级操作方法

    OTA(Over-The-Air)升级是指通过无线网络远程对设备进行软件升级的过程。对于九芯电子NVH/NVF语音芯片,
    的头像 发表于 10-09 08:01 ?914次阅读
    九芯电子NVH/NVF语音芯片<b class='flag-5'>OTA</b><b class='flag-5'>升级</b>操作方法

    联网中的Fota是什么,如何使用HTTP来给设备升级

    一 概述 FOTA(Firmware Over-The-Air)移动终端的空中下载软件升级,指通过云端升级技术,为具有连网功能的设备提供固件升级
    的头像 发表于 09-25 14:35 ?1779次阅读
    <b class='flag-5'>物</b><b class='flag-5'>联网</b>中的Fota是什么,如何使用HTTP来给<b class='flag-5'>设备</b><b class='flag-5'>升级</b>