设计具有FoTA支持的嵌入式系统

时间:2015-08-03 18:56:21

标签: embedded updates firmware iot

我正在设计一个支持触摸屏的嵌入式系统,并将与电机控制器进行通信。但是,该设备需要通过Wi-Fi模块支持固件更新。

以下是我的具体问题: 使用ESP266可以有效地将数据发送到我的服务器(带有MySQL数据库的Apache),但是这个模块可以用来下载固件更新吗? (我很难在这上面找到任何东西。) 如果不是什么会是一个更有效的模块/方法?

分发固件更新的典型服务器设置是什么样的?它会使用TCP / IP还是FTP?我不认为会分发更多10,000个这样的设备,固件本身可能会> = 50MB。

就固件闪存而言,我正在考虑使用专用于存储更新固件的内存位置,并让启动加载程序检查是否有新固件。如果有,它将开始闪烁新固件。什么是确保这是原子的好方法?引导程序是最好的地方还是其他更合适的地方?

2 个答案:

答案 0 :(得分:1)

分发固件以进行更新的理想方式对用户来说是最不痛苦的。

话虽如此,您希望安全性能够避免其他人干涉您的硬件。 无论是FTP,HTTP还是SSL / TLS加密变体都取决于偏好。

安全认证固件更新的要求是数字签名套件。如果您的系统能够运行IP堆栈,它可能有资源来进行签名验证。针对嵌入式系统优化的商业解决方案适合4.5kB的ROM并完全从堆栈运行(以验证数字,请转到此处:https://www.segger.com/emlib-emsecure.html)。

这不会保护您的固件不被读出,但如果目标系统没有注意到它就无法修改。基本上,引导加载程序将验证签名并确定固件是否来自原始源并且未被篡改。

如果要保护固件在传输过程中不被读取,可以使用TLS / SSL解决方案替换签名软件。这会增加内存使用量。

如果我寻找同一家公司提供的解决方案,那么TLS堆栈的资源使用量在RAM中为7k(参见https://www.segger.com/pr-emssl-v2.html)。他们尚未发布ROM使用,但如果我没记错,它已经介于20到30 kByte之间。

如果您使用TLS,请创建自己的证书!不要依赖认证服务器,因为它们可能被感染。无论如何,这将是一个点2点连接,没有其他人参与,所以你知道使用哪个证书,所有其他证书都可以被拒绝。

答案 1 :(得分:0)

在固件更新协议上:

  • 不要使用普通FTP等不安全的协议。
  • 使用基于TLS的内容,并检查服务器证书是否正确。
  • 可能的协议是HTTPS,即简单的HTTP GET over TLS。

关于可扩展性:

  • 如果设备下载固件更新,请长时间分发来自不同设备的请求,例如时间= 1am +(serialNumber MOD 240),以分钟为单位。