固件空中升级 (OTA, Over-The-Air) 是任何联网设备的重要功能之一,支持开发人员通过远程更新固件,以发布新功能或修复错误。乐鑫特权隔离框架中包含两类应用程序:受保护的应用程序 (protected_app) 和用户应用程序 (user_app) ,这两类应用程序的空中升级可以独立完成。本文将介绍乐鑫特权隔离框架的独立 OTA 升级功能。
目录
ESP-IDF 的 OTA 升级流程
乐鑫特权隔离框架的 OTA 升级流程
OTA 升级流程(用户应用程序)
启动流程(用户应用程序)
Highlights 亮点
ESP-IDF 的 OTA 升级流程
ESP-IDF 在进行 OTA 升级时,使用两个独立的分区系统,来实现安全固件升级。
相关内容可见我们之前的博客文章: OTA 升级框架
乐鑫特权隔离框架的 OTA 升级流程
ESP 特权隔离框架为了兼顾受保护应用程序和用户应用程序的独立 OTA,扩展了 ESP-IDF 的 OTA 机制。它的分区表结构可以实现对受保护应用和用户应用的独立更新。
# ESP Privilege Separation Partition table
# Name, Type, SubType, Offset, Size, Flags ESP Privilege Separation Partition table
nvs, data, nvs, , 0x6000,
phy_init, data, phy, , 0x1000,
otadata, data, ota, , 0x2000,
uotadata, data, user_ota,, 0x2000,
ota_0, app, ota_0, , 1500K,
ota_1, app, ota_0, , 1500K,
user_0, app, user_0, , 256K,
user_1, app, user_1, , 256K,
· otadata 分区负责为受保护的应用程序选择活动的固件。otadata 分区的大小为 4 KiB。
· uotadata 分区负责为用户应用程序选择活动的固件。uotadata 分区的大小为 4 KiB。
· ota_0 和 ota_1 分别为受保护应用程序的活动和非活动分区。由于受保护应用程序中含有大量代码,因此这两个分区的大小为 1,500 KiB。
· user_0 和 user_1 分别为用户应用程序的活动和非活动分区。由于用户程序应用程序均为轻量级,因此这两个分区的大小为 256 KiB。
OTA 升级流程(用户应用程序)
OTA 功能是联网设备最重要的功能之一。为了保护这一重要功能不被恶意使用,OTA 功能本身也是受保护应用程序之一。这种设计也可以使用户应用程序免于 OTA 更新的相关工作,因此开发也更容易。
- 用户应用程序在发起 OTA 升级时,首先向受保护应用程序发送一个 URL,这个 URL 中包括最新的用户应用程序固件。
- 接着,受保护的应用程序将对收到的 URL 进行健全性测试,并安排一个 job 在后台执行 OTA 更新,之后返回至用户应用程序。
- 最后,该 job 将在非活动用户分区中下载固件镜像,更新用户应用程序 uotadata 分区中的条目,并重新启动设备。
乐鑫特权隔离框架还支持安全 OTA 功能,即受保护应用程序可额外通过验证用户应用程序的签名,来验证用户应用程序的真实性。但需要注意,该功能需要单独使能。
启动流程(用户应用程序)
- 乐鑫特权隔离机制的启动引导流程与 ESP-IDF 的经典启动引导流程略有不同。二级引导程序首先启动受保护的应用程序,然后受保护的应用程序将启动用户应用程序。
- 受保护应用程序根据 uotadata 分区,选择活动的用户分区。
乐鑫特权隔离机制还支持“回滚”功能,一旦更新后的用户应用程序出现任何意外情况,受保护的应用程序均可以将用户应用程序回滚至 OTA 之前的版本。
Highlights 亮点
- OTA 功能完全由受保护的应用程序处理,使用户应用程序免于 OTA 更新的相关工作,因此开发也更容易。
- 受保护的应用程序可提供安全 OTA 功能,确保只有受信任的用户应用程序才能在设备上执行。
- 支持“应用程序回滚”的故障安全选项,以防用户应用程序下载不正确或在启动期间出现意外等情况。
ESP 特权隔离仓库中提供了用户 OTA 示例,欢迎您的测试。如有任何问题或反馈,请随时在 GitHub 仓库中提交 issue。
您还可以点此观看视频演示了使用 ESP RainMaker® 和乐鑫特权隔离机制的用户应用程序如何进行 OTA 升级。