我需要向客户提供单个更新文件,以便通过USB更新嵌入式系统。系统使用Yocto构建。我很好奇我必须实施USB更新的计划是否可行,或者我是否遗漏了一些显而易见的事情。
opkg存在于系统中,但为了使用opkg update
,它需要有一个回购来源。由于我没有网络功能,我需要将整个仓库放在USB驱动器上。由于我需要向客户提供单个文件,因此repo将需要是一个tar文件。
答案 0 :(得分:1)
那么,关于可能存在的陷阱,最大的陷阱之一可能是在整个过程中断电。在那种情况下你如何恢复? (答案可能取决于您制作的嵌入式设备类型)。 (就个人而言,我赞成完整的基于图像的升级,而不是基于包的升级)。
关于使用tarball的方案,您的设备上是否有足够的空间来解压缩?可能更明智的做法是不使用opkg存储库分发tarball,而是分发例如存储库的ext2或squashfs映像。这将允许您使用环回设备从USB驱动器安装它。
除此之外,只要您有一个很好的方式与用户沟通工作,您的方法应该有效。主要问题是如果升级过程中断,您会怎么做?这是你需要提前考虑的事情。
答案 1 :(得分:1)
您的用例由SWUpdate涵盖 - 可能值得一看我的项目(github.com/sbabic/swupdate)。使用单个图像文件从USB升级是一个用例,您可以使用meta-swupdate(在openembedded上列出)生成包含所有工件的单个图像。
答案 2 :(得分:0)
在决定更新格式和设计时,有几件事需要考虑;包括你想要更新的内容(例如内核,应用程序,引导程序);这里有一篇关于最流行设计的论文:https://mender.io/user/pages/04.resources/_white-papers/Software%20Updates.pdf
在您的情况下(没有网络,USB上有大量存储空间),最简单的方法可能是完整的rootfs更新。我参与了一个开源项目Mender.io,该项目执行双A / B rootfs更新并与Yocto项目集成,以便在没有自定义低级编码的情况下轻松快速地在设备上启用更新。