基于嵌入式 Linux 的设备通常需要一种机制来更新应用程序和系统文件。例如,带有 USB 端口的(非联网)实验室仪器可以从 U 盘获取软件更新。
运行脚本将文件复制到设备内部闪存上的位置将是一件简单的事情。但是,存在设备在更新过程中断电并最终变成砖块的危险。
应用程序文件的情况稍微容易一些,因为有空间复制应用程序目录、更新一个副本以及快速交换新旧目录,从而最大限度地减少故障窗口。
对于内核和系统文件来说,事情变得更加复杂,因为它们分布在整个文件系统中。
我们在文件系统中使用硬链接和软链接来识别关键文件。我们对文件和档案使用哈希来验证文件完整性。如果从更新的文件系统启动失败,我们已经考虑在内核中使用紧急 ramfs 来提供回退。
你对这个要求有什么方法?