tre*_*nki 49 linux software-update embedded-linux
我有一个在嵌入式Linux设备上运行的应用程序,并且偶尔会对软件进行更改,有时也会对根文件系统甚至已安装的内核进行更改.
在当前的更新系统中,只删除旧应用程序目录的内容,并在其上复制新文件.当对根文件系统进行更改时,新文件将作为更新的一部分传递,并简单地复制到旧文件上.
现在,目前的方法存在一些问题,我正在寻找改善这种情况的方法:
要求是:
dd
在目标的闪存驱动器上执行操作?我绝对需要一些方法来对根文件系统进行版本控制.这必须以某种方式完成,我可以从中计算某种diff
可用于更新目标设备的rootfs的方法.
我已经查看了Subversion,因为我们将它用于源代码,但这对Linux根文件系统(文件权限,特殊文件等)不合适.
我现在已经创建了一些shell脚本,可以给我类似的东西,svn diff
但我真的想知道是否已经存在一个可行的,经过测试的解决方案.
使用这样diff
的我认为升级将简单地成为包含基于已知根文件系统状态的增量更新的包.
你对此有何看法和想法?你会如何实现这样的系统?我更喜欢一个简单的解决方案,可以在不太长的时间内实现.
gby*_*gby 32
我相信你在这个问题上看错了 - 任何非原子的更新(例如dd文件系统映像,替换目录中的文件)都会被设计破坏 - 如果电源在更新过程中断电,系统就是砖和嵌入式系统,电源可以在升级过程中熄灭.
我写了一篇关于如何在嵌入式Linux系统上正确升级/更新的白皮书[1].它在OLS上发布.你可以在这里找到论文:https://www.kernel.org/doc/ols/2005/ols2005v1-pages-21-36.pdf
[1] Ben-Yossef,Gilad."构建与Murphy兼容的嵌入式Linux系统." Linux研讨会.2005年.
小智 9
我完全同意更新必须是原子的 - 我最近开始了一个开源项目,其目标是为本地和远程更新提供安全,灵活的软件管理方式.我知道我的答案来得很晚,但它可能会帮助你完成下一个项目.
您可以在以下位置找到"swupdate"(项目名称)的来源github.com/sbabic/swupdate
.
斯特凡诺