2008-11-13 77 views
9

基于嵌入式Linux的设备通常需要更新应用程序和系统文件的机制。例如,带有USB端口的(非联网的)实验室仪器可以从USB棒获得软件更新。安全地现场更新嵌入式Linux的推荐技术

这将是一个简单的事情,运行脚本文件复制到地方上的设备的内部闪存。但是,在更新过程中,设备可能会失去电源,并最终出现问题。

的应用程序文件的情况比较简单,因为有空间复制应用程序目录,更新一个副本,并迅速交换新旧目录最小化失败窗口。因为它们是整个文件系统的铺开

事情内核和系统文件dicier。

我们已经使用硬和文件系统软链接识别的重要文件。我们在文件和存档上使用散列来验证文件的完整性。我们已经考虑在内核中使用紧急ramfs来提供从更新后的文件系统启动失败时的回退。

你对这个要求的方法是什么?

+0

请参阅我对此问题的回答:http://stackoverflow.com/questions/5167226/linux-based-firmware-how-to-implement-a-good-way-更新?lq = 1 – Patrick 2013-08-19 14:33:32

回答

1

我会采用与应用程序文件相同的方法: 为关键文件做好准备,并完成自己的分区,链接到它们并复制分区。在你的所有init中,你应该首先检查链接是否显示全部到同一个分区,如果没有,则重置它们(对具有特定文件的最新日期的文件的分区)。如果你想更新,只需将所有内容复制到新分区上,并且如果一切正常(crcs ok)就可以遍历文件并为每个文件系统的链接设置。

这样你的重要文件应当始终处于清醒状态。

方案:同时将文件复制到新的分区

没有问题,因为链接显示还是旧的工作的人

  1. 更新失败。而联

    没有问题,因为所有新文件是有效的,并且已经被复制(否则重新链接的步骤不会必须启动),设置检查纠正这一

2

如果必须保证可靠性,您可以有两个闪存分区(或者甚至芯片),一个与当前工作的配置和一个新的配置。然后使用一个硬件看门狗,它将重置单元并将活动的引导闪存分区切换到“最后一次正确的”配置。

+0

这是一个很好的建议,但让我们假设;-)为讨论起见,硬件被一个闪存设备冻结并且没有看门狗。 – 2008-11-15 05:37:04

2

至少有两个分区

  • 更新失败。我建议4

    • 启动

    • 备用引导

    • 程序数据备份

    • 程序性数据

    用grub启动后备启动备用如果引导失败。

    所以如果更新失败,备用工作。

    永远不要更新引导装载程序。

    如果数据分区已经过烘烤,请重新格式化并复制到备份数据分区上。

    现在你不能失败,除非闪存盘死亡。 如果您使用的是COTS硬件,并且主磁盘是Compact Flash,那么您可以使用一个USB钥匙进行物理隔离备份。

  • 0

    恕我直言,任何不是原子的更新都可能会破坏系统或使一致性检查非常困难。我同意必须避免更新引导加载程序,因为它没有关闭电源。 通常,制造商希望从固件x.x.x更新到版本y.y.y,而不必担心内核和/或单个文件是否更新。更新单个文件可能成为服务的噩梦,因为很难理解客户硬件上运行的是什么。也许你正在将双重复制方法(应用程序是冗余的)与单一复制方法混合使用。我认为这并没有什么帮助,因为系统的完整性是由链中的弱组件完成的。如果根文件系统的更新失败,则重复应用程序并不重要。

    如果需要,双重复制方法可以保证更新不会停止服务。但它需要大量资源,因为所有组件都必须重复。就我个人而言,我使用回退方法,如果主应用程序失败或最后一次更新未成功,则启动RAM中的小rootfs。这个后备系统由bootloader自动启动,如果出现任何问题,请从USB笔更新系统(如果需要本地更新)。

    我从来没有找到关于这些问题的OSS项目,最近我根据以前的经验开始了一个新项目。我有几种产品在运行,我的客户对此感到满意。

    也许你可以看看它。您可以在github.com/sbabic/swupdate找到“swupdate”(项目名称)的来源。

    斯特凡诺

    0

    我想你想什么在这里实现的更新过程的原子性。原子性对于嵌入式设备至关重要,其中一个重要原因是功耗;但也可能有其他硬件/网络问题。我在更新的上下文中使用的原子性的定义是:

    • 的更新总是要么完全完成,或者根本没有
    • 除了更新,没有软件组件曾经看到一个半安装的更新

    对于嵌入式Linux,有几个软件组件可能需要更新并有不同的设计可供选择;这里有一篇论文:https://mender.io/user/pages/04.resources/_white-papers/Software%20Updates.pdf