当前位置: 首页 > 面试题库 >

基于Linux的固件,如何实现更新的好方法?

颜博达
2023-03-14
问题内容

我正在使用alix 2d13开发基于Linux的设备。

我已经开发了一个脚本,负责创建映像文件,创建分区,安装引导加载程序(syslinux),内核和initrd,并负责将根文件系统文件放入正确的分区。

配置文件位于tmpfs文件系统上,并在系统启动时由读取驻留在自己分区上的XML文件的软件创建。

我正在寻找一种更新文件系统的方法,并且我考虑了两种解决方案:

  • 固件更新是一个压缩文件,可以包含内核,initrd和/或rootfs分区,以这种方式,在重新引导时,initrd将注意将rootfs映像dd到正确的分区;
  • 固件更新是一个压缩文件,其中可能包含两个tar存档,一个用于引导,一个用于根文件系统。

每个解决方案都有其自身的优点:-文件系统映像可以让我删除所有未使用的文件,但需要很多时间,并且会迅速杀死紧凑型闪存;-归档文件较小,需要较少的时间进行更新,但是我很快就会在根文件系统上遇到麻烦。

另一种解决方案是将文件列表放置在tar归档文件中,然后将更新前/更新后的脚本放入tar归档文件中,以便删除所有不在文件列表中的文件。

你怎么看?


问题答案:

我使用以下方法。这是有点根据的论文“构建墨菲兼容的嵌入式Linux系统”,可在这里。我使用了该论文中描述的versions.conf文件,而不是cfgsh文件。

  • 使用其工作是回送安装“主”根文件系统的引导内核。如果您需要更新的内核,则在将其回送安装后,立即将kexec插入该更新的内核。我选择将启动内核的完整初始化以及busybox和kexec(都静态链接)放入initramfs中,而我的初始化是我编写的一个简单的shell脚本。
  • 一个或多个“主OS”根文件系统作为磁盘映像文件存在于“ OS映像”文件系统上。引导内核根据versions.conf文件选择其中之一。我仅维护两个主要的OS映像文件,即当前文件和后备文件。如果当前服务器失败(稍后会详细介绍故障检测),则引导内核将引导回退。如果两者都失败或没有回退,则引导内核将提供一个外壳程序。
  • 系统配置位于单独的分区上。这通常不会升级,但是没有理由不能升级。
  • 总共有四个分区:引导,操作系统映像,配置和数据。数据分区用于旨在频繁写入的用户应用程序内容。引导永远不会以读/写方式安装。升级期间仅(重新)安装了操作系统映像读/写。仅在需要更改配置内容时(希望永远不会),才将配置装载为读/写。数据始终以读/写方式装入。
  • 每个磁盘映像文件都包含一个完整的Linux系统,包括内核,初始化脚本,用户程序(例如,busybox,产品应用程序)以及一个默认配置,该默认配置在首次引导时被复制到配置分区。这些文件的大小足以容纳其中的所有内容。只要我有足够的增长空间,以便OS映像分区始终足够大以容纳三个主要OS映像文件(在升级期间,在提取新的后备备份之前,我不会删除旧的后备),我可以允许主操作系统映像根据需要增长。这些映像文件始终(循环)安装为只读。使用这些文件还消除了在rootfs中升级单个文件失败的痛苦。
  • 通过将自解压的tarball转移到tmpfs来完成升级。该脚本的开头重新安装了读/写的OS映像,然后将新的主OS映像提取到OS映像文件系统,然后更新versions.conf文件(使用“墨菲”文件中所述的重命名方法)。完成此操作后,我触摸指示升级已发生的图章文件,然后重新启动。
  • 引导内核会寻找该图章文件。如果找到它,它将移动到另一个标记文件,然后引导新的主OS映像文件。成功启动后,主OS映像文件应会删除标记文件。如果没有,看门狗将触发重新启动,然后启动内核将看到此情况并检测到故障。
  • 您会注意到,升级过程中可能会出现一些故障点:在升级过程中同步versions.conf,并触摸/删除标记文件(三个实例)。我找不到办法进一步减少这些损失并实现我想要的一切。如果有人有更好的建议,我很想听听。写入OS映像时也可能发生文件系统错误或电源故障,但是我希望ext3文件系统在这种情况下能够提供一些生存的机会。


 类似资料:
  • 我已经实现了Ford Fulkerson算法,现在正在尝试它的一个变体。 假设解导出后,其中一条边的容量增大或减小。我们需要找到一个算法,以获得新的最大流量使用当前的解决方案,而不是从一开始。 我的建议是,在这个例子中,如果我们假设1-3个边的容量从12减少到8,那么我们需要做一个从1到开始节点的BFS,并且在每个边上减少4的流量,做一个从3到5的BFS,并且减少那里的流量。但我不确定这是否正确。

  • 若要让 Polar Verity Sense 保持在最新状态并获得最佳性能,请务必确保在有新版本固件可用时及时更新固件。执行固件更新是为了提高传感器的性能。 您不会因固件更新而丢失任何数据。开始更新前,Verity Sense 中的数据已同步至您的 Flow 账户。 利用手机或平板电脑 如果使用 Polar Flow 移动应用,您可利用手机来更新固件。该应用会通知您是否有更新可用,并指导您进行更新

  • 若要让手表保持在最新状态并获得最佳性能,请务必确保在有新版本固件可用时及时更新固件。执行固件更新以提高手表的性能。这包括全新功能、现有功能的提升,或错误修复。 您不会因为固件更新丢失任何数据。开始更新前,来自手表的数据已同步至 Flow 网络服务。 利用移动设备或平板电脑更新固件 如果您使用 Polar Flow 移动应用程式来同步您的训练和活动数据,您可以利用移动设备来更新固件。该应用程式会让您

  • 若要让手表保持在最新状态并获得最佳性能,请务必确保在有新版本固件可用时及时更新固件。执行固件更新以提高手表的性能。这包括全新功能、现有功能的提升,或错误修复。 您不会因为固件更新丢失任何数据。开始更新前,来自手表的数据已同步至 Flow 网络服务。 利用移动设备或平板电脑更新固件 如果您使用 Polar Flow 移动应用程式来同步您的训练和活动数据,您可以利用移动设备来更新固件。该应用程式会让您

  • 利用电脑 您可以自行更新 A370 的固件,使其保持最新状态。任何时候若有新的固件版本可用,当您将 A370 连接至电脑时,FlowSync 会通知您。通过 FlowSync 下载固件更新版本。 执行固件更新以提高 A370 的性能。这包括现有功能的提升、全新功能或错误修复。 要更新固件: 将 A370 插入具有 USB 连接线的电脑。 FlowSync 开始同步数据。 同步后,系统会要求您更新固

  • 您可以自行更新 A300 的固件,并使其保持最新状态。任何时候若有新的固件版本可用,当您将 A300 连接至您的电脑时,FlowSync 会通知您。固件更新内容可通过 FlowSync 下载。当新的固件可用时,Flow 应用程式也会通知您,但不能通过该程序进行更新。 执行固件更新以提高 A300 的性能。固件更新包括现有功能的提升、全新功能或错误修复等。 要更新 A300 的固件,您必须: 拥有一