下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

Delta Over-the-Air 更新

随着接入云端的嵌入式设备与日俱增,通过 Over-the-Air (OTA) 方式更新设备软件的功能变得日益重要。 随着接入云端的嵌入式设备与日俱增。OTA更新 利于操作员 大规模、快速可靠地将安全补丁程序应用于已部署设备内并添加新功能, 而无需费钱费事地请技术人员去处理。

虽然所有连接设备解都从 OTA 中获益,但是诸如 LoRaWAN 和 NB- IoT 之类的低带宽网络则面临更多挑战。这些网络受到带宽的严重限制, 如果需要想这类设备传送大型固件(或其他)映像,则进行 OTA 更新 的成本高昂。对于接入耗电较高的 Wi-Fi 和蜂窝网络的电池供电设备而言, 无线传送大尺寸映像也是一个问题——无线设备关闭越早, 电池的续航时间就越长。因此,可见引入 减小映像传输大小的机制,对这两个用例都是有益的。这篇博文 则描述了此类机制 - Delta Over-the-Air 更新。不同于向设备 发送固件映像, Delta Over-the-Air 更新 只发送 实际已发生变化的映像部分。

Delta Over-the-Air 更新 使用二进制差异

Delta Over-the-Air 更新可以降低 OTA 的大小, 方法是:仅发送设备上当前运行的固件与新固件之间的二进制差异(二进制差异), 而非发送完整固件映像。向设备发送 二进制差异作为补丁程序文件。然后,在设备上运行的补丁程序库会重建 来自补丁文件的新固件映像和设备上已有的固件。THE 下述两个组件是二进制差异机制的主要部分:

  • Diff Utility – 开发人员在其 PC 上运行此实用程序 计算当前固件与新固件之间的二进制差值。 将此差值作为补丁文件通过无线方式发送到设备。
  • Patching Library – 补丁程序库在设备上运行, 并从补丁文件和设备当前固件上重建 新固件。

下图显示了更新设备或设备群上的固件的过程 (其中设备使用 Delta Over-the-Air 更新):

可用的二进制差异算法包括 bsdiff xdelta jojodiff 、以及 courgette。应用程序开发者可以自由选择 最适合其应用的算法。选择二进制差异算法时, 需要牢记内存要求、性能和 增量图像。

使用 AWS IoT OTA 库执行 Delta Over-the-Air 更新

AWS IoT OTA 库在设备上运行, 对新可用更新通知的接收进行管理,下载更新, 并对收到的更新执行加密验证。同一库可用于 Delta Over-the-Air 更新。AWS IoT OTA 库要求应用程序 提供以下接口的实现方式:

  • MQTT 接口
  • HTTP 接口
  • OS 接口(操作系统接口)
  • PAL 接口(平台抽象层接口)

唯一需要更新以兼容 Delta Over-the-Air 更新的组件是 OTA PAL。更具体地说,OTA PAL 的 OtaPalCloseFile_t 函数必须 调用补丁库以从补丁文件和当前固件 重构新固件映像。

以下伪代码表示 OtaPalCloseFile_t 函数的实现示例 其中,这一函数支持 Delta Over-the-Air 更新:

入门指南

此示例开始,其主要运用 jojodiff 实用程序和 janpatch 库演示 Delta Over-the-Air 更新, 演示位置:Espressif 的 ESP32 片上系统 (SoC.)。 如要查看示例运行的步骤分解说明, 请点击这里

结论

Delta Over-the-Air (OTA) 更新 减少了在带宽受限或电池供电的网络设备上,OTA 更新 的时间、成本和耗电量。如果目前使用的是 AWS IoT OTA 库,要获得这些优势,可以在相关函数(负责将接收到的映像写入设备的非易失性存储器) 中添加打补丁阶段。 有几种 可用的补丁算法,每种算法在资源需求、 处理速度,映像尺寸缩小程度等方面都各有优劣。

作者简介

Prasad:Amazon Web Services 软件开发工程师,专注于开发各类库,帮助边缘设备连接 IoT。入职 AWS 之前,主要从事低功率网络堆栈的开发,以及用于车载信息娱乐系统、蜂窝调制解调器和工业分析仪器的嵌入式软件开发。
查看此作者的文章
FreeRTOS 论坛 获得来自专家的行业领先支持,并与全球同行合作。 查看论坛
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.