#!/usr/bin/env bash # The script is created for starting a riscv64 qemu virtual machine with specific parameters. RESTORE=$(echo -en '\001\033[0m\002') YELLOW=$(echo -en '\001\033[00;33m\002') RED=$(echo -en '\001\033[00;31m\002') ## Configuration vcpu=4 memory=8 drive="openEuler-24.03-SP2-LLVM-riscv64.qcow2" fw1="RISCV_VIRT_CODE.fd " fw2="RISCV_VIRT_VARS.fd" ssh_port=12055 cmd="/PATH/TO/PATCHED/qemu-system-riscv64 \ -nographic -machine virt,pflash0=pflash0,pflash1=pflash1,acpi=off\ -smp "$vcpu" -m "$memory"G \ -cpu rva23s64,sv39=on \ -display gtk \ -audiodev pa,id=snd0 \ -blockdev node-name=pflash0,driver=file,read-only=on,filename="$fw1" \ -blockdev node-name=pflash1,driver=file,filename="$fw2" \ -drive file="$drive",format=qcow2,id=hd0,if=none \ -device virtio-blk-device,drive=hd0,bootindex=1 \ -object rng-random,filename=/dev/urandom,id=rng0 \ -device virtio-gpu \ -device virtio-rng-device,rng=rng0 \ -device virtio-net-device,netdev=usernet \ -netdev user,id=usernet,hostfwd=tcp::"$ssh_port"-:22 \ -device qemu-xhci -usb -device usb-kbd -device usb-tablet -device usb-audio,audiodev=snd0" echo ${RED}:: PATCHED QEMU IS REQUIRED TO BOOT THIS IMAGE.${RESTORE} echo ${RED}:: LEARN MORE @ README.txt${RESTORE} echo ${YELLOW}:: QEMU 10.1.0 or above is required for supporting RVA23S64.${RESTORE} echo "" echo ${YELLOW}:: Starting VM...${RESTORE} echo ${YELLOW}:: Using following configuration${RESTORE} echo "" echo ${YELLOW}vCPU Cores: "$vcpu"${RESTORE} echo ${YELLOW}Memory: "$memory"G${RESTORE} echo ${YELLOW}Disk: "$drive"${RESTORE} echo ${YELLOW}SSH Port: "$ssh_port"${RESTORE} echo "" echo ${YELLOW}:: Tip: Try setting DNS manually if QEMU user network doesn\'t work well. ${RESTORE} echo ${YELLOW}:: HOWTO -\> https://serverfault.com/a/810639 ${RESTORE} echo "" echo ${YELLOW}:: Tip: If \'ping\' reports permission error, try reinstalling \'iputils\'. ${RESTORE} echo ${YELLOW}:: HOWTO -\> \'sudo dnf reinstall iputils\' ${RESTORE} echo "" sleep 2 eval $cmd