Amazon IoT无线 (OTA) 库 - FreeRTOS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon IoT无线 (OTA) 库

介绍

这些区域有:Amazon IoT无线 (OTA) 更新库可以使用 HTTP 或 MQTT 作为协议来管理 FreeRTOS 设备固件更新的通知、下载和验证。通过使用 OTA 代理库,可以从逻辑上将固件更新与设备上运行的应用程序进行隔离。OTA 代理可以与应用程序共享网络连接。通过共享网络连接,有可能节省大量的 RAM。此外,可使用 OTA 代理库来定义特定于应用程序的逻辑,以测试、提交或回滚固件更新。

物联网 (IoT) 将互联网连接扩展到传统上未连接的嵌入式设备。可以对这些设备进行编程,以便通过互联网传输可用数据,并可以进行远程监控和控制。随着技术的进步,这些传统嵌入式设备正在快速获得消费、工业和企业领域的互联网功能。

IoT 设备通常大量部署,而且通常部署在人工操作员难以访问或不切实际的地方。想象一下,发现了可以暴露数据的安全漏洞的情况。在这种情况下,使用安全修复程序快速可靠地更新受影响的设备非常重要。如果没有执行 OTA 更新的能力,更新地理位置分散的设备也可能很困难。让技术人员更新这些设备将成本高昂、耗时,而且往往是不切实际的。更新这些设备所需的时间使他们在较长的时间内暴露于安全漏洞。召回这些设备进行更新也会昂贵,并且可能会由于停机时间对消费者造成重大干扰。

通过 Air (OTA) 更新可以在无需昂贵的召回或技术人员访问的情况下更新设备固件。该方法增加了以下好处:

  • 安全-能够快速响应在现场部署设备后发现的安全漏洞和软件错误。

  • 创新-随着新功能的开发,可以经常更新产品,推动创新周期。与传统的更新方法相比,更新可以在最短的停机时间内快速生效。

  • Cost-与传统用于更新这些设备的方法相比,OTA 更新可以显著降低维护成本。

提供 OTA 功能需要以下设计注意事项:

  • 安全通信-更新必须使用加密的通信渠道,以防止下载在传输过程中被篡改。

  • 恢复-由于间歇性网络连接或收到无效更新之类的情况,更新可能会失败。在这些情况下,设备需要能够恢复稳定状态并避免变成砖块。

  • 作者验证-必须验证更新才能来自可信来源,以及其他验证,例如检查版本和兼容性。

有关使用 FreeRTOS 设置 OTA 更新的更多信息,请参阅FreeRTOS 无线更新.

Amazon IoT无线 (OTA) 库

这些区域有:Amazon IoTOTA 库使您能够管理新可用更新的通知、下载它们以及对固件更新执行加密验证。使用无线 (OTA) 客户端库,您可以从逻辑上将固件更新机制与设备上运行的应用程序分开。无线 (OTA) 客户端库可以与应用程序共享网络连接,从而在资源受限的设备中节省内存。此外,可使用无线 (OTA) 客户端库来定义特定于应用程序的逻辑,以测试、提交或回滚固件更新。该库支持不同的应用程序协议,如消息队列遥测传输 (MQTT) 和超文本传输协议 (HTTP),并提供了各种配置选项,您可以根据网络类型和条件进行微调。

该库的 API 提供了以下主要功能:

  • 注册获取通知或轮询可用的新更新请求。

  • 接收、解析和验证更新请求。

  • 根据更新请求中的信息下载并验证文件。

  • 在激活收到的更新之前运行自检,以确保更新的功能有效性。

  • 更新设备的状态。

这个图书馆使用Amazon用于管理各种云相关功能的服务,例如发送固件更新、监控多个区域的大量设备、减少故障部署的爆炸范围以及验证更新的安全性。该库可以与任何 MQTT 或 HTTP 库一起使用。

该图书馆的演示演示使用 CoreMQTT 图书馆进行了完整的无线更新AmazonFreeRTOS 设备上的服务。

功能

下面是完整的 OTA 代理接口:

OTA_Init

通过在系统中启动 OTA 代理(“OTA 任务”)来初始化 OTA 引擎。可能只存在一个 OTA 代理。

OTA_Shutdown

向 OTA 代理发出关闭的信号。OTA 代理将有选择性地取消订阅所有 MQTT 作业通知主题,停止进行中的 OTA 作业(如果有),并清除所有资源。

OTA_GetState

获取 OTA 代理的当前状态。

OTA_ActivateNewImage

激活通过 OTA 收到的最新的微控制器固件映像。(详细的作业状态现在应当为“自检”。)

OTA_SetImageState

设置当前运行的微控制器固件映像的验证状态(正在测试、已接受或已拒绝)。

OTA_GetImageState

获取当前运行的微控制器固件映像的状态(正在测试、已接受或已拒绝)。

OTA_CheckForUpdate

从 OTA 更新服务请求下一个可用的 OTA 更新。

OTA_Suspend

暂停所有 OTA 代理操作。

OTA_Resume

恢复 OTA 代理操作。

OTA_SignalEvent

向 OTA 代理任务发出事件信号。

OTA_EventProcessingTask

OTA 代理事件处理循环。

OTA_GetStatistics

获取 OTA 消息数据包的统计信息,其中包括接收、排队、处理和丢弃的数据包的数量。

OTA_Err_strerror

OTA 错误的错误代码到字符串转换。

OTA_JobParse_strerror

将 OTA Job 解析错误代码转换为字符串。

OTA_PalStatus_strerror

OTA PAL 状态的状态代码到字符串转换。

OTA_OsStatus_strerror

OTA OS 状态的状态代码到字符串转换。

API 参考

有关更多信息,请参阅 。Amazon IoT无线更新:函数.

示例用法

使用 MQTT 协议的典型的支持 OTA 的设备应用程序采用以下 API 调用顺序来驱动 OTA 代理。

  1. Connect 到Amazon IoTCoremQTT 代理。有关更多信息,请参阅CoreMQTT 代理库

  2. 调用初始化 OTA 代理OTA_Init,包括缓冲区、所需的 ota 接口、事物名称和应用程序回调。回调实施特定于应用程序的逻辑,于 OTA 更新作业完成后执行。

  3. OTA 更新完成后,FreeRTOS 调用具有以下事件之一的作业完成回调:acceptedrejected,或者self test.

  4. 如果新的固件映像已遭拒绝(例如,由于验证错误),应用程序通常可以忽略通知并等待下一次更新。

  5. 如果更新有效且标记为“已接受”,可调用 OTA_ActivateNewImage 重置设备并启动新的固件映像。

移植

有关将 OTA 功能移植到平台的信息,请参阅移植 OTA 库在 FreeRTOS 移植指南。

Memory 使用

代码大小Amazon IoTOTA(使用 GCC 代码 ARM Cortex-M 生成的示例)
文件 使用-O1 优化 使用-OS 优化
ota.c 8.0K 7.2K
ota_Interface.c 0.1K 0.1K
ota_base64.c 0.6K 0.6K
ota_mqtt.c 2.3K 2.2K
ota_cbor.c 0.8K 0.6K
ota_http.c 0.3K 0.3K
估计值总计 12.1K 11.0K