【问题标题】:How can I make a yocto layer compatible with different releases that come with incompatible lib versions如何使 yocto 层与不兼容的 lib 版本附带的不同版本兼容
【发布时间】:2019-07-05 06:32:05
【问题描述】:

我有一个与 rocko 兼容的食谱层。我想为 thud 添加兼容性。 LAYERSERIES_COMPAT_layer 支持列表,因此似乎有意支持多个带有层的版本。

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

对于该层中的所有包,我为它们的源提供了补丁,使它们与新的 API 版本(仅)兼容。

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

如果我可以创建独立于例如构建中使用的确切版本的 protobuf 工作的配方,那么我可以合并其中的一些分支和分支并维护 一个 repo。

  • 我尝试了一些带有条件.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 版本兼容?

【问题讨论】:

    标签: embedded-linux yocto bitbake


    【解决方案1】:

    您确实可以在 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)}"
    

    【讨论】:

    • 谢谢:)。我接受了这个答案,因为建议的模式至少解决了不同库版本由不同的 yocto 版本引起的特殊情况。对于支持不同库版本的更通用的情况,无论它们来自何处,我仍然没有解决方案。但我有一种感觉,我正在尝试做的事情目前是不可能的。
    猜你喜欢
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多