(DIR) <- Back
       
       
       # Setup an OpenBSD RISCV64 VM in QEMU
       
       Last modification on 2021-10-26
       
       This describes how to setup an OpenBSD RISCV64 VM in QEMU.
       
       The shellscript below does the following:
       
       * Set up the disk image (raw format).
       * Patch the disk image with the OpenBSD miniroot file for the installation.
       * Downloads the opensbi and u-boot firmware files for qemu.
       * Run the VM with the supported settings.
       
       The script is tested on the host GNU/Void Linux and OpenBSD-current.
       
       **IMPORTANT!: The signature and checksum for the miniroot, u-boot and opensbi
       files are not verified. If the host is OpenBSD make sure to instead install the
       packages (pkg_add u-boot-riscv64 opensbi) and adjust the firmware path for the
       qemu -bios and -kernel options. **
       
       
       ## Shellscript
       
               #!/bin/sh
               # mirror list: https://www.openbsd.org/ftp.html
               mirror="https://ftp.bit.nl/pub/OpenBSD/"
               release="7.0"
               minirootname="miniroot70.img"
               
               miniroot() {
                       test -f "${minirootname}" && return # download once
               
                       url="${mirror}/${release}/riscv64/${minirootname}"
                       curl -o "${minirootname}" "${url}"
               }
               
               createrootdisk() {
                       test -f disk.raw && return # create once
                       qemu-img create disk.raw 10G # create 10 GB disk
                       dd conv=notrunc if=${minirootname} of=disk.raw # write miniroot to disk
               }
               
               opensbi() {
                       f="opensbi.tgz"
                       test -f "${f}" && return # download and extract once.
               
                       url="${mirror}/${release}/packages/amd64/opensbi-0.9p0.tgz"
                       curl -o "${f}" "${url}"
               
                       tar -xzf "${f}" share/opensbi/generic/fw_jump.bin
               }
               
               uboot() {
                       f="uboot.tgz"
                       test -f "${f}" && return # download and extract once.
               
                       url="${mirror}/${release}/packages/amd64/u-boot-riscv64-2021.07p0.tgz"
                       curl -o "${f}" "${url}"
               
                       tar -xzf "${f}" share/u-boot/qemu-riscv64_smode/u-boot.bin
               }
               
               setup() {
                       miniroot
                       createrootdisk
                       opensbi
                       uboot
               }
               
               run() {
                       qemu-system-riscv64 \
                               -machine virt \
                               -nographic \
                               -m 2048M \
                               -smp 2 \
                               -bios share/opensbi/generic/fw_jump.bin \
                               -kernel share/u-boot/qemu-riscv64_smode/u-boot.bin \
                               -drive file=disk.raw,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 \
                               -netdev user,id=net0,ipv6=off -device virtio-net-device,netdev=net0
               }
               
               setup
               run