diff --git a/Makefile b/Makefile index b06e6f4..28323a2 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-3.0-or-later SHELLCHECK := $(shell command -v shellcheck 2>/dev/null) check: diff --git a/contrib/generate-cloud-config-seed-freebsd.sh b/contrib/generate-cloud-config-seed-freebsd.sh index 24a0eb2..26d0fbd 100755 --- a/contrib/generate-cloud-config-seed-freebsd.sh +++ b/contrib/generate-cloud-config-seed-freebsd.sh @@ -1,4 +1,5 @@ #!/bin/bash +# SPDX-License-Identifier: GPL-3.0-or-later set -euo pipefail diff --git a/contrib/generate-cloud-config-seed.sh b/contrib/generate-cloud-config-seed.sh index 79959c5..9a3e52f 100755 --- a/contrib/generate-cloud-config-seed.sh +++ b/contrib/generate-cloud-config-seed.sh @@ -1,4 +1,5 @@ #!/bin/bash +# SPDX-License-Identifier: GPL-3.0-or-later set -euo pipefail diff --git a/examples/vm/aarch64-virt-base.conf b/examples/vm/aarch64-virt-base.conf index e983305..7be1be9 100644 --- a/examples/vm/aarch64-virt-base.conf +++ b/examples/vm/aarch64-virt-base.conf @@ -4,7 +4,7 @@ # # Configuration variables # -# GUEST_DISPLAY Set to '1' to enable graphical output +# GUEST_DISPLAY Display option (QEMU -display parameter). # GUEST_VIOMMU Set to '1' to add a virtual IOMMU to the machine # GUEST_CPU CPU model (QEMU -cpu paramater, default: 'host') # GUEST_SMP SMP configuration (QEMU -smp parameter, default: '4') @@ -16,12 +16,18 @@ # Extra parameters to add to the kernel "command # line". -QEMU_SYSTEM_BINARY="$HOME/work/src/qemu/build/aarch64-softmmu/qemu-system-aarch64" -GUEST_BOOT_BASE="img/debian-11-genericcloud-arm64.qcow2" +if [[ -f "common.conf" ]]; then + source "common.conf" +fi -: "${GUEST_DISPLAY:="1"}" -: "${GUEST_CPU:="cortex-a57"}" +QEMU_SYSTEM_BINARY=${QEMU_SYSTEM_AARCH64} +: "${GUEST_BOOT_BASE:="img/debian-11-genericcloud-arm64.qcow2"}" + +: "${GUEST_DISPLAY:=""}" +: "${GUEST_CPU:="host"}" : "${GUEST_MEMORY:="2G"}" +: "${GUEST_ACCEL:="kvm"}" +: "${GUEST_GDB_PORT:=""}" : "${GUEST_NET_USER_HOSTFWDS:="tcp::${GUEST_SSH_PORT}-:22"}" : "${GUEST_BOOT:="$GUEST_BOOT_BASE"}" : "${GUEST_KERNEL_IMAGE:="arch/arm64/boot/Image"}" @@ -29,22 +35,32 @@ GUEST_BOOT_BASE="img/debian-11-genericcloud-arm64.qcow2" : "${GUEST_KERNEL_CONSOLE:="ttyAMA0"}" _setup_aarch64_virt_base() { - QEMU_PARAMS+=("-nographic") + QEMU_PARAMS+=("-nodefaults") - if [[ $GUEST_DISPLAY -eq 0 ]]; then - #QEMU_PARAMS+=("-display" "none") + if [[ -z $GUEST_DISPLAY ]]; then QEMU_PARAMS+=("-nographic") + else + QEMU_PARAMS+=("-device" "virtio-gpu-pci") + QEMU_PARAMS+=("-display" "$GUEST_DISPLAY") + QEMU_PARAMS+=("-device" "virtio-keyboard-pci") + QEMU_PARAMS+=("-device" "virtio-mouse-pci") + QEMU_PARAMS+=("-device" "qemu-xhci") + QEMU_PARAMS+=("-device" "usb-tablet") fi - QEMU_PARAMS+=("-machine" "virt") + QEMU_PARAMS+=("-machine" "virt,accel=$GUEST_ACCEL,kernel-irqchip=split") QEMU_PARAMS+=("-cpu" "$GUEST_CPU") QEMU_PARAMS+=("-smp" "1") QEMU_PARAMS+=("-m" "$GUEST_MEMORY") - QEMU_PARAMS+=("-bios" "/usr/share/edk2-armvirt/aarch64/QEMU_EFI.fd") + QEMU_PARAMS+=("-bios" "$QEMU_EDK2_AARCH64") #QEMU_PARAMS+=("-pflash" "/tmp/flash0.img") #QEMU_PARAMS+=("-pflash" "/tmp/flash1.img") + if [[ -n $GUEST_GDB_PORT ]]; then + QEMU_PARAMS+=("-gdb" "tcp::$GUEST_GDB_PORT") + fi + # simple user-level networking QEMU_PARAMS+=("-netdev" "user,id=net0,hostfwd=${GUEST_NET_USER_HOSTFWDS}") QEMU_PARAMS+=("-device" "virtio-net-pci,netdev=net0") diff --git a/examples/vm/common.conf b/examples/vm/common.conf index efd6009..fd5e9af 100644 --- a/examples/vm/common.conf +++ b/examples/vm/common.conf @@ -1,8 +1,8 @@ #!/bin/bash # vmctl run parameters -QEMU_SYSTEM_BINARY="/usr/local/bin/qemu-system-x86_64" -QEMU_IMG="/usr/local/bin/qemu-img" +QEMU_IMG=$(/usr/bin/which qemu-img) +QEMU_EDK2_AARCH64="/usr/share/edk2-armvirt/aarch64/QEMU_EFI.fd" GUEST_KERNEL_APPEND_EXTRA="audit=0" GUEST_KERNEL_BOOTDEV="/dev/vda1" diff --git a/examples/vm/nvme-aarch64.conf b/examples/vm/nvme-aarch64.conf new file mode 100644 index 0000000..25f2e8a --- /dev/null +++ b/examples/vm/nvme-aarch64.conf @@ -0,0 +1,28 @@ +#!/bin/bash + +QEMU_SYSTEM_AARCH64=$(/usr/bin/which qemu-system-aarch64) +GUEST_BOOT_BASE="img/debian-13-genericcloud-arm64.qcow2" + +source "aarch64-virt-base.conf" + +_setup_nvme_aarch64() { + # setup basevm + _setup_aarch64_virt_base + + # pcie root port + qemu_pcie_add_root_port "pcie_root_port0" \ + --chassis 1 --slot 0 + + # nvme controller + qemu_nvme_add_ctrl "nvme0" \ + --serial "deadbeef" \ + --port "pcie_root_port0" \ + --extra "mdts=7" + + # nvme namespace + qemu_nvme_add_ns "nvm" \ + --nsid "1" \ + --ctrl "nvme0" \ + --size "1G" \ + --extra "$default_nvme_ns_extra" +} diff --git a/examples/vm/nvme-cortex-a57.conf b/examples/vm/nvme-cortex-a57.conf new file mode 100644 index 0000000..fb32152 --- /dev/null +++ b/examples/vm/nvme-cortex-a57.conf @@ -0,0 +1,28 @@ +#!/bin/bash + +GUEST_BOOT_BASE="img/debian-13-genericcloud-arm64.qcow2" +GUEST_CPU="cortex-a57" + +source "aarch64-virt-base.conf" + +_setup_nvme_aarch64() { + # setup basevm + _setup_aarch64_virt_base + + # pcie root port + qemu_pcie_add_root_port "pcie_root_port0" \ + --chassis 1 --slot 0 + + # nvme controller + qemu_nvme_add_ctrl "nvme0" \ + --serial "deadbeef" \ + --port "pcie_root_port0" \ + --extra "mdts=7" + + # nvme namespace + qemu_nvme_add_ns "nvm" \ + --nsid "1" \ + --ctrl "nvme0" \ + --size "1G" \ + --extra "$default_nvme_ns_extra" +} diff --git a/examples/vm/nvme.conf b/examples/vm/nvme.conf index a8c7a0d..5974f31 100644 --- a/examples/vm/nvme.conf +++ b/examples/vm/nvme.conf @@ -1,5 +1,7 @@ #!/bin/bash +QEMU_SYSTEM_X86_64=$(/usr/bin/which qemu-system-x86_64) + source "x86_64-q35-base.conf" _setup_nvme() { diff --git a/examples/vm/x86_64-q35-base.conf b/examples/vm/x86_64-q35-base.conf index e003bbb..6842d3c 100644 --- a/examples/vm/x86_64-q35-base.conf +++ b/examples/vm/x86_64-q35-base.conf @@ -18,11 +18,14 @@ if [[ -f "common.conf" ]]; then source "common.conf" fi +QEMU_SYSTEM_BINARY=${QEMU_SYSTEM_X86_64} + : "${GUEST_DISPLAY:="0"}" : "${GUEST_VIOMMU:="1"}" : "${GUEST_CPU:="host"}" : "${GUEST_SMP:="4"}" : "${GUEST_MEMORY:="8G"}" +: "${GUEST_GDB_PORT:=""}" : "${GUEST_NET_USER_HOSTFWDS:="tcp::${GUEST_SSH_PORT}-:22"}" : "${GUEST_BOOT_BASE:="img/base.qcow2"}" : "${GUEST_BOOT:="$GUEST_BOOT_BASE"}" @@ -44,6 +47,10 @@ _setup_x86_64_q35_base() { QEMU_PARAMS+=("-smp" "$GUEST_SMP") QEMU_PARAMS+=("-m" "$GUEST_MEMORY") + if [[ -n $GUEST_GDB_PORT ]]; then + QEMU_PARAMS+=("-gdb" "tcp::$GUEST_GDB_PORT") + fi + # guest iommu if [[ $GUEST_VIOMMU -ne 0 ]]; then QEMU_PARAMS+=("-device" "intel-iommu,intremap=on")