8

我目前的项目基于 Yocto Daisy,在一个 git repo 中包含自定义层声明,在另一个 git repo 中包含应用程序代码。应用程序代码生命周期与自定义层生命周期有些分离,因此我希望能够在构建中捕获它。

为此,我有两个扩展 core-image 的配方:“my-image”和“my-image-dev”。我想让“我的图像”始终使用“应用程序”的标记版本(例如 v0.1、v0.2 等)。我想让 'my-image-dev' 总是使用来自 git master 的 'application' HEAD。

我已经编写了食谱“application_0.1.bb”和“application_git.bb”,并单独测试了它们。它们的行为与预期一样——“application_0.1.bb”得到标签 0.1,“application_git.bb”得到主人。

当我尝试指示特定图像使用特定版本的“应用程序”时,问题就出现了。我原以为这就像添加PREFERRED_VERSION_application = "0.1"和添加PREFERRED_VERSION_application = "git%"到我的图像食谱一样简单,但这并没有给我任何爱。似乎唯一可行的地方PREFERRED_VERSION是 layer.conf 和 machine.conf,这对我没有帮助,因为这两个图像都用于同一台逻辑机器。

所以这是我的问题 - 有没有办法从 Yocto 图像中声明对特定版本的包的依赖?

4

1 回答 1

6

我找到了一个解决方案,可以让我完全按照我的要求去做。

关键是将我的“应用程序”包分成两个包——“应用程序”和“应用程序-git”。然后我将发布版本的配方移至“应用程序”,将开发配方移至“应用程序-git”。为了减少重复代码,我将两个配方之间的所有通用逻辑移动到文件“application/application.inc”中,并使用require recipes-application/application/application.inc.

现在我可以在我的图像中包含适当的包。所以 'my-image.bb' 包含IMAGE_INSTALL += "application". 'my-image-dev.bb' 需要 'my-image.bb',所以我添加了该行IMAGE_INSTALL_remove = "application"并添加了IMAGE_INSTALL += "application-git".

这是对系统的轻微滥用,但由于它产生了清晰的结果(image 中的 release 版本,image-dev 中的 dev 版本),我认为这是值得的。

于 2014-09-03T20:05:38.810 回答