Linux如何以编程方式从指定文件重新启动以支持电源中断容错升级?

时间:2012-01-25 22:21:37

标签: linux linux-kernel embedded-linux

当我们的远程Linux机箱启动时,我希望它检查更新的启动文件,并重新启动该新文件(首先验证其完整性)。

是否有Linux功能可以从给定的启动文件重启Linux? 例如: reboot_function(filepath); ..文件路径是Linux引导文件的路径和文件名,与之前引导的路径和文件名不同。

目的: 我试图创建一个100%电源中断容忍方式远程升级现场Linux软件。如果在上传的任何阶段断电,那么当重新启动时,Linux机箱需要返回上一个工作启动文件。

3 个答案:

答案 0 :(得分:1)

你有什么版本的Linux?我不太了解但您想更新所有系统,库还是内核?这不是包装工具的责任,比如apt-get?

嵌入式Linux引导过程

Reference

嵌入式Linux引导过程中涉及的软件组件

  • 引导程序
  • kernel Image
  • 根文件系统 - initrd映像或NFS位置

Emebedded Systems的启动过程

  • 而不是BIOS,您将从Flash中的固定位置运行程序
  • PC启动过程的第一步中涉及的组件被组合到一个称为“启动加载程序”的“启动固件”中。
  • Bootloader还提供了对开发有用的其他功能。调试。

答案 1 :(得分:1)

只需使用kexec即可执行新内核,而无需触及引导加载程序配置。

http://en.wikipedia.org/wiki/Kexec

答案 2 :(得分:1)

需要仔细考虑嵌入式系统的现场更新。我遇到的最常见的方法基本上有以下几个要素:

  1. 包含内核和相关压缩ramdisk或cram磁盘或其他文件系统(可能有运行的应用程序)的内核映像,内核包含在单个文件映像中。
  2. 闪存(或其他)的两个区域(或存储区)足够大,可用于此内核映像。
  3. 闪存扇区(或其他)专用于"启动参数"。
  4. 专门用于" booter"。
  5. 的闪存扇区(或其他)

    基本思想是引导参数包含当前引导库,而引导程序将引导内核映像驻留在该特定库中。在更新过程中,将使用较新的内核映像编写备份库。然后可以更新引导参数扇区。发生重置(执行此操作的方法很多),并且引导程序将知道引导备用库。请注意,更新或写入闪存的顺序在这里至关重要。必须最后写入引导参数扇区。

    这可以有两种思想流派。第一个是永远不会更新一个引导库,并且包含足够稳固的映像以至少提供更新到更新引导库中。

    另一个想法是有一个当前的引导库和以前的引导库。前一个银行将始终将更新写入其中。

    除了这个基本思想外,还有几种方法可以帮助确保完整性。例如,内核映像可以具有与引导参数一起存储的校验和或散列。下载过程也应该有类似的检查。引导参数扇区的校验和也有助于确保其完整性。

    这个基本想法可以扩展到满足您的特定需求。请记住,写订单非常重要。