如何在Yocto图像配方中使用特定的包版本?

Nic*_*ens 6 embedded-linux yocto

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

为此,我有两个扩展核心图像的方法:'my-image'和'my-image-dev'.我想'my-image'总是使用'​​application'的标记版本(例如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图像声明对特定版本的包的依赖?

Nic*_*ens 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".

这是对系统的轻微滥用,但由于它产生了明确的结果(图像中的发布版本,图像开发中的开发版本),我认为这是值得的。