如何使yocto层与不兼容的lib版本随附的不同发行版兼容

时间:2019-07-05 06:32:05

标签: embedded-linux yocto bitbake

我的食谱层与Rocko兼容。我想增加兼容性。 LAYERSERIES_COMPAT_layer支持列表,因此似乎打算支持不止一个带有层的发行版。

Thud包含库的某些版本冲突,破坏了兼容性。例如protobuf-3.6,其中包含与rocko中使用的早期版本不兼容的API更改。

对于该层中的所有软件包,我都有针对其源的补丁程序,使它们与新的API版本兼容(仅)。

当前,有一种文化来创建不同的元层分支(甚至分支),以支持不同的库版本。这会导致项目和部门之间的严重分散和偏差。

如果我可以创建独立于例如构建中使用的protobuf确切版本的配方,那么我可以合并其中的一些分支和分支并维持一个回购。 / p>

  • 我尝试了一些有条件的.bbappend方法,但是找不到解决方法。例如,对于COMPATIBLE_MACHINE似乎没有等效项,可以用来区分发行版。

  • 我还尝试了一种根据依赖项的实际PV有条件地修补源的方法。基本上尝试执行以下摘录的配方伪代码中所述的内容:

DEPENDS += "protobuf"
SRC_URI = "git://github.com/foo/bar;"

if ${protobuf_PV} larger_or_equal "3.6.0"
  SRC_URI_append = " file://replace_protobuf_scoped_ptr.patch"
endif

我在这里找到了一个已有的答案,这使我怀疑是否可能:How can I reference/find the ${PV} of one recipe in another recipe in Yocto/Bitbake?

那么,bitbake提供了哪些机制(如果有的话)来帮助我使配方与通常的不同版本的依赖项(尤其是与不同的yocto版本)兼容?

1 个答案:

答案 0 :(得分:2)

您确实可以在LAYERSERIES_COMPAT_layer中使用多个兼容版本,例如,请参见here。这是master分支成为新版本并同时设置当前和下一个兼容性时Poky所做的事情。

通常,我们使用与Yocto元层相同的分支模型,因此rocko的一个分支和thud的一个分支。

在您的情况下,您可以做的是在Yocto分支模型中有一小层,这将仅为rockothud之间不同的配方配置PREFERRED_VERSION每个食谱的全球层。您还可以为每个Yocto版本创建两个发行版并使用替代。

最后,您可以尝试以下模式:

SRC_URI += "${@bb.utils.contains("DISTRO_CODENAME", "thud", " file://replace_protobuf_scoped_ptr.patch ", "", d)}"