#!/usr/bin/env bash set -ex #export PATH=/nix/store/c5xwy0rllg4lcw61mh20glairjz7ibv4-qemu-8.0.4/bin/:$PATH CDIR=$(readlink -f "$PWD") NIX_DISK_IMAGE=$(readlink -f "${NIX_DISK_IMAGE:-./visionfive-nix.qcow2}") if ! test -e "$NIX_DISK_IMAGE"; then qemu-img create -f qcow2 "$NIX_DISK_IMAGE" 1024M fi echo "NIX_DISK_IMAGE = $NIX_DISK_IMAGE" # Create a directory for storing temporary data of the running VM. if [ -z "$TMPDIR" ] || [ -z "$USE_TMPDIR" ]; then TMPDIR=$(mktemp -d nix-vm.XXXXXXXXXX --tmpdir) fi # Create a directory for exchanging data with the VM. mkdir -p "$TMPDIR/xchg" system="$NIXOS_SYSTEM_TOPLEVEL" echo "Booting $system" cd "$TMPDIR" #QEMU_KERNEL_PARAMS="boot.debug1devices" #QEMU_KERNEL_PARAMS="boot.trace boot.debug1" # Trap the CPU on compressed instructions? TRAP_COMPRESSED="-cpu rv64,c=false" CUSTOM_BIOS="-bios $OPENSBI/share/opensbi/lp64/generic/firmware/fw_payload.bin" #CUSTOM_BIOS="-bios $OPENSBI/share/opensbi/lp64/generic/firmware/fw_jump.elf" #CUSTOM_BIOS="-bios $CDIR/bios-nc.bin" #CUSTOM_BIOS="-bios $CDIR/bios.bin" #CUSTOM_BIOS="-bios opensbi-1.4-rv-bin/share/opensbi/lp64/generic/firmware/fw_payload.bin" #DEBUG_GDB="-s -S" DEBUG_CPU="-d cpu_reset" #DEBUG_CPU="-d in_asm,cpu,cpu_reset" # Start QEMU. exec qemu-system-riscv64 \ $DEBUG_GDB \ $DEBUG_CPU \ -name visionfive-nix \ -m 1024 \ -smp 32 \ -nographic \ -machine virt \ -device virtio-rng-pci \ $TRAP_COMPRESSED \ $CUSTOM_BIOS \ -netdev user,id=net0,hostfwd=tcp::60022-:22 -device virtio-net-device,netdev=net0 \ -virtfs local,path=/nix/store,security_model=none,mount_tag=nix-store \ -virtfs local,path="${SHARED_DIR:-$TMPDIR/xchg}",security_model=none,mount_tag=shared \ -virtfs local,path="$TMPDIR"/xchg,security_model=none,mount_tag=xchg \ -device virtio-keyboard \ -drive "file=$NIX_DISK_IMAGE,if=none,id=hd0" \ -device virtio-blk-device,drive=hd0 \ -device loader,addr=0x84000000,file=$system/kernel \ -kernel $system/kernel \ -initrd $system/initrd \ -append "$(cat $system/kernel-params) init=$system/init console=ttyS0,115200n8 loglevel=7 $QEMU_KERNEL_PARAMS" $QEMU_OPTS \ "$@" # -kernel $system/kernel \ # -initrd $system/initrd \ # -append "$(cat $system/kernel-params) init=$system/init regInfo=/nix/store/x3zpwfbk2wkiisxhgi7zwsfwbdfxk0w1-closure-info-riscv64-unknown-linux-gnu/registration console=ttyS0,115200n8 loglevel=7 $QEMU_KERNEL_PARAMS" # -kernel ${NIXPKGS_QEMU_KERNEL_visionfive_nix:-/nix/store/8n5fakqq44nsmbcn0vdm3mzsvcq9ihbi-nixos-system-visionfive-nix-24.05.20240115.c3e128f/kernel} \ # -initrd /nix/store/96058frp51dn0xxfci4kyvzz0rvd5ngy-initrd-linux-riscv64-unknown-linux-gnu-6.1.72/initrd \ # -append "$(cat /nix/store/8n5fakqq44nsmbcn0vdm3mzsvcq9ihbi-nixos-system-visionfive-nix-24.05.20240115.c3e128f/kernel-params) init=/nix/store/8n5fakqq44nsmbcn0vdm3mzsvcq9ihbi-nixos-system-visionfive-nix-24.05.20240115.c3e128f/init regInfo=/nix/store/bgqa92gznhcr9aryx6ac4ycx4s2385cr-closure-info-riscv64-unknown-linux-gnu/registration console=ttyS0,115200n8 console=tty0 $QEMU_KERNEL_PARAMS" \ # -drive "file=$NIX_DISK_IMAGE,if=virtio,id=hd0" \ # -hda "$NIX_DISK_IMAGE" \ #-net nic,model=virtio,macaddr=16:da:11:b4:44:c9 -net user \ # -net nic,netdev=user.0,model=virtio -netdev user,id=user.0,"$QEMU_NET_OPTS" \ #console=tty0 #console=ttyS0,115200n8 # # -fsdev local,id=fsdev1,path=/nix/store,security_model=none \ # -device virtio-9p-pci,fsdev=fsdev1,mount_tag=store,bus=pcie.1 \ # # -drive cache=writeback,file="$NIX_DISK_IMAGE",id=drive1,if=none,index=1,werror=report -device virtio-blk-pci,drive=drive1 \