[英]How to enable/disable a particular bbappend for a specific MACHINE in Yocto
我试图了解 Yocto 为特定机器启用/禁用特定 bbappend 提供的机制。 我读了这个链接(修改变量以支持不同的机器):
并且还发现了一些与堆栈溢出相关的信息:
我尝试将所有这些信息付诸实践,但没有任何成功。 这是我的特殊问题:
“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.