OTA概述

大家好,我是一个软件升级包。这几天呢,我将会进行一次神奇的网络之旅,从开发者的电脑中,一直跑到终端嵌入式设备中。

大家都把我的这个旅游过程叫做 OTA,也就是在线升级。

那么啥叫 OTA 呢?全称是:Over the Air Technology,其实就是通过网络来把一个新的软件包从服务器上下载下来,更新到设备上。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-30murUcG-1622980293850)(http://iottown.sewain100.cn/iot530_ota.gif)]

首先有一个问题:为什么叫软件升级包,而不叫固件升级包呢?

其实在本质上,固件也是属于软件,大家都是用代码写出来的嘛!

虽然这两个说法很近似,但是有一部分小伙伴还是在狭义上对它们进行了一些区分。

既然如此,我们也就暂且把它俩进行一下区别:

  1. 固件:是指一些没有文件系统的嵌入式设备中,把 Flash 分成不同的功能分区。可执行程序需要放在某个固定的起始位置,才能被 bootloader 进行启动。

  2. 软件:是指具有文件系统的嵌入式设备,可执行程序直接放在文件系统中。当设备启动之后,操作系统会启动文件系统中的可执行程序。

没有文件系统的嵌入式设备:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ImTAh5bU-1622980293860)(http://iottown.sewain100.cn/iot530_flash.png)]

带有文件系统的设备:

我知道以上这样的区分方式不是很严谨,但是谁又说得清楚严谨的定义是什么呢?

暂且先这么来区分,只要不影响对文章的理解就可以了!

一个嵌入式设备在进行软件升级的时候,从宏观的角度看,可以分为2 个阶段:

  1. 下载升级包;

  2. 解压升级包,写入 flash 或文件系统;

今天呢,主要以第 1 阶段为主,带你看一下我是如何从开发者的电脑里,一步一步的被嵌入式设备下载到本地的。

下面是一个完整的过程,让您先睹为快!

上传升级包

为了便于描述,我们来假设一个场景:运行在设备中的软件一共有 3 个文件:

  1. main 文件:可执行程序;

  2. config.ini:配置文件;

  3. mylib.so:一个动态库文件,里面包含一个算法,被 main 文件调用;

目前呢,设备中运行的版本是 V1.0,现在开发人员对 mylib.so 库中的算法进行了优化,升级为 V2.0 版本,现在需要把这个新版本升级到嵌入式设备中。

首先第一步需要做的事情,咱们用脚后跟都能想得到,那就是把 V2.0 版本的程序软件上传到文件服务器中。

有一点提醒一下:很多云平台都会把应用服务器和文件服务器进行区分。当然,如果仅仅是测试的话,它俩可以在同一台物理服务器上共存。

比如:亚马逊的 AWS 平台,就是把升级包上传到 S3 服务器中。

现在要对 V2.0 版本的程序进行打包了,在这里,除了 mainconfig.inimylib.so3 个文件之外,我们还把另一个脚本文件 upgrade.sh 也放进打包文件中。

这个文件的作用暂且不说,到后面会为您揭晓答案。

Bingo - V2.0 版本的升级包诞生了:app_v2_0.tgz,上传到文件服务器上之后,地址为:http://fileserve/app_v2_0.tgz

上传升级包描述文件

现在,V2.0 版本的升级包已经上传到文件服务器中了,是否现在就可以命令嵌入设备去下载、升级了呢?

我们知道,在一个物联网系统中,一般都是存在着很多个终端设备的。

这些设备可能处于正在运行状态、也可能处于断电状态,而且咱们也不能假设所有的设备都在同一个时间点进行升级。

再而且,一个设备进行升级之后,就变成了最新的 V2.0 版本,那么这个设备就应该有能力知道服务器上的最新版本是 V2.0 版本,这样它就不需要升级了。

因此,还需要一个新的文件来描述文件服务器中的 V2.0 版本的升级包,就叫它:升级包描述文件 app_desc.json,它的内容是 json 格式的字符串:

version 字段描述了文件服务器上升级包的版本,这样的话,设备就可以知道到服务器中的最新版本。

url 字段描述了升级包的下载地址,设备如果发现自己的版本低于 version 字段中的版本,就可以从这个地址下载新的升级包。

md5 字段描述了服务器中最新升级包的指纹信息,当设备把服务器上的升级包下载之后,需要计算一下升级包的 MD5 值,然后与这里的 md5 字段进行比较,如果相同的话,说明下载的升级包没有问题,没有被恶意的家伙掉包。

了解了升级包描述文件 app_desc.json 的作用之后,这个文件就被上传到应用服务器中了。

下载升级包描述文件

此时,作为升级包的我,已经静静的躺在文件服务器中了,我的兄弟升级包描述文件 app_desc.json 呢,也在应用服务器中准备就绪了,现在就等着嵌入式设备开始升级。

万事俱备,只欠东风了!应该说只欠一个触发嵌入式设备进行升级的动作了!

那么,应该在什么时候?由谁?来告诉设备:你正在运行的软件太旧了,服务器上现在有最新的版本,你去升级一下吧!

这个问题的答案就是:八仙过海,各显神通了!

比如:

  1. 亚马逊的 AWS 平台,是通过在云平台中部署一个 job,来通知每一个需要升级的设备;

  2. 也可以通过一个手机 APP,向某一个嵌入式设备主动发起一个指令:嘿,老兄,请升级一下你的软件;

当终端设备收到升级命令之后,第一步就是下载升级包描述信息。

下载之后,解析这个 json 格式的文本内容,提取出 version 信息之后,与当前正在运行的软件版本进行比较。

如果服务器中的版本比较新,那么就继续提取 url 字段中的升级包下载地址,然后开始从文件服务器中下载新的升级包。

如果当前运行的版本已经是最新的了,那就到此结束!

下载升级包

到了下载升级包的过程就简单了,你可以直接用 wget 等工具来下载,也可以利用 curl 库来手写下载代码。

总之,你可以有一万种方式把我下载到设备中。

下载完成之后,有一件很重要的事情千万别忘记了,那就是:检查下载的升级包是否正确!

还记得升级包描述文件中的 md5 字段吗?那就是我的指纹信息。

你需要首先计算一下下载的升级包的 md5 值,然后与升级包描述文件中的 md5 字段中的值进行比对,如果完全一致,那就放心大胆的开始解压、升级吧!

解压升级包

欲知后事如何,请听下回分解!

------ End ------

推荐阅读

【1】C语言指针-从底层原理到花式技巧,用图文和代码帮你讲解透彻
【2】一步步分析-如何用C实现面向对象编程
【3】原来gdb的底层调试原理这么简单
【4】内联汇编很可怕吗?看完这篇文章,终结它!
【5】都说软件架构要分层、分模块,具体应该怎么做

物联网设备OTA软件升级之:升级包下载过程之旅相关推荐

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

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

  2. 电信物联网平台SOTA升级(软件升级)的全流程说明

      中国电信物联网开放平台(以下简称"平台")提供了基于LWM2M的固件升级功能,用于模组的固件升级.但是由于多数模组并未提供升级接口给MCU,所以MCU升级只能基于应用层来实现升 ...

  3. 软件升级包封装方法以及软件升级方法

    名称: 软件更新包封装方法以及软件升级方法 摘要: 本发明涉及软件的安全升级技术,提供一种保证升级软件合法性.完整性的软件升级包封装方法以及软件升级方法.本发明在终端设备中预置可信任的认证机构的数字证 ...

  4. 物联网安全专题 | 浅谈物联网设备安全分析方法 — 软件篇

    ✦前 言✦ • 物联网(Internet of Things,IoT)是互联网的延伸,是智能设备.移动网络及社交网络的结合体,可以给使用者提供更优质的应用体验.物联网时代的到来引入了大量的物联网设备, ...

  5. 终于来了:360 N5发布安卓7.0测试版升级包下载

    IT之家6月9日消息 现在,越来越多的手机都升级到安卓7.0系统了,而能否升级到这个系统,似乎也成了厂商是否认真对待消费者的最好印证. 今年2月份360发布的N5,现在也能吃到牛轧糖了. 今天,在36 ...

  6. 聊一聊智能汽车和物联网IoT设备的OTA远程升级

    根据 Allied Market Research 发布的最新报告,全球汽车OTA市场在2020年创造了25.9亿美金的市场价值,预计到2030年将达到137.1亿美元,从 2021 年到 2030 ...

  7. stm32 U盘升级 bootloader程序 基于stm32f407 将升级包下载到U盘中,插入到设备中,完成对主程序的升级

    stm32 U盘升级 bootloader程序 基于stm32f407 将升级包下载到U盘中,插入到设备中,完成对主程序的升级,无需上位机操作. 清单: u盘升级的bootloader源码. YID: ...

  8. IoT 物联网设备该如何选择固件升级 OTA ?

    根据IDC的一份最新报告,到2025年,将有416亿台物联网设备,产生79.4 zetb的数据.连接的设备相互通信,传输数据集,并在单个生态系统中工作.为了有效地做到这一点,还需要定期更新,就像笔记本 ...

  9. 图文手把手教程--ESP32 OTA空中升级(阿里云物联网平台)

    本文内容 1)使用ota_example_mqtt例程,通过阿里云物联网平台,进行OTA升级. 2)将例程编译成两个版本,版本1.0.0下载至ESP32开发板,版本2.0.0上传至阿里云物联网平台. ...

  10. OTA固件升级对于物联网设备的重要性

    物联网(IoT)代表着一个重要的发展趋势,逐渐将日常生活中的各个方面相互连接在一起.不同于早期的路由器等无线设备(每个房间或者办公室安装一个)在数量上的局限性,物联网将会非常深入的渗透到方方面面,并且 ...

最新文章

  1. 线程和进程的自己觉得好的文章以及自我理解
  2. cocos游戏源码怎么用_亲子游戏怎么玩?游戏方式用对了,才会事半功倍
  3. innodb一页为什么要存储两行记录_innodb数据记录存储结构
  4. sqlserver 去除 重复列 [行]
  5. 支持向量机SVM算法原理
  6. ngrok服务器搭建_利用暴露在外的API,无法检测的Linux恶意软件将矛头指向Docker服务器...
  7. 【机器学习】自己手写实现线性回归,梯度下降 原理
  8. 【LeetCode笔记】238. 除自身以外数组的乘积(Java、思路题)
  9. poj 1006 java_POJ 1006 Java:中国剩余定理
  10. 记录——《C Primer Plus (第五版)》第十一章编程练习第四题
  11. SCCM2012系列之四,SCCM2012部署前的SQL Server准备
  12. hmcl手机版下载_最新HMCL下载地址
  13. 遥感水文前景_【充电】学遥感必读的十本专业书
  14. VMware 分布式交换机
  15. unity shader 溶解,上下左右,cutoff
  16. 做嵌入式编程,为什么用的是C语言而不是C++呢?
  17. 重点工作事项督办督查跟踪管理方案
  18. 高红梅 第二章 第二节 性别焦虑、两性关系与个人身份认同的困境
  19. 计算机系统基础(第一章习题)
  20. 【无标题】操作码和地址码

热门文章

  1. 2019年个人所得税计算机模板,2019年最新个税计算Excel模版,人手一份!
  2. 网件RAX120刷机教程
  3. 大数据教学竞赛科研平台设计思路
  4. 千万别和女程序员做同事!
  5. 网络新文化现象:newbilitynbsp;(不代表…
  6. 追寻本质还是流于形式
  7. 怎样用python做词云_一步一步教你如何用Python做词云
  8. Arcmap做地形地貌图流程
  9. 手绘类短视频怎么制作?从剪辑到配音,后期制作也很重要
  10. 2022年全新PHP程序开发在线工单管理系统源码,售后工单系统