本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon IoT空中传输 (OTA) 库
此页面上的内容可能不是 up-to-date。有关最新更新,请参阅 Freertos.org 图书馆页面
介绍
Amazon IoTOver-the-air (OTA) 更新库允许您使用 HTTP 或 MQTT 作为协议来管理 FreeRTOS 设备固件更新的通知、下载和验证。通过使用 OTA 代理库,可以从逻辑上将固件更新与设备上运行的应用程序进行隔离。OTA 代理可以与应用程序共享网络连接。通过共享网络连接,有可能节省大量的 RAM。此外,可使用 OTA 代理库来定义特定于应用程序的逻辑,以测试、提交或回滚固件更新。
物联网 (IoT) 将互联网连接扩展到传统上未连接的嵌入式设备。这些设备可以编程为通过互联网传输可用数据,并且可以进行远程监视和控制。随着技术的进步,这些传统的嵌入式设备正在消费者、工业和企业领域快速获得互联网功能。
IoT 设备通常大量部署,通常部署在人工操作员难以或不切实际的地方。想象一下发现可能暴露数据的安全漏洞的场景。在这种情况下,使用安全补丁快速可靠地更新受影响的设备非常重要。如果无法执行 OTA 更新,也可能很难更新地理位置分散的设备。让技术人员更新这些设备既昂贵又耗时,而且往往不切实际。更新这些设备所需的时间使它们在更长的时间内面临安全漏洞。召回这些设备进行更新也将代价高昂,并且可能会因停机而对消费者造成严重干扰。
Over the Air (OTA) 更新使得无需昂贵的召回或技术人员拜访即可更新设备固件。此方法提供以下优势:
-
安全-能够快速响应在现场部署设备后发现的安全漏洞和软件错误。
-
创新-随着新功能的开发,产品可以经常更新,从而推动创新周期。与传统更新方法相比,更新可以快速生效,停机时间最短。
-
成本-与传统上用于更新这些设备的方法相比,OTA 更新可以显著降低维护成本。
提供 OTA 功能需要考虑以下设计因素:
-
安全通信-更新必须使用加密的通信渠道,以防止下载内容在传输过程中被篡改。
-
恢复-更新可能由于网络连接间歇或收到无效更新等原因而失败。在这些情况下,设备需要能够恢复到稳定状态并避免陷入困境。
-
作者验证-必须验证更新是否来自可信来源,同时还必须进行其他验证,例如检查版本和兼容性。
有关使用 FreeRTOS ory (缓冲区) 设置 OTA 更新的更多信息,请参阅FreeRTOS 无线更新。
Amazon IoT空中传输 (OTA) 库
Amazon IoTOTA 库使您能够管理新可用更新的通知、下载更新以及对固件更新执行加密验证。使用 over-the-air (OTA) 客户端库,您可以在逻辑上将固件更新机制与设备上运行的应用程序分开。 over-the-air (OTA) 客户端库可以与应用程序共享网络连接,从而节省资源受限设备的内存。此外, over-the-air (OTA) 客户端库允许您定义特定于应用程序的逻辑,用于测试、提交或回滚固件更新。该库支持不同的应用程序协议,例如消息队列遥测传输 (MQTT) 和超文本传输协议 (HTTP),并提供各种配置选项,您可以根据自己的网络类型和条件进行微调。
该库的 API 提供以下主要功能:
-
注册接收通知或轮询可用的新更新请求。
-
接收、解析和验证更新请求。
-
根据更新请求中的信息下载并验证文件。
-
在激活收到的更新之前运行自检以确保更新的功能有效性。
-
更新设备的状态。
该库使用Amazon服务来管理各种与云相关的功能,例如发送固件更新、监控多个区域的大量设备、缩小错误部署的爆炸半径以及验证更新的安全性。此库可以与任何 MQTT 或 HTTP 库一起使用。
该库的演示演示了在 FreeRTOS 设备上使用 CoreMQTT 库和Amazon服务的完整 over-the-air 更新。
功能
下面是完整的 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 操作系统状态的状态码转换为字符串。
API 参考
有关更多信息,请参阅 Amazon IoTOver-the-air 更新:函数
示例用法
使用 MQTT 协议的典型的支持 OTA 的设备应用程序采用以下 API 调用顺序来驱动 OTA 代理。
-
Connect 到Amazon IoT CoreMQTT 代理。有关更多信息,请参阅 CoreMQTT 代理库。
-
通过调用(包括缓冲区
OTA_Init
、所需的 ota 接口、事物名称和应用程序回调)来初始化 OTA 代理。回调实施特定于应用程序的逻辑,于 OTA 更新作业完成后执行。 -
OTA 更新完成后,FreeRTOS 使用以下事件之一调用任务完成回调:
accepted
rejected
、或self test
。 -
如果新的固件映像已遭拒绝(例如,由于验证错误),应用程序通常可以忽略通知并等待下一次更新。
-
如果更新有效且标记为“已接受”,可调用
OTA_ActivateNewImage
重置设备并启动新的固件映像。
移植
有关将 OTA 功能移植到您的平台的信息,请参阅 FreeRTOS 移植指南中的移植 OTA 库。
内存使用
Amazon IoTOTA 的代码大小(使用 GCC 为 ARM Cortex-M 生成的示例) | ||
---|---|---|
文件 | 使用-O1 进行优化 | 使用-Os 优化 |
ota.c | 8.3K | 7.5K |
ota_interface.c | 0.1K | 0.1K |
ota_base64.c | 0.6K | 0.6K |
ota_mqtt.c | 2.4K | 2.2K |
ota_cbor.c | 0.8K | 0.6K |
ota_http.c | 0.3K | 0.3K |
估计数总额 | 12.5K | 11.3K |