我正在设计一个支持触摸屏的嵌入式系统,并将与电机控制器进行通信。但是,该设备需要通过Wi-Fi模块支持固件更新。
以下是我的具体问题:使用ESP266可以有效地将数据发送到我的服务器(带有MySQL数据库的Apache),但是这个模块可以用来下载固件更新吗? (我很难在此找到任何东西。)如果不是什么会是一个更有效的模块/方法?
分发固件更新的典型服务器设置是什么样的?它会使用TCP / IP还是FTP?我不认为会分发更多这些设备,固件本身可能> = 50MB。
至于固件闪存,我正在考虑有一个专用于存储更新固件的内存位置,并让启动加载程序检查是否有新的固件。如果有,它将开始闪烁新固件。什么是确保这是原子的好方法?引导程序是最好的地方还是其他更合适的地方?
分发固件以进行更新的理想方式对用户来说是最不痛苦的。
话虽如此,您希望安全性避免其他人干涉您的硬件。无论是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点连接,没有其他人参与,因此您知道要使用哪个证书,并且可以拒绝所有其他证书。
在固件更新协议上:
关于可扩展性: