如何学习修改linux系统固件,基于Linux的固件,如何实现更新的好方法?

使用其工作是回送安装“主”根文件系统的引导内核。如果您需要更新的内核,则在将其回送安装后,立即将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文件系统在这种情况下能够提供一些生存的机会。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值