下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

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.hota_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 设置指南中的说明生成以下实体:

  1. 设备端点。
  2. AWS IoT 事物(以及关联的 ThingName)。
  3. PEM 编码的设备证书。
  4. PEM 编码的私钥。
  5. 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 将从该存储桶中读取映像并将其发送到设备。

生产工作流程示例:

  1. 编写 MCU 固件,集成 OTA 客户端库源代码。
  2. 使用初始固件对设备硬件 (MCU) 进行编程。
  3. 在本地更改和测试固件。
  4. 为新版本的固件生成二进制文件。
  5. 将新版本上传到 S3,并使用上传的固件创建 OTA 作业。

运行演示

构建并运行 OTA 演示项目

OTA 演示项目可从 此处下载。 点击 此处,查看项目构建说明。在继续之前,请验证是否能够构建并运行该项目。

创建 OTA 更新作业

此时,您应该已经:

  • 使用 AWS IoT Service 创建 AWS IoT 事物。
  • 设置 S3 存储桶并管理各种服务的权限。
  • 将“更新”的固件映像上传到 S3 存储桶。
  • 完成代码签名所需的设置。
  • 配置在设备上运行的 OTA 客户端。

运行 OTA 客户端并设置云服务之后,下一步是 创建 OTA 作业,向设备发送新的固件映像。首先转到 AWS IoT 控制台

  1. 在 AWS IoT 控制台的导航窗格中,选择 Manage,然后选择 Jobs然后按 Create Job

    创建作业 - 点击放大

  2. 选择 Create FreeRTOS OTA update job, 然后按 Next

    创建 OTA 更新作业 - 点击放大

  3. OTAjob properties 页面上,输入 Job name, 即 FreeRTOS OTA 更新作业的名称(例如,"ota_sim_update")。您可以选择输入 Description 并向作业 添加 Tags。然后按 Next 继续。

    OTA 作业属性 - 点击放大

  4. 您可在单个设备或一组设备上部署 OTA 更新。在 OTA file configuration 页面的 Devices to update 下,选择与要更新的设备关联的事物或事物组。在 Select the protocol for file transfer 下,选中 MQTT 旁边的复选框。

    选择要更新的设备 - 点击放大

  5. Sign and choose your file 下,选中默认选项 Sign a new file for me。 在 Code signing profile 下,按 Create new profile 按钮, 该按钮位于 Existing code signing profile 旁边。

    选择要 OTA 的文件 - 点击放大

  6. Create a code signing profile 页面的 Profile name 下,输入 "ota_codesigning"。 在 Device hardware platform 下,选择 "Windows Simulator"。在 Code signing certificate 下,更改默认值并选中 Select an existing certificate 复选框。在 Certificates 下,选择 您之前生成的证书和证书私钥。如果您遵循了建议, 那它们将被命名为 "ecdsasigner.crt" 和 "ecdsasigner.key"。然后按 Import 按钮。在 Path name of code signing certificate on device 下,输入 刚刚导入的 "ecdsasigner.crt" 证书的路径。但是,演示时,应该在此处输入 "/" 作为路径。
    最后,点击 Create 按钮创建代码签名配置文件。

    创建代码签名配置文件 - 点击放大

  7. 返回 OTA file configuration 页面,在 File 下,更改默认值 并选中 Select an existing file 的复选框,然后按 Browse S3 按钮并选择您在上一步骤中上传至 S3 的可执行文件。在 Path name of file on device 下,输入 "/"。此路径是在 OTA 更新期间用来保存下载文件的位置 。

    在设备上选择 S3 文件和位置 - 点击放大

  8. IAM role 下,选择为 OTA 进程创建的 IAM 角色。然后按 Next 继续。

    选择 IAM 角色 - 点击放大

  9. OTA job configuration 下,保留为 Job run type (快照)、Job start rollout configuration (恒定速率)和 Job run timeout configuration (无超时)选择的默认设置。然后按 Create job 按钮以完成 OTA 更新作业的创建。

    OTA 作业配置 - 点击放大

  10. 您可以通过按 View Job 弹出式选单或 在 AWS IoT 控制台中导航到 Manage > Jobs 来监控此作业的状态。该作业将显示为 "IN PROGRESS",直到设备成功下载映像。

    OTA 作业状态 - 点击放大
  11.  

    接收更新

    创建作业后,设备即可开始下载更新。您可以通过设备日志监控 下载进度。以下是设备控制台消息的示例:

    MQTT streams handling incoming message
    Incoming data block 

    收到下载的最后一个块后,下列消息将被打印到监视器上:

    OTA Completed successfully!
    作业进程完成后,IoT 控制台中的作业状态将从 "IN PROGRESS" 改为 "COMPLETED"。


    OTA 作业状态 - 点击放大
    Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.