繁体   English   中英

"如何在 Yocto 中启用\/禁用特定机器的特定 bbappend"

[英]How to enable/disable a particular bbappend for a specific MACHINE in Yocto

我试图了解 Yocto 为特定机器启用/禁用特定 bbappend 提供的机制。 我读了这个链接(修改变量以支持不同的机器):

https://www.yoctoproject.org/docs/1.5/dev-manual/dev-manual.html#best-practices-to-follow-when-creating-layers

并且还发现了一些与堆栈溢出相关的信息:

在 yocto 中加工特定层

我尝试将所有这些信息付诸实践,但没有任何成功。 这是我的特殊问题:

“x”平台的 BSP 层提供了一个 qtbase_%.bbappend,它从 meta-qt5 修改 qtbase 配方。 我需要这个 qtbase_%.bbappend 仅在为 MACHINE="x" 构建时应用,但不适用于其他不同的机器。

这是在x-bsp-layer上定义的原始qtbase_%.bbappend的内容:

PACKAGECONFIG_GL   = "gles2"
PACKAGECONFIG_FONTS = "fontconfig"
PACKAGECONFIG_APPEND = " \
${@bb.utils.contains("DISTRO_FEATURES", "wayland", "xkbcommon-evdev", \
   bb.utils.contains("DISTRO_FEATURES", "x11", " ", "libinput eglfs gbm", d), d)} \
"
PACKAGECONFIG_append = " ${PACKAGECONFIG_APPEND} kms accessibility sm"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
PACKAGECONFIG_remove = "evdev"

每当我尝试为不同于“x”的平台构建图像时,编译就会中断:

| ERROR: Feature 'opengles2' was enabled, but the pre-condition 'config.win32 || (!config.watchos && !features.opengl-desktop && libs.opengl_es2)' failed.
| ERROR: Feature 'eglfs' was enabled, but the pre-condition '!config.android && !config.darwin && !config.win32 && features.egl' failed.
| ERROR: Feature 'gbm' was enabled, but the pre-condition 'libs.gbm' failed.

从 bblayers.conf 中删除 x-BSP 层可以解决问题,但这不是我正在寻找的解决方案。

我尝试使用先前链接中提供的信息来解决此问题。 我以这种方式修改了 qtbase_%.bbappend 配方:

PACKAGECONFIG_GL_x   = "gles2"
PACKAGECONFIG_FONTS_x = "fontconfig"
PACKAGECONFIG_APPEND_x = " \
${@bb.utils.contains("DISTRO_FEATURES", "wayland", "xkbcommon-evdev", \
   bb.utils.contains("DISTRO_FEATURES", "x11", " ", "libinput eglfs gbm", d), d)} \
"
PACKAGECONFIG_append_x = " ${PACKAGECONFIG_APPEND} kms accessibility sm"
FILESEXTRAPATHS_prepend_x := "${THISDIR}/${PN}:"
PACKAGECONFIG_remove_x = "evdev"

如您所见,我在所有配方变量中附加了“_x”后缀。 假设(至少这是我所理解的)那些“_x”使变量被分配,以防万一 PLATFORM="x" 被定义。 对? 但它没有按预期工作,它会产生同样的问题。 因此,在实践中,这意味着我什至不了解这种机制的基础知识。

你们中的一些人可以对此提供一个很好的解释吗? 我认为它应该对其他有同样问题的人有所帮助。 非常感谢您的时间! :-)

只需在.bbappend文件中添加COMPATIBLE_MACHINE =“ x”。

如您所见,我在所有配方变量后均附加了“ _x”后缀

删除.bbappend文件中的所有“ _x”后缀。

请注意,按照建议添加COMPATIBLE_MACHINE会更改原始配方的签名,这是不好的做法,并且会导致您的层无法通过yocto-check-layer脚本执行的兼容性测试。 有关详细信息,请参阅

制作特定于机器的.bbappend文件的正确方法是通过覆盖,正如您已经在提案中所做的那样。 为什么它仍然失败是一个不同的问题。 我建议您通过 bitbake 检查配方的变量,并切换机器以验证它们是否相应更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM