OTA(使用 OTA Agent Orchestrator)
序言
虽然此演示使用 AWS IoT OTA 更新服务,但 FreeRTOS 是通用 MIT 授权的开源软件,
可用于任何适合您的 OTA 机制。但我们还是建议,
无论选择哪种 OTA 方法,最好对固件进行数字签名。这样一来,收到新的
可执行映像的设备可以验证该固件来自授权来源,并且未经修改。您可以使用
AWS IoT 代码签名对固件进行签名,也可以使用您自己的代码签名工具进行签名。
演示简介
OTA Agent Orchestrator:此 Orchestrator 旨在模拟旧 OTA 存储库中的 OTA Agent。
OTA Agent Orchestrator 运行时,会使用状态机跟踪下载进程的当前状态。状态机
因接收源自内部调用或主应用程序的事件而受到影响。OTA Agent 负责接收
所有事件并进行相应处理。此演示使用 FreeRTOS、coreMQTT、MQTT 文件流和 IoT 作业库。
OTA Agent 还支持挂起和恢复功能。OTA Agent 可以在 OTA 进程的任何阶段挂起,
而且可以稍后恢复。OTA Agent 可以通过 OtaAgentEventSuspend 事件挂起,并通过
OtaAgentEventResume 事件恢复。
OTA Agent Orchestrator 演示源代码分为 ota_demo.h 和 ota_demo.c 两个文件。点击
此处,即可查看这些文件。
此演示中有三项任务:OTA 任务、MQTT 任务和挂起/恢复任务。有关每项任务的运行情况
以及与其他任务的相互作用,请参阅下文。
OTA 任务
此任务负责管理 OTA Agent 的状态机。processOTAEvents 这一函数
可用于接收并处理所有传入事件。
所有事件的描述如下:
- OtaAgentEventRequestJobDocument:
- 此事件会致使 OTA Agent 向 IoT Core 请求执行挂起的作业。
- OtaAgentEventReceivedJobDocument:
- 收到作业文档时会触发此事件。然后,该事件会解析收到的作业文档并检查
其是否为 OTA 作业。如果收到的作业文档是 OTA 作业,则初始化 MQTT 流下载器,
并发送文件块请求。
- OtaAgentEventRequestFileBlock:
- 此事件创建并发送文件块请求。
- OtaAgentEventReceivedFileBlock:
- 收到包含文件块的 MQTT 消息时,会触发此事件。然后,该事件会解析收到的 MQTT 消息
以提取并解码数据块。
- OtaAgentEventCloseFile:
- 收到最后一个文件块时,会触发此事件。此事件会完成下载并执行
清理。
- OtaAgentEventSuspend:
- 此事件可用于挂起 OTA Agent 的运行。
- OtaAgentEventResume:
- 此事件可用于恢复挂起的 OTA Agent。
MQTT 任务
此任务负责运行 MQTT 进程循环,处理所有传入的 MQTT 消息。收到包含作业文档或文件块的 MQTT 消息时,
该任务会生成相应的事件并将其发送给 OTA Agent。
挂起/恢复任务
此任务用于演示挂起/恢复功能,可定期将挂起和恢复事件发送给
OTA Agent。
演示设置
设置 AWS IoT Core
要设置 AWS IoT Core,请遵循
AWS IoT Core 设置指南。该指南介绍了如何注册 AWS 账户、创建用户以及
向 AWS IoT Core 注册设备。按照 AWS IoT Core 设置指南中的说明生成以下实体:
- 设备端点。
- AWS IoT 事物(以及关联的 ThingName)。
- PEM 编码的设备证书。
- PEM 编码的私钥。
- PEM 编码的根 CA 证书。
模拟器/设备需要实体才能与 AWS IoT Core 连接。
设置 OTA 云服务
简化 OTA 设置向导
我们创建了一个辅助向导以改善 AWS IoT 和 OTA
体验。此脚本能够简化 IoT 事物和 OTA 作业的创建,还提供事物组管理功能。
使用该向导时需要遵循的设置步骤与其他并无不同,它只给出连接到 AWS
IoT 和处理创建任何必要 OTA 相关工具所需的全部信息提示。我们强烈建议使用设置向导,
因为它既能缩短连接到 AWS IoT 生态系统的时间,又比手动设置更易于使用。
准备创建 OTA 更新作业
若要发送 OTA 作业,需要更新存储在 S3 存储桶中的固件映像。AWS IoT OTA Manager Service
将从该存储桶中读取映像并将其发送到设备。
生产工作流程示例:
- 编写 MCU 固件,集成 OTA 客户端库源代码。
- 使用初始固件对设备硬件 (MCU) 进行编程。
- 在本地更改和测试固件。
- 为新版本的固件生成二进制文件。
- 将新版本上传到 S3,并使用上传的固件创建 OTA 作业。
运行演示
构建并运行 OTA 演示项目
OTA 演示项目可从 此处下载。
点击
此处,查看项目构建说明。在继续之前,请验证是否能够构建并运行该项目。
创建 OTA 更新作业
此时,您应该已经:
- 使用 AWS IoT Service 创建 AWS IoT 事物。
- 设置 S3 存储桶并管理各种服务的权限。
- 将“更新”的固件映像上传到 S3 存储桶。
- 完成代码签名所需的设置。
- 配置在设备上运行的 OTA 客户端。
运行 OTA 客户端并设置云服务之后,下一步是
创建 OTA 作业,向设备发送新的固件映像。首先转到
AWS IoT 控制台。