From 516313b48947106720819768cde7fb4a37f0f98d Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Wed, 19 Nov 2025 16:46:41 +0100 Subject: [PATCH] board/common: Move QEMU script generation to separate make target --- board/common/Config.in | 8 +++++ board/common/common.mk | 1 + board/common/post-image.sh | 11 ------- board/common/qemu/Config.in.in | 12 +++---- board/common/qemu/qemu.mk | 45 +++++++++++++++++++++++++++ board/common/qemu/{qemu.sh => run.sh} | 31 ++++++------------ external.mk | 9 ------ 7 files changed, 70 insertions(+), 47 deletions(-) create mode 100644 board/common/qemu/qemu.mk rename board/common/qemu/{qemu.sh => run.sh} (95%) diff --git a/board/common/Config.in b/board/common/Config.in index 3af7c388..ce3fe125 100644 --- a/board/common/Config.in +++ b/board/common/Config.in @@ -8,6 +8,14 @@ source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-itb-rauc/Config.in" endmenu +config QEMU_SCRIPTS + bool "QEMU scripts" + default y + help + Install QEMU scripts and related files in the images + directory, which can be used to launch virtual Infix + instances. + menuconfig TRUSTED_KEYS bool "Trusted keys for image" help diff --git a/board/common/common.mk b/board/common/common.mk index 8cbf082f..2fcfe2d4 100644 --- a/board/common/common.mk +++ b/board/common/common.mk @@ -1,4 +1,5 @@ include $(BR2_EXTERNAL_INFIX_PATH)/board/common/image/image.mk +include $(BR2_EXTERNAL_INFIX_PATH)/board/common/qemu/qemu.mk ifeq ($(TRUSTED_KEYS),y) include $(BR2_EXTERNAL_INFIX_PATH)/board/common/uboot/uboot.mk diff --git a/board/common/post-image.sh b/board/common/post-image.sh index e6795eae..86c82c86 100755 --- a/board/common/post-image.sh +++ b/board/common/post-image.sh @@ -43,17 +43,6 @@ if [ "$BR2_TARGET_ROOTFS_SQUASHFS" = "y" ]; then cp "$BR2_EXTERNAL_INFIX_PATH/board/common/rootfs/usr/bin/onieprom" "$BINARIES_DIR/" - # Menuconfig support for modifying Qemu args in release tarballs - cp "$BR2_EXTERNAL_INFIX_PATH/board/common/qemu/qemu.sh" "$BINARIES_DIR/" - sed -e "s/@ARCH@/QEMU_$BR2_ARCH/" \ - -e "s/@DISK_IMG@/$diskimg/" \ - < "$BR2_EXTERNAL_INFIX_PATH/board/common/qemu/Config.in.in" \ - > "$BINARIES_DIR/Config.in" - rm -f "$BINARIES_DIR/qemu.cfg" - CONFIG_="CONFIG_" BR2_CONFIG="$BINARIES_DIR/qemu.cfg" \ - "$O/build/buildroot-config/conf" --olddefconfig "$BINARIES_DIR/Config.in" - rm -f "$BINARIES_DIR/qemu.cfg.old" "$BINARIES_DIR/.config.old" - # Quick intro for beginners, with links to more information cp "$BR2_EXTERNAL_INFIX_PATH/board/common/README.txt" "$BINARIES_DIR/" fi diff --git a/board/common/qemu/Config.in.in b/board/common/qemu/Config.in.in index e105b98d..4c4356d9 100644 --- a/board/common/qemu/Config.in.in +++ b/board/common/qemu/Config.in.in @@ -99,20 +99,20 @@ config QEMU_MACHINE_RAM config QEMU_KERNEL string depends on QEMU_LOADER_KERNEL - default "zImage" if QEMU_arm - default "Image" if QEMU_aarch64 - default "bzImage" if QEMU_x86_64 + default "../zImage" if QEMU_arm + default "../Image" if QEMU_aarch64 + default "../bzImage" if QEMU_x86_64 config QEMU_BIOS string depends on !QEMU_LOADER_KERNEL - default "u-boot.bin" if QEMU_LOADER_UBOOT - default "OVMF.fd" if QEMU_LOADER_OVMF + default "../u-boot.bin" if QEMU_LOADER_UBOOT + default "../OVMF.fd" if QEMU_LOADER_OVMF config QEMU_ROOTFS string default "@DISK_IMG@" if !QEMU_ROOTFS_INITRD - default "rootfs.squashfs" if QEMU_ROOTFS_INITRD + default "../rootfs.squashfs" if QEMU_ROOTFS_INITRD config QEMU_DTB_EXTEND bool diff --git a/board/common/qemu/qemu.mk b/board/common/qemu/qemu.mk new file mode 100644 index 00000000..336507aa --- /dev/null +++ b/board/common/qemu/qemu.mk @@ -0,0 +1,45 @@ +################################################################################ +# +# qemu-scripts +# +################################################################################ + +QEMU_SCRIPTS_DIR := $(pkgdir) +qemu-kconfig = \ + CONFIG_="CONFIG_" \ + BR2_CONFIG="$(BINARIES_DIR)/qemu/.config" \ + $(BUILD_DIR)/buildroot-config/$(1) $(2) "$(BINARIES_DIR)/qemu/Config.in" + +ifeq ($(QEMU_SCRIPTS),y) + +.PHONY: run +run: + @$(BINARIES_DIR)/qemu/run.sh + +.PHONY: run-menuconfig +run-menuconfig: $(BUILD_DIR)/buildroot-config/mconf + @$(call qemu-kconfig,mconf) + +qemu-scripts: \ + $(BINARIES_DIR)/qemu/run.sh \ + $(BINARIES_DIR)/qemu/Config.in \ + $(BINARIES_DIR)/qemu/.config + +$(BINARIES_DIR)/qemu/run.sh: $(QEMU_SCRIPTS_DIR)/run.sh + @$(call IXMSG,"Installing QEMU scripts") + @mkdir -p $(dir $@) + @cp $< $@ + +$(BINARIES_DIR)/qemu/Config.in: $(QEMU_SCRIPTS_DIR)/Config.in.in + @mkdir -p $(dir $@) + @sed \ + -e "s:@ARCH@:QEMU_$(BR2_ARCH):" \ + -e "s:@DISK_IMG@:../$(INFIX_ARTIFACT).qcow2:" \ + < $< >$@ + +$(BINARIES_DIR)/qemu/.config: $(BINARIES_DIR)/qemu/Config.in + @$(call qemu-kconfig,conf,--olddefconfig) + @rm -f $@.old + +TARGETS_ROOTFS += qemu-scripts +endif diff --git a/board/common/qemu/qemu.sh b/board/common/qemu/run.sh similarity index 95% rename from board/common/qemu/qemu.sh rename to board/common/qemu/run.sh index 9deb2c4c..48052c53 100755 --- a/board/common/qemu/qemu.sh +++ b/board/common/qemu/run.sh @@ -19,8 +19,8 @@ # # shellcheck disable=SC3037 -# Local variables -imgdir=$(readlink -f "$(dirname "$0")") +qdir=$(dirname "$(readlink -f "$0")") +imgdir=$(readlink -f "${qdir}/..") prognm=$(basename "$0") usage() @@ -56,12 +56,8 @@ die() load_qemucfg() { - tmp=$(mktemp -p /tmp) - - grep ^CONFIG_QEMU_ "$1" >"$tmp" # shellcheck disable=SC1090 - . "$tmp" - rm "$tmp" + . "./.config" [ "$CONFIG_QEMU_MACHINE" ] || die "Missing QEMU_MACHINE" [ "$CONFIG_QEMU_ROOTFS" ] || die "Missing QEMU_ROOTFS" @@ -247,7 +243,7 @@ rocker_port_args() net_args() { # Infix will pick up this file via fwcfg and install it to /etc - mactab=${imgdir}/mactab + mactab=${qdir}/mactab :> "$mactab" echo -n "-fw_cfg name=opt/mactab,file=$mactab " @@ -286,7 +282,7 @@ vpd_args() { [ "$CONFIG_QEMU_VPD" = "y" ] || return - vpd_file="${imgdir}/vpd" + vpd_file="${qdir}/vpd" if ! [ -f "$vpd_file" ]; then onieprom="${imgdir}/onieprom" @@ -430,7 +426,7 @@ dtb_args() # Extend it with the environment and signing information in # u-boot.dtb. - echo "qemu.dtb u-boot.dtb" | \ + echo "qemu.dtb ../u-boot.dtb" | \ xargs -n 1 dtc -I dtb -O dts | \ { echo "/dts-v1/;"; sed -e 's:/dts-v[0-9]\+/;::'; } | \ dtc >qemu-extended.dtb 2>/dev/null @@ -439,7 +435,7 @@ dtb_args() echo -n "-dtb qemu-extended.dtb " else # Otherwise we just use the unmodified one - echo -n "-dtb u-boot.dtb " + echo -n "-dtb ../u-boot.dtb " fi } @@ -485,13 +481,12 @@ EOF menuconfig() { - grep -q QEMU_MACHINE Config.in || die "$prognm: must be run from the output/images directory" + grep -q QEMU_MACHINE Config.in || die "$prognm: must be run from the $$O/images/qemu directory" command -v kconfig-mconf >/dev/null || die "$prognm: cannot find kconfig-mconf for menuconfig" exec kconfig-mconf Config.in } -scriptdir=$(dirname "$(readlink -f "$0")") -cd "$scriptdir" || (echo "Failed cd to $scriptdir"; exit 1) +cd "$qdir" || (echo "Failed cd to $qdir"; exit 1) while [ "$1" != "" ]; do case $1 in @@ -510,13 +505,7 @@ while [ "$1" != "" ]; do shift done -if [ -f .config ]; then - # Customized settings from 'qemu.sh -c' - load_qemucfg .config -else - # Shipped defaults from release tarball - load_qemucfg qemu.cfg -fi +load_qemucfg if [ -z "$QEMU_EXTRA_APPEND" ]; then QEMU_EXTRA_APPEND="$*" diff --git a/external.mk b/external.mk index 54fdd6e4..20d65312 100644 --- a/external.mk +++ b/external.mk @@ -8,15 +8,6 @@ local.mk: @$(call IXMSG,"Installing local override for certain packages") @(cd $O && ln -s $(BR2_EXTERNAL_INFIX_PATH)/local.mk .) -.PHONY: run -run: - @$(BINARIES_DIR)/qemu.sh - -.PHONY: run-menuconfig -run-menuconfig: $(BUILD_DIR)/buildroot-config/mconf - CONFIG_="CONFIG_" BR2_CONFIG="$(BINARIES_DIR)/.config" \ - $(BUILD_DIR)/buildroot-config/mconf $(BINARIES_DIR)/Config.in - # # Buildroot package extensions #