为嵌入式Linux设备实现更新/升级系统

特伦基:

我有一个运行在嵌入式Linux设备上的应用程序,现在不时对软件进行更改,有时还对根文件系统甚至安装的内核进行了更改。

在当前的更新系统中,仅删除旧应用程序目录的内容,并在其上复制新文件。对根文件系统进行更改后,新文件将作为更新的一部分提供,并仅在旧文件上进行复制。

现在,当前方法存在几个问题,我正在寻找改善情况的方法:

  • 用于创建文件系统映像的目标的根文件系统未版本化(我认为我们甚至没有原始的rootfs)。
  • 手动选择用于更新的rootfs文件(而不是diff)
  • 更新不断增长,成为皮塔饼。现在,更新/升级之间存在分歧,其中升级包含较大的rootfs更改。
  • 我的印象是,如果完全执行更新中的一致性检查,则相当脆弱。

要求是:

  • 应用程序更新包不应太大,并且在进行修改的情况下它还必须能够更改根文件系统。
  • 升级可能更大,并且仅包含进入根文件系统的内容(例如新库,内核等)。更新可能需要安装升级。
    升级可以包含整个根文件系统,而只是dd在目标的闪存驱动器上做一个吗?
  • 创建更新/升级程序包应尽可能自动进行。

我绝对需要某种方法来对根文件系统进行版本控制。这必须以某种方式完成,我可以从中计算出某种形式,diff以用于更新目标设备的rootfs。

我已经研究了Subversion,因为我们将其用于源代码,但这不适用于Linux根文件系统(文件许可权,特殊文件等)。

现在,我已经创建了一些shell脚本,它们可以给我类似于的脚本,svn diff但是我真的很想知道是否已经存在可以运行且经过测试的解决方案。

使用这样diff的,我想升级将简单地成为一个包含基于已知根文件系统状态的增量更新的软件包。

您对此有何想法?您将如何实施这样的系统?我更喜欢一个可以在不太多的时间内实现的简单解决方案。

gby:

我相信您在这个问题上看错了-非原子性的任何更新(例如dd文件系统映像,替换目录中的文件)都被设计破坏了-如果在更新过程中电源中断,则系统是在嵌入式系统中,电源可能会在升级过程中中断。

我写了一份白皮书,介绍如何正确地在嵌入式Linux系统上进行升级/更新[1]。它在OLS上展示。您可以在这里找到该论文:https : //www.kernel.org/doc/ols/2005/ols2005v1-pages-21-36.pdf

[1]本·约瑟夫,吉拉德。“构建与Murphy兼容的嵌入式Linux系统。” Linux研讨会2005。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章