基于OpenEmbedded / Yocto的系统的强大软件更新解决方案

时间:2016-05-13 01:14:05

标签: yocto openembedded

我们正在为我们的项目使用Variscite VAR-SOM-AM33平台,软件平台基于OpenEmbedded/Yocto

为确保硬件与当前软件一起运行,设备已连接到互联网。到目前为止,我们一直在遵循OE配方并生成ipk并通过opkg应用软件更新。

但是,由于某些配方写得不好(在升级过程中无法卸载/安装),因此该过程并不令人满意。什么强大的技术/解决方案可用于基于OE / Yocto的系统?

提前致谢。

6 个答案:

答案 0 :(得分:5)

我正在使用元数据层将Clear Linux的软件更新程序(swupd)与Yocto Project / OpenEmbedded Core集成。

swupd执行整个操作系统更新,而不是基于包的更新,使用二进制增量只更新更改的文件并以有效的方式执行此操作。

我最近写了一些文档(在meta-swupd repo的docs / Guide.md文件中)关于采用" Clear Linux Way"利用基于OE / YP的发行版的meta-swupd。 Yocto Project wiki上提供了该指南的wikified版本,包括指向图层git存储库的链接: https://wiki.yoctoproject.org/wiki/Meta-swupd

我在Github上也有一个示例图层,它演示了图层的使用(这也是我测试了很多meta-swupd的发行版层): https://github.com/incandescant/meta-myhouse

答案 1 :(得分:5)

关于mender.io,我最近与他们谈过他们的开源更新。

目前,他们已经开发了客户端,并且正在服务器端工作。他们使用HTTP和JSON。这是他们的git,目前只支持Beaglebone和QEMU。

mender.io的工作方式是:它们将有一个持久性数据和uboot。和2个rootfs(活动和备份)进行更新。因此,当服务器上有更新时,将通知用户将其拉下来。提供mender -rootfs image更新命令。如果升级成功,则用户提供另一个mender -commit命令。如果没有mender -commit,则rootfs将在下次重新引导时回滚到先前的rootfs。 Mender目前仅支持更新内核和rootfs。

mender.io的主要作用是确保可以从错误中恢复大规模分布式映像升级过程。在服务器端,mender.io使用UUID为大规模分布式设备开发了一个管理服务器。

不要做广告,但请尝试mender.io并提供反馈,以便软件更加成熟。

Mender Introduction pdf

答案 2 :(得分:5)

我想将SWUpdate添加到您应该考虑的软件包列表中。建议在汽车级Linux的2016 paper by the Konsulko Group中使用。该论文提到了一些其他选项,并提供了对各种工具的分析,因此它可能值得一读。引自论文:

  

我们建议参考AGL软件更新策略在双拷贝配置中使用SWUpdate并集成OSTree支持。这允许从异常情况的损坏分区中恢复,但也优化了可以根据需要快速应用或回滚小型增量更新以满足OEM策略的常见情况。

我不完全同意这篇论文。例如,他们注销了Mender.io,因为它缺乏社区支持,但IMO汽车级Linux组具有足够的影响力,可以从头开始创建受欢迎程度。不过,这是一篇很好的论文,而且他们选择SWUpdate这一事实对我很有意思。我已经倾向于它,因为作者sbabic参与了U-Boot软件开发,我们使用U-Boot将新图像刻录到我们的设备中。

目前我对所有当前选项都不满意,但主要是因为我想要额外的功能。我可能会选择一个包含一个或多个上述软件包的定制系统。不幸的是,这并不是SO更喜欢的那种明确的答案,但我希望它有所帮助。

答案 3 :(得分:3)

好吧,你可以像你一样使用基于包的升级。在这种情况下,在将任何更新推送到字段之前,您需要在本地测试和验证所有内容。显然,您可能需要改进一些食谱。 (我假设你在上游那些改进,对吗?)

另一种方法是使用基于图像的升级。如果是完整图片,请参阅Stackoverflow: Embedded Linux mechanism for deloying firmware updatesswupd

上的讨论

注意:写这个答案时我分心了,所以看看joshuagi的回答;他解释了更多的swupd。

答案 4 :(得分:3)

我认为这是两个问题。我们(OpenEmbedded)确实需要小心,我们不会破坏基于包的更新。

此外,还有像swupd这样的图像更新(如上所述和swupdate,在https://sbabic.github.io/swupdate/swupdate.html描述

答案 5 :(得分:0)

meta-updater支持基于OSTree的OE系统更新。

OSTree很有意思,因为它提供了完整图像更新(正确处理大而棘手)和基于包的更新(这些更新很难实现)之间的中途。它具有根文件系统的“类git”对象表示,并使用chroot和硬链接在文件系统映像之间进行原子切换。

(披露:我是meta-updater的贡献者)