微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ESP32 OTA 无需将代码刷入设备

如何解决ESP32 OTA 无需将代码刷入设备

所以我正在尝试实现一种 OTA 方式来同时更新 100 台设备。现在,我在谷歌上搜索了很多区域,并且总是看到您有一个网络服务器正在运行并在设备本身上上传一个 .bin 文件,然后将该文件刷入设备。

没关系,如果您只有 1-5 台设备,而不是当您拥有 100 台边缘设备时,您不希望通过物理和/或本地 IP 访问这些设备(因为它们遍布全国)。

他们确实可以访问所有互联网并通过 MQTT 与服务器通信,但我们也可以进行一些 API 调用

我想实现的主要目标如下:

ESP 使用一些闪存的“引导加载程序”进行引导,该引导加载程序访问引导加载程序中的预定义服务器地址。 响应是边缘设备应运行的二进制文件。 二进制文件被加载到设备它的 RAM(或者如果需要,一个 SD 卡或某种其他闪存)。 下载二进制文件后,它会被执行不会闪现到设备上。我想要在我拿到设备并想要对二进制文件进行逆向工程时,我只能对引导加载程序进行逆向工程,而不是从服务器中提取的主代码

主要问题是;

  • 这甚至可能吗? (我正在制作一个定制板,以便在需要时可以在上面安装很多特殊组件)
  • 我该怎么做?我完全不知道这是怎么回事
  • 我错过了什么吗?

谢谢!

解决方法

ESP32 可以从它的 instruction RAM 执行代码 - 应该可以做任何你想做的事情,但你可以为你的应用程序使用最多 128 KiB(如果运行单核,+32 KiB)的限制代码。有关内存模型的程序员友好描述,请参阅 this article。然而,这对于具有简单功能的固件来说就足够了,但是像基于 TLS 的 MQTT 之类的东西难以适应 160 KiB 的代码。

另请注意,ESP IDF 不支持此类盛会,因此您将编写大量低级代码,从您自己的自定义链接器脚本和 C 运行时初始化开始。如果您为此做好了准备和预算,那就继续吧 - 这将是一个有趣且具有挑战性的项目。

否则,我建议您评估乐鑫的解决方案,以防止闪存中的代码被读出。您可以使用 AES256 encrypt 整个 Flash(所有内容都可以即时解密),并结合 Secure Boot V2 以确保只有经过批准的图像才能运行。这两种方法都存在漏洞,但通过这种方式,您的产品完成速度可能会快一个数量级。

至于对 100 台设备进行 OTA - 只需几行服务器端代码,您就可以使用 MQTT 连接一次向所有设备发出更新触发命令。 OTA 的实施方式没有区别 - 他们都会很乐意下载新映像并并行更新自己。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。