#!/usr/bin/env bash set -ex EXTRA="" KERNEL="" DISK="" while [[ $# -gt 0 ]]; do case $1 in -d | --disk) if [ -z "$2" ]; then echo "run-riscv-qemu (error): you have to provide a value for -d/--disk" exit 1 fi DISK="$2" shift 2 ;; -g | --gdb) EXTRA="-s -S" shift ;; -h | --help) SHOW_HELP=1 shift ;; -k | --kernel) if [ -z "$2" ]; then echo "run-riscv-qemu (error): you have to provide a value for -k/--kernel" exit 1 fi KERNEL="$2" shift 2 ;; -*) echo "run-riscv-qemu (error): unknown option '$1'." exit 1 ;; *) if [ ! -z "$BUSYBOX_SRC" ]; then echo "run-riscv-qemu (info): including '$1' to the VM" rm -rf "$BUSYBOX_SRC/initramfs/home" mkdir -p "$BUSYBOX_SRC/initramfs/home/$(whoami)" cp "$1" "$BUSYBOX_SRC/initramfs/home/$(whoami)/" fi shift ;; esac done # Print the show message if needed. if [ -n "$SHOW_HELP" ]; then cat <../initramfs.cpio.gz popd ## # Actual run. set -x qemu-system-riscv64 -machine virt -nographic \ -cpu max -m 8G -smp 4 \ -device virtio-net-device,netdev=usernet \ -netdev user,id=usernet,hostfwd=tcp::22222-:22 \ -kernel "$KERNEL" \ -initrd "$BUSYBOX_SRC/initramfs.cpio.gz" \ -append "root=/dev/ram nokaslr ftrace_dump_on_oops sysctl.kernel.panic_on_rcu_stall=1" \ $EXTRA