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

8
我的当前项目基于Yocto Daisy,其中一个git仓库中包含自定义层声明,另一个git仓库中则包含应用程序代码。应用程序代码的生命周期与自定义层的生命周期有些分离,因此我想在构建过程中捕获这种情况。为此,我有两个扩展core-image的recipes:'my-image'和'my-image-dev'。我希望'my-image'总是使用'application'的已标记版本(例如v0.1、v0.2等),并且'my-image-dev'总是使用从git master检出的'application' HEAD。
我编写了'recipes'application_0.1.bb'和'application_git.bb',并在隔离环境中进行了测试。它们的行为符合预期——'application_0.1.bb'获取标签0.1,'application_git.bb'获取master。
问题出现在当我尝试命令特定的image使用特定版本的'application'时。我本以为这很简单,只需将PREFERRED_VERSION_application = "0.1"PREFERRED_VERSION_application = "git%"添加到我的image recipes中即可,但这并没有起作用。似乎唯一可以使用PREFERRED_VERSION的地方是layer.conf和machine.conf,但这对我没有用,因为两个image都是针对同一台逻辑机器的。
所以我的问题是,是否有一种方法可以从Yocto image中声明对特定包版本的依赖关系?
1个回答

6
我找到了一个解决方案,可以完全满足我的需求。
关键在于将我的“应用程序”包分成两个包——“应用程序”和“应用程序-git”。然后我将发布版本的配方移到“应用程序”中,将开发配方移到“应用程序-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"
这是对系统的轻微滥用,但由于它能够产生清晰的结果(镜像中包含发布版本,开发版本在image-dev中),我认为这是值得的。

不,这不是滥用……这才是正确的做法。 - Anders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接