如何处理 Yocto 中的发行版本

How to handle distro versions in Yocto

我正在寻找一些关于在使用 Yocto 管理发行版时如何正确处理版本控制的建议。

我在生产中有几个嵌入式系统,必须依靠第三方来应用更新。更新包括通过 opkg 安装的一个或多个 .ipk 软件包。我无法控制第三方何时应用我发送给他们的更新。这介绍了我试图找到解决方案的问题。系统可能处于各种不同的状态,因为一些更新已应用,而另一些则未应用。是否有一个通用的解决方案来判断系统处于什么状态?

我不清楚的一个问题是如何确保嵌入式系统在应用进一步更新之前应用了某些更新。 Ubuntu 或 Redhat 等发行版如何处理这个问题?还是他们?

Ubuntu 和 RedHat 有一个远程存储库。系统有一个已安装软件包的内部列表。当您更新存储库时,您会得到一个新的包列表。然后您可以将此已安装软件包列表与新软件包列表进行比较并安装它们。这基本上是用 apt-get update && apt-get upgrade 和 yum 等价物完成的。

Yocto 实际上支持 rpm 和 deb 包格式及其远程存储库。我不熟悉 opkg 以及他们是否可以选择远程存储库。

当我实施一个系统时,我将其缩小到以下选项:

  • 有一个存储库(deb 和 rpm 在这里绝对有效)
  • 有版本包
  • 使用图像

版本包有很大的缺点,因为您必须对要安装的包有自己的逻辑。但是你可以要求版本-1.deb需要软件-v2.deb和工具-v1_5.deb。这适用于您自己的软件,但对于整个 Yocto 软件包堆栈来说是一个很大的手动开销。

存储库将是通常的方式,例如:apt-get update && apt-get -y upgrade。运行良好且简单,但也缺乏通往更新的 Yocto 版本的无风险途径。

映像方式比较复杂,取决于您使用的硬件、映像大小和映像传输方式。如果你有一个巨大的图像和一个缓慢的网络,你可能不想这样做。基本上你推送你的新图像(或根据版本自动拉取它)然后将它推送到设备。设备将其添加到辅助分区,然后您翻转引导加载以使用另一个分区。根据引导加载程序 and/or 硬件,您可以自动翻转以防您引导的分区损坏。对远程系统有帮助。优点是:您还可以轻松升级整个 OS 而无需手动选择版本。您可以进行(自动)故障转移。