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