2014-09-03 35 views
4

我目前的项目基于Yocto Daisy,在一个git仓库中定制图层声明,并在另一个git仓库中包含应用程序代码。应用程序代码生命周期与自定义图层生命周期有些分离,所以我希望能够在构建中捕获它。如何在Yocto图像配方中使用特定的软件包版本?

为此,我有两个扩展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图像声明对特定版本的包的依赖?

回答

3

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

关键是将我的'应用程序'包分成两个包 - 'application'和'application-git'。然后,我将发行版的配方移至“应用程序”,开发配方移至“application-git”。为了减少重复的代码,我将两个食谱之间的所有公共逻辑移动到一个文件'application/application.inc'中,并使用require recipes-application/application/application.inc将它包含在'application-git.bb'中。

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

这是一个轻微的系统滥用,但由于它产生了一个清晰的结果(图像发布版本,dev-dev在image-dev中),我认为这是值得的。

+0

不,这不是滥用......这是正确的做法。 – Anders 2016-01-25 18:01:17

相关问题