我正在设计一个支持触摸屏的嵌入式系统,并将与电机控制器进行通信。但是,该设备需要通过Wi-Fi模块支持固件更新。
以下是我的具体问题: 使用ESP266可以有效地将数据发送到我的服务器(带有MySQL数据库的Apache),但是这个模块可以用来下载固件更新吗? (我很难在这上面找到任何东西。) 如果不是什么会是一个更有效的模块/方法?
分发固件更新的典型服务器设置是什么样的?它会使用TCP / IP还是FTP?我不认为会分发更多10,000个这样的设备,固件本身可能会> = 50MB。
就固件闪存而言,我正在考虑使用专用于存储更新固件的内存位置,并让启动加载程序检查是否有新固件。如果有,它将开始闪烁新固件。什么是确保这是原子的好方法?引导程序是最好的地方还是其他更合适的地方?
答案 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)
在固件更新协议上:
关于可扩展性: