首页 文章

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

提问于
浏览
0

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

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

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

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

2 回答

  • 1

    在固件更新协议上:

    • 不要使用普通FTP之类的不安全协议 .

    • 使用基于TLS的内容,并检查服务器证书是否正确 .

    • 可能的协议是HTTPS,即通过TLS进行的简单HTTP GET .

    关于可扩展性:

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

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

    话虽如此,您希望安全性避免其他人干涉您的硬件 . 无论是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点连接,没有其他人参与,因此您知道要使用哪个证书,并且可以拒绝所有其他证书 .

相关问题