安全现场更新嵌入式Linux的推荐技术

道格·柯里(Doug Currie):

基于嵌入式Linux的设备通常需要一种机制来更新应用程序和系统文件。例如,具有USB端口的(非联网的)实验室仪器可以从USB记忆棒获取软件更新。

运行脚本将文件复制到设备内部闪存中很简单。但是,存在在更新过程中设备掉电并结成砖的危险。

应用程序文件的情况要容易一些,因为可以复制应用程序目录,更新一个副本并快速交换旧目录和新目录,从而最大程度地减少故障窗口。

对于内核和系统文件而言,事情变得更为复杂,因为它们散布在整个文件系统中。

我们在文件系统中使用了硬链接和软链接来标识关键文件。我们在文件和档案上使用散列来验证文件的完整性。如果从更新的文件系统启动失败,我们已经考虑在内核中使用紧急ramfs提供后备。

您如何处理此要求?

弗洛洛:

我将使用与应用程序文件相同的方法:制作关键文件并完成自己的分区,链接到它们,并复制分区。在所有init中,首先应检查链接是否全部显示在同一分区上,否则请重置链接(到具有特定文件最新日期的文件的分区)。如果要更新,只需将所有内容复制到新分区上,如果一切都很好(crcs ok),则遍历文件并为每个文件设置从一个文件系统到另一个文件系统的链接。

这样,您的关键文件应始终处于正常状态。

场景:

  1. 将文件复制到新分区时更新失败

    没问题,因为链接仍然显示到旧的工作链接。

  2. 链接时更新失败

    没问题,因为所有新文件都是有效的并且已经被复制(否则重新链接步骤就不会开始),安装程序检查是否正确

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章