多年来,互联网提供了一种独特的媒介,嵌入式开发人员可以通过它更新他们的嵌入式固件。在互联网出现之前,技术人员必须对设备进行物理访问,以便他们可以访问引导加载程序并更新固件。如今,无论该设备位于世界的哪个地方,它都可以打电话回家并要求提供最新最好的固件以及错误修复和功能更新。
在设计如何远程更新嵌入式系统时,应考虑以下五个技巧:
1.首先下载整个图像
有许多技术可用于更新嵌入式系统的固件。风险最低的方法之一是在将整个固件映像写入闪存之前等待本地接收到整个固件映像。等待整个固件映像有许多优点。首先,如果 Internet 暂时中断或嵌入式系统无法访问 Internet,则不必中止更新过程,也不会使系统处于未知状态。其次,接收整个图像允许在开始写入图像之前对其进行验证。校验和或可疑字符串序列可能被识别为故障,并且不会更新固件。
2. 内置多个应用镜像
有时,开发人员很幸运,并且在微控制器上拥有过多的 Flash。额外的 Flash 空间开辟了将 Flash 空间分解为多个应用程序空间的可能性。例如,可能有工厂固件映像位置、更新应用程序槽 1 位置和更新应用程序映像槽 2 位置。新的固件更新将首先存储在应用程序插槽 1 中,然后存储在应用程序插槽 2 中。随后的每个更新都将在两者之间反弹。如果镜像更新失败,嵌入式系统可以继续运行之前的镜像。如果两个应用程序槽都失败了怎么办?原始固件仍然在板上,嵌入式开发人员希望在带有引导加载程序的安全闪存中,并且可以用作最坏情况下的后备方案。
3.考虑使用增量生成器
通过蜂窝网络将整个固件映像传输到连接互联网的设备可能很快就会变得昂贵。为了防止标准网络上的高额费用甚至过度使用带宽,可以使用增量生成器。增量生成器主要查看当前正在使用的 Flash 图像并确定它是如何变化的。仅将更改发送到引导加载程序进行更新。在基于文件系统的嵌入式系统中,这是一项微不足道的练习,但在低成本微控制器环境中,它可能更具挑战性。例如,可能需要手动定位模块或代码块以提供额外的闪存空间,以便模块可以增长而不会导致增量生成变得过多。
4.加密图像
安全性几乎与物联网一样受到关注——这是有充分理由的。连接到 Internet 的设备需要安全。有多种方法可以做到这一点,但第一步是加密固件更新映像。加密使黑客更难获得对固件的访问权限,从而更难以深入了解系统的工作原理。
5.验证情况状态
在远程执行固件更新之前,应验证系统的状态。例如,如果特定系统由电池供电并且电池电量低怎么办? 在电池电量不足时启动更新程序可能会导致系统在写入闪存时重置,或者更糟糕的是,系统可能会在更新期间死机。那么固件的最终状态是什么? 要检查的另一种情况是设备当前是否正在使用中。人们讨厌设备在做某事时突然开始执行更新的方式。嵌入式开发人员应该检查嵌入式系统应并确认其处于良好状态,并有足够的时间安全且正确地执行更新。