1

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

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

程序

  1. 插入 USB 驱动器
  2. udev规则调用脚本并将其推送到后台,因为这将是一个漫长的过程(请参阅this
  3. 解压 repo 更新文件
  4. opkg update
  5. 通知用户他们可能会移除 USB 驱动器

至少从高层次的角度来看,这听起来像是通过 USB 更新嵌入式系统的好方法吗?可能存在哪些陷阱?

4

3 回答 3

2

SWUpdate涵盖了您的用例——也许值得看看我的项目 ( github.com/sbabic/swupdate )。使用单个图像文件从 USB 升级是用例之一,您可以使用 meta-swupdate(在 openembedded 上列出)生成具有所有工件的单个图像。

于 2016-05-16T07:51:45.563 回答
1

好吧,关于可能存在哪些陷阱,最大的陷阱之一可能是过程中间的停电。在这种情况下你如何恢复?(答案可能取决于您制作的嵌入式设备类型)。(就个人而言,我赞成基于完整图像的升级,而不是基于包的升级)。

关于您使用 tarball 的场景,您的设备上是否有足够的空间来解压?最好不要使用 opkg 存储库分发 tarball,而是分发存储库的 ext2 或 squashfs 映像。这将允许您使用环回设备从 USB 驱动器安装它。

除此之外,只要您有一种与用户交流工作的好方法,您的方法就应该奏效。主要问题是在升级过程中断的情况下你会怎么做。这是你需要提前考虑的事情。

于 2015-07-25T15:56:49.120 回答
0

在决定更新格式和设计时,需要考虑几件事情;包括您要更新的内容(例如内核、应用程序、引导加载程序);这里有一篇关于最流行设计的论文:https ://mender.io/user/pages/04.resources/_white-papers/Software%20Updates.pdf

在您的情况下(没有网络,USB 上有大量可用存储空间),最简单的方法可能是完整的 rootfs 更新。我参与了一个开源项目Mender.io,它执行双 A/B rootfs 更新并与 Yocto 项目集成,以便在没有自定义低级编码的设备上轻松快速地启用更新。

于 2016-08-04T22:54:00.703 回答