From 76e5b054977074e7bc03edf3f4e06a6afc2fa826 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E4=BB=81=E9=B9=8F?= <2110459069@qq.com> Date: Wed, 18 Dec 2024 15:13:27 +0800 Subject: [PATCH] fix(device, Makefile): add cfg macro to avoid compiling-time error When use aarch64, we don't define riscv's feature plic or aia, thus making `interrupt_phandle` variable being undefined. We conditionally compile `create_fdt_riscv64` func to avoid this thing. --- Makefile | 43 +++++++++++++++++++++------------------ src/device/device_tree.rs | 1 + 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index 5ac2b8d..a28e263 100644 --- a/Makefile +++ b/Makefile @@ -40,10 +40,12 @@ endif IRQ ?= plic AIA_GUESTS ?= 3 -ifeq ($(IRQ), plic) -FEATURES += plic -else ifeq ($(IRQ), aia) -FEATURES += aia +ifeq ($(ARCH), riscv64) + ifeq ($(IRQ), plic) + FEATURES += plic + else ifeq ($(IRQ), aia) + FEATURES += aia + endif endif TEXT_START ?= 0x83000000 @@ -55,25 +57,26 @@ IMAGE=rust_shyper TARGET_DIR=target/${ARCH}/${PROFILE} ifeq (${ARCH}, aarch64) -QEMU_COMMON_OPTIONS = -machine virt,virtualization=on,gic-version=$(GIC_VERSION)\ - -m 8g -cpu cortex-a57 -smp 4 -display none -global virtio-mmio.force-legacy=false\ - -kernel ${TARGET_DIR}/${IMAGE}.bin -QEMU_NETWORK_OPTIONS = -netdev user,id=n0,hostfwd=tcp::5555-:22 -device virtio-net-device,bus=virtio-mmio-bus.24,netdev=n0 -QEMU_DISK_OPTIONS = -drive file=${DISK},if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.25 -MKIMAGE_ARCH = arm64 + QEMU_COMMON_OPTIONS = -machine virt,virtualization=on,gic-version=$(GIC_VERSION)\ + -m 8g -cpu cortex-a57 -smp 4 -display none -global virtio-mmio.force-legacy=false\ + -kernel ${TARGET_DIR}/${IMAGE}.bin + QEMU_NETWORK_OPTIONS = -netdev user,id=n0,hostfwd=tcp::5555-:22 -device virtio-net-device,bus=virtio-mmio-bus.24,netdev=n0 + QEMU_DISK_OPTIONS = -drive file=${DISK},if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.25 + MKIMAGE_ARCH = arm64 else ifeq (${ARCH}, riscv64) # -global virtio-mmio.force-legacy=false option for disable legacy,i.e. using the latest virtio version -ifeq ($(IRQ), plic) -QEMU_COMMON_OPTIONS = -machine virt -else ifeq ($(IRQ), aia) -QEMU_COMMON_OPTIONS = -machine virt,aia=aplic-imsic,aia-guests=$(AIA_GUESTS) -endif -QEMU_COMMON_OPTIONS += -m 8g -smp 4 -display none -bios default \ - -kernel ${TARGET_DIR}/${IMAGE}.bin -QEMU_NETWORK_OPTIONS = -netdev user,id=n0,hostfwd=tcp::5555-:22 -device virtio-net-device,netdev=n0 -QEMU_DISK_OPTIONS = -drive file=${DISK},if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 -MKIMAGE_ARCH = riscv + ifeq ($(IRQ), plic) + QEMU_COMMON_OPTIONS = -machine virt + else ifeq ($(IRQ), aia) + QEMU_COMMON_OPTIONS = -machine virt,aia=aplic-imsic,aia-guests=$(AIA_GUESTS) + endif + + QEMU_COMMON_OPTIONS += -m 8g -smp 4 -display none -bios default \ + -kernel ${TARGET_DIR}/${IMAGE}.bin + QEMU_NETWORK_OPTIONS = -netdev user,id=n0,hostfwd=tcp::5555-:22 -device virtio-net-device,netdev=n0 + QEMU_DISK_OPTIONS = -drive file=${DISK},if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 + MKIMAGE_ARCH = riscv else $(error bad qemu arch: $(ARCH)) endif diff --git a/src/device/device_tree.rs b/src/device/device_tree.rs index f9e255c..e2a3bc7 100644 --- a/src/device/device_tree.rs +++ b/src/device/device_tree.rs @@ -289,6 +289,7 @@ pub fn create_fdt(config: &VmConfigEntry) -> FdtWriterResult> { } } +#[cfg(target_arch = "riscv64")] pub fn create_fdt_riscv64(config: &VmConfigEntry) -> FdtWriterResult> { let mut fdt = FdtWriter::new()?; let ncpu = config.cpu_allocated_bitmap().count_ones(); -- Gitee