我试图了解Yocto提供的机制,以启用/禁用特定机器的特定bbappend。我阅读了以下链接(修改变量以支持其他计算机):
https://www.yoctoproject.org/docs/1.5/dev-manual/dev-manual.html#best-practices-to-follow-when-creating-layers
并且还发现了一些有关堆栈溢出的信息:
Machine specific layers in yocto
我尝试将所有这些信息付诸实践,但都没有成功。这是我的特殊问题:
用于“x”平台的BSP层提供了一个qtbase _%。bbappend,用于修改meta-qt5中的qtbase配方。我仅在为MACHINE =“x”构建时才需要此qtbase _%。bbappend,而对于其他不同的计算机则不需要。
这是在x-bsp层上定义的原始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”。
删除.bbappend文件中的所有“_x”后缀。