Yocto Dunfell 错误 'No recipes available for' 在单个自定义元层中有多台机器

Yocto Dunfell error 'No recipes available for' with multiple machines in single custom meta layer

我维护一个与 Dunfell 兼容的自定义 Yocto 元层。它支持基于 Microchip SAMA5D27 处理器的板。我在这一层中有几个 bbappend 文件,它们仅适用于来自 meta-atmel 和其他 Microchip 特定包的文件。

现在,我想重新使用此自定义元层的许多部分并支持来自不同供应商的新处理器。我在我的图层中创建了自己的新图像配方,其中不包括这些仅与 Microchip 相关的 bbappend 文件。

问题是 Yocto 抛出关于我的 bbappend 文件的错误 'No recipes available for'。该错误似乎是在解析过程中发生的,并且没有考虑我是否在当前目标中使用了配方。

我广泛搜索了解决方案,但到目前为止一无所获。如何使用 1 个元层并维护不同的 bbappend 文件,同时能够为不同的目标构建切换 MACHINE 变量?谢谢!

Bitbake 版本:

root@buildmachine:/$ bitbake --version
BitBake Build Tool Core version 1.46.0

我尝试在这些 bbappend 文件中使用 COMPATIBLE_HOST 和 COMPATIBLE_MACHINE 变量,但错误仍然存​​在。

# Only compatible with sama5d27 microchip
COMPATIBLE_HOST = "arm-poky-linux-musleabi"
COMPATIBLE_MACHINE = "sama5d27-wlsom1-ek-sd"

错误输出:

root@buildmachine:~/Desktop/compulab/build-cmdline$ MACHINE=iot-gate-imx8 bitbake iot-gate-imx8-image
WARNING: Host distribution "ubuntu-20.04" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.
Loading cache: 100% |#######################################################################################################################################################| Time: 0:00:01
Loaded 4938 entries from dependency cache.
ERROR: No recipes available for:
  /home/me/Desktop/compulab/sources/meta-proprietary/recipes-bsp/at91bootstrap/at91bootstrap_3.10.0.bbappend
  /home/me/Desktop/compulab/sources/meta-proprietary/recipes-bsp/dt-overlay-at91/dt-overlay-at91_git.bbappend
  /home/me/Desktop/compulab/sources/meta-proprietary/recipes-bsp/libubootenv/libubootenv_%.bbappend
  /home/me/Desktop/compulab/sources/meta-proprietary/recipes-bsp/u-boot/u-boot-at91_2020.01.bbappend
  /home/me/Desktop/compulab/sources/meta-proprietary/recipes-core/initrdscripts/initramfs-debug_%.bbappend
  /home/me/Desktop/compulab/sources/meta-proprietary/recipes-httpd/nginx/nginx_%.bbappend
  /home/me/Desktop/compulab/sources/meta-proprietary/recipes-kernel/linux/linux-at91_5.4.bbappend

您不能附加到一开始就不存在的食谱。

如果食谱存在:

  • at91bootstrap_3.10.0.bb
  • dt-overlay-at91_git.bb
  • ...

确保将他们的图层添加到 bblayers.conf。

您发现的问题是,当您切换到另一个 MACHINE

时,Yocto 无法将 .bbappend 文件与任何食谱相匹配

您可以通过有条件地包含您的 .bbappend 文件来解决问题,只有在启用了特定图层的情况下。 Yocto 通过 BBFILE_DYNAMIC 变量支持这一点。

例如,如果您将 .bbappend 文件保存在您自己图层的 dynamic-layers/meta-atmel 文件夹中,并且您只想包含那些 .bbappend 文件,前提是 meta-atmel正在使用中,然后将以下内容添加到您的 layer.conf:

BBFILES_DYNAMIC += "\
    meta-atmel:${LAYERDIR}/dynamic-layers/meta-atmel/recipes-*/*/*.bbappend \
    meta-atmel:${LAYERDIR}/dynamic-layers/meta-atmel/recipes-*/*/*/*.bbappend \
"

(适当调整路径/文件夹深度)。

这表示如果 meta-atmel 包含在图层列表中,则将两个 dynamic-layers/... 路径添加到搜索路径中。