From f680463a2a48a15f861f647adfcca06c8e7135ee Mon Sep 17 00:00:00 2001 From: egg12138 Date: Thu, 20 Nov 2025 11:46:13 +0800 Subject: [PATCH] refactor: add qemu boot conf in openeuler-image for mcs feat Previously, enabling DISTRO_FEATURES="mcs" in openeuler-image only added packagegroup-mcs but lacked QEMU boot configurations. MCS features require QB_* variables for proper QEMU startup (device tree generation, mem layout, CPU settings for components) - Extract MCS QEMU configs to mcs-image-common.inc and conditionally include it in openeuler-image when mcs feature is enabled. This ensures standard images can boot MCS workloads properly in QEMU. Signed-off-by: egg12138 --- .../recipes-core/images/mcs-image-common.inc | 47 +++++++++++++++++++ .../images/openeuler-image-mcs.bb | 46 +----------------- .../recipes-core/images/openeuler-image.bb | 3 ++ 3 files changed, 52 insertions(+), 44 deletions(-) create mode 100644 meta-openeuler/recipes-core/images/mcs-image-common.inc diff --git a/meta-openeuler/recipes-core/images/mcs-image-common.inc b/meta-openeuler/recipes-core/images/mcs-image-common.inc new file mode 100644 index 00000000000..c9ffaa33793 --- /dev/null +++ b/meta-openeuler/recipes-core/images/mcs-image-common.inc @@ -0,0 +1,47 @@ +# MCS Image Common Configuration +# This file contains shared MCS image configuration that can be reused across +# different MCS image variants. + +# by default, mcs image needs a modified device tree for reserved resources +inherit features_check +REQUIRED_DISTRO_FEATURES = "mcs" + +# Only inherit the qemuboot classes when building for a qemu machine +QB_QEMU_CLASSES = "" +QB_QEMU_CLASSES:append:qemuall = "${@bb.utils.contains('DISTRO_FEATURES', 'xen', ' qemuboot-xen-defaults qemuboot-xen-dtb', '', d)}" +QB_QEMU_CLASSES:append:qemuall = "${@bb.utils.contains('MCS_FEATURES', 'openamp', ' qemuboot-mcs-dtb', '', d)}" +QB_QEMU_CLASSES:append:qemuall = "${@bb.utils.contains('MCS_FEATURES', 'zvm', ' qemuboot-zvm-defaults', '', d)}" +QB_MEM = "-m 1048" +inherit ${QB_QEMU_CLASSES} + +IMAGE_FEATURES:remove = "weston" + +# ZVM currently support simple kernel +IMAGE_INSTALL:remove = " \ + ${@bb.utils.contains('MCS_FEATURES', 'zvm', ' \ + packagegroup-kernel-modules \ + ', '', d)}" + +python () { + machine = d.getVar('MACHINE').split() + + # qemu-aarch64 related handling + if 'qemu-aarch64' in machine: + mcs_features = d.getVar('MCS_FEATURES').split() + if 'openamp' in mcs_features: + d.setVar('QB_KERNEL_CMDLINE_APPEND', 'maxcpus=3') + # IMAGE_NAME variable depends on DATETIME variable, result in error: + # The metadata is not deterministic and this needs to be fixed + # this is a workaround to fix: + # not build soft link, remove IMAGE_VERSION_SUFFIX from QB_DTB + d.setVar('QB_DTB', d.getVar('IMAGE_LINK_NAME') + ".qemuboot.dtb") + d.setVar('QB_DTB_LINK', d.getVar('IMAGE_LINK_NAME') + ".qemuboot.dtb") + elif 'jailhouse' in mcs_features: + d.setVar('QB_MACHINE', '-machine virt,gic-version=3,virtualization=on,its=off') + d.setVar('QB_MEM', '-m 2048') + d.setVar('QB_OPT_APPEND','') + d.setVar('QB_RNG','') + d.setVar('QB_GRAPHICS','') + d.setVar('QB_NETWORK_DEVICE', "-device virtio-net-device,netdev=net0,mac=@MAC@") + d.setVar('QB_KERNEL_CMDLINE_APPEND', 'mem=750M') +} diff --git a/meta-openeuler/recipes-core/images/openeuler-image-mcs.bb b/meta-openeuler/recipes-core/images/openeuler-image-mcs.bb index a9ed9b2f58b..9e8fe5bab96 100644 --- a/meta-openeuler/recipes-core/images/openeuler-image-mcs.bb +++ b/meta-openeuler/recipes-core/images/openeuler-image-mcs.bb @@ -1,20 +1,7 @@ SUMMARY = "A small image just capable of openEuler Embedded's mcs feature" require openeuler-image-common.inc - -# by default, mcs image needs a modified device tree for reserved resources -inherit features_check -REQUIRED_DISTRO_FEATURES = "mcs" - -# Only inherit the qemuboot classes when building for a qemu machine -QB_QEMU_CLASSES = "" -QB_QEMU_CLASSES:append:qemuall = "${@bb.utils.contains('DISTRO_FEATURES', 'xen', ' qemuboot-xen-defaults qemuboot-xen-dtb', '', d)}" -QB_QEMU_CLASSES:append:qemuall = "${@bb.utils.contains('MCS_FEATURES', 'openamp', ' qemuboot-mcs-dtb', '', d)}" -QB_QEMU_CLASSES:append:qemuall = "${@bb.utils.contains('MCS_FEATURES', 'zvm', ' qemuboot-zvm-defaults', '', d)}" -QB_MEM = "-m 1048" -inherit ${QB_QEMU_CLASSES} - -IMAGE_FEATURES:remove = "weston" +require mcs-image-common.inc # basic packages required, e.g., boot, ssh ,debug # overwrite this variable, or IMAGE_INSTALL was standard packages in openeuler-image-common.inc file @@ -22,33 +9,4 @@ IMAGE_INSTALL = " \ packagegroup-core-boot \ packagegroup-kernel-modules \ packagegroup-mcs \ -" -# ZVM currently support simple kernel -IMAGE_INSTALL:remove = " \ - ${@bb.utils.contains('MCS_FEATURES', 'zvm', ' \ - packagegroup-kernel-modules \ - ', '', d)}" - -python () { - machine = d.getVar('MACHINE').split() - - # qemu-aarch64 related handling - if 'qemu-aarch64' in machine: - mcs_features = d.getVar('MCS_FEATURES').split() - if 'openamp' in mcs_features: - d.setVar('QB_KERNEL_CMDLINE_APPEND', 'maxcpus=3') - # IMAGE_NAME variable depends on DATETIME variable, result in error: - # The metadata is not deterministic and this needs to be fixed - # this is a workaround to fix: - # not build soft link, remove IMAGE_VERSION_SUFFIX from QB_DTB - d.setVar('QB_DTB', d.getVar('IMAGE_LINK_NAME') + ".qemuboot.dtb") - d.setVar('QB_DTB_LINK', d.getVar('IMAGE_LINK_NAME') + ".qemuboot.dtb") - elif 'jailhouse' in mcs_features: - d.setVar('QB_MACHINE', '-machine virt,gic-version=3,virtualization=on,its=off') - d.setVar('QB_MEM', '-m 2048') - d.setVar('QB_OPT_APPEND','') - d.setVar('QB_RNG','') - d.setVar('QB_GRAPHICS','') - d.setVar('QB_NETWORK_DEVICE', "-device virtio-net-device,netdev=net0,mac=@MAC@") - d.setVar('QB_KERNEL_CMDLINE_APPEND', 'mem=750M') -} +" \ No newline at end of file diff --git a/meta-openeuler/recipes-core/images/openeuler-image.bb b/meta-openeuler/recipes-core/images/openeuler-image.bb index 9a5f69b3aac..34365f7dec7 100644 --- a/meta-openeuler/recipes-core/images/openeuler-image.bb +++ b/meta-openeuler/recipes-core/images/openeuler-image.bb @@ -37,3 +37,6 @@ ${@bb.utils.contains("DISTRO_FEATURES", "containerd", "packagegroup-basic-contai # You can add extra user here, suck like: # inherit extrausers # EXTRA_USERS_PARAMS = "useradd -p '' openeuler;" + +MCS_IMAGE_INCLUDE = "${@bb.utils.contains('DISTRO_FEATURES', 'mcs', 'mcs-image-common.inc', '', d)}" +include ${MCS_IMAGE_INCLUDE} -- Gitee