通过opkg

时间:2015-07-23 16:57:24

标签: embedded-linux yocto bitbake opkg

我需要向客户提供单个更新文件,以便通过USB更新嵌入式系统。系统使用Yocto构建。我很好奇我必须实施USB更新的计划是否可行,或者我是否遗漏了一些显而易见的事情。

opkg存在于系统中,但为了使用opkg update,它需要有一个回购来源。由于我没有网络功能,我需要将整个仓库放在USB驱动器上。由于我需要向客户提供单个文件,因此repo将需要是一个tar文件。

程序

  1. 插入USB驱动器
  2. udev规则调用脚本并将其推送到后台,因为这将是一个漫长的过程(请参阅this
  3. 解压缩repo更新文件
  4. opkg update
  5. 通知用户他们可能会移除USB驱动器
  6. 至少从高层次的角度来看,这听起来像是通过USB更新嵌入式系统的好方法吗?可能存在哪些陷阱?

3 个答案:

答案 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项目集成,以便在没有自定义低级编码的情况下轻松快速地在设备上启用更新。