bitbake 如何在构建过程中搜索配方?

Posted

技术标签:

【中文标题】bitbake 如何在构建过程中搜索配方?【英文标题】:How bitbake searches for recipe in build process? 【发布时间】:2021-08-09 20:25:54 【问题描述】:

我想知道 例如, 我有一个类似下面的食谱:

DESCRIPTION = "PetaLinux GSTREAMER supported packages"

inherit packagegroup

GSTREAMER_PACKAGES = " \
    gstreamer1.0 \
    gstreamer1.0-python \
    gstreamer1.0-meta-base \
    gstreamer1.0-plugins-base \
    gstreamer1.0-plugins-good \
    gstreamer1.0-plugins-bad \
    gstreamer1.0-rtsp-server \
    gst-shark \
    gstd \
    gst-perf \
    gst-interpipes \
    "
GSTREAMER_PACKAGES_append_zynqmp = " gstreamer1.0-omx"

RDEPENDS_$PN = "$GSTREAMER_PACKAGES"

当我在 yocto 层中搜索 gstreamer1.0 相关配方时,我发现了两个配方,其中一个是 meta 中的 gstreamer1.0_1.16.1.bb 层,另一个是meta-petalinux层中的gstreamer1.0_%.bbappend

这两个层都被添加到 bblayers.conf 文件中的 BBLAYERS 和相关层的层中用 BBFILE_PRIORITY_* 指定的优先级.conf 文件是一样的。

所以, 在这种情况下,构建过程将使用哪个配方? yocto中的recipe查找规则是什么?

我改变了一些东西来理解这种行为: 例如,

    我输入了在 gstreamer1.0_%.bbappend 配方中指定的无效 github URL。当我尝试构建linux系统时,我遇到了一个错误。没关系。 然后我更正了此配方中的 github URL,并输入了 gstreamer1.0_1.16.1.bb 配方中指定的无效源代码地址。当我尝试构建linux系统时,过程成功完成。 然后我增加了meta层的优先级。在这种情况下,我应该会遇到错误,但构建过程再次成功完成。

您能帮我理解这种行为吗?

谢谢。

【问题讨论】:

【参考方案1】:

您有两个不同的文件:.bb.bbappend

.bb 是一个(或多个)包的基本配方。它通常描述了如何为您的目标获取、配置、编译、安装包中的文件。

.bbappend 文件是一个“附加”文件。它允许一个元(这里是 meta-petalinux)修改另一个元中的现有配方而不复制它。一个.bbappend可以修改bb文件的任意步骤:源码获取、配置、编译、安装……

例如,您可以创建自己的 Gstreamer bbappend,以启用 pango(在我的 Yocto 上默认禁用)。 bbappend 文件名为gstreamer1.0-plugins-base_%.bbappend,仅包含PACKAGECONFIG_append = "pango"

Yocto 手册可以为您提供有关 bbappend 文件here 的更多信息。

【讨论】:

以上是关于bitbake 如何在构建过程中搜索配方?的主要内容,如果未能解决你的问题,请参考以下文章

Bitbake 在构建中不包含我的食谱

Yocto bitbake 错误:没有提供“配方名称”

BitBake:如何使用 shell 脚本内容作为 pkg_postinst 或 pkg_preinst 函数的主体?

Gif 动画不适用于 Qt 5.8 中的 Yocto Pyro。如何使用 libqgif.so 在 bitbake 中构建 qtbase 5.8?

Yocto

在Make中,如何使配方仅在特定的退出代码上失败?