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

时间:2014-09-03 03:29:28

标签: 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图像声明对特定版本包的依赖?

1 个答案:

答案 0 :(得分:4)

我找到了一个解决方案,可以让我完全按照自己的意愿行事。

关键是将我的'应用程序'包拆分为两个包 - 'application'和'application-git'。然后我将发布版本的配方移动到'application',将开发配方移动到'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"

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