This is my code(Imported from UTM, which is broken):
qemu-system-aarch64 -L /Users/brandon/Applications/UTM.app/Contents/Resources/qemu -S -spice "unix=on,addr=/Users/---/Library/Group Containers/WDNLXAD4W8.com.utmapp.UTM/0F075A81-8EDB-4245-B17D-061AA68FD704.spice,disable-ticketing=on,image-compression=off,playback-compression=off,streaming-video=off,gl=on" -chardev spiceport,id=org.qemu.monitor.qmp,name=org.qemu.monitor.qmp.0 -mon chardev=org.qemu.monitor.qmp,mode=control -nodefaults -vga none -device virtio-net-pci,mac=AE:AF:A6:1C:D7:8B,netdev=net0 -netdev vmnet-shared,id=net0 -device virtio-gpu-gl-pci -cpu host -smp cpus=8,sockets=1,cores=8,threads=1 -machine virt -accel hvf -drive if=pflash,format=raw,unit=0,file=/Users/---/Applications/UTM.app/Contents/Resources/qemu/edk2-aarch64-code.fd,readonly=on -drive "if=pflash,unit=1,file=/Users/---/Library/Containers/com.utmapp.UTM/Data/Documents/Windows 11.utm/Data/efi_vars.fd" -m 8192 -device ich9-intel-hda -device hda-duplex -device nec-usb-xhci,id=usb-bus -device usb-tablet,bus=usb-bus.0 -device usb-mouse,bus=usb-bus.0 -device usb-kbd,bus=usb-bus.0 -device qemu-xhci,id=usb-controller-0 -chardev spicevmc,name=usbredir,id=usbredirchardev0 -device usb-redir,chardev=usbredirchardev0,id=usbredirdev0,bus=usb-controller-0.0 -chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1,bus=usb-controller-0.0 -chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2,bus=usb-controller-0.0 -device usb-storage,drive=driveD7009BCF-2F84-4263-A943-3D3172E42D37,removable=true,bootindex=0,bus=usb-bus.0 -drive if=none,media=cdrom,id=driveD7009BCF-2F84-4263-A943-3D3172E42D37 -device nvme,drive=drive30D3D5C5-0482-4FF1-AF8B-3EC71F330561,serial=30D3D5C5-0482-4FF1-AF8B-3EC71F330561,bootindex=1 -drive "if=none,media=disk,id=drive30D3D5C5-0482-4FF1-AF8B-3EC71F330561,file=/Users/brandon/Library/Containers/com.utmapp.UTM/Data/Documents/Windows 11.utm/Data/30D3D5C5-0482-4FF1-AF8B-3EC71F330561.qcow2,discard=unmap,detect-zeroes=unmap" -device usb-storage,drive=drive72383F72-3B29-4849-B30A-43C8593DEFD3,removable=true,bootindex=2,bus=usb-bus.0 -drive if=none,media=cdrom,id=drive72383F72-3B29-4849-B30A-43C8593DEFD3 -device virtio-serial -device virtserialport,chardev=vdagent,name=com.redhat.spice.0 -chardev spicevmc,id=vdagent,debug=0,name=vdagent -device virtserialport,chardev=charchannel1,id=channel1,name=org.spice-space.webdav.0 -chardev spiceport,name=org.spice-space.webdav.0,id=charchannel1 -name "Windows 11" -uuid 0F075A81-8EDB-4245-B17D-061AA68FD704 -rtc base=localtime -device virtio-rng-pci
The error says -spice: invalid option.
I tried reinstalling qemu. I expected the VM to boot
That means that when the QEMU binary was built the necessary dependencies for SPICE weren't present, so configure disabled it (it is an optional feature). If you pass configure the option --enable-spice then that will force configure to either enable this feature or else to exit with an error, so you can identify what dependent libraries you need to install.
Im trying to use the -device,loader option in qemu. Originally, I wanted to load a file into memory, but that was (and still isnt) working. So, I tried to load a constant value into memory. This is my command:
qemu-system-aarch64 \
-machine virt \
-cpu cortex-a57 \
-smp 1 \
-m 3G \
-device loader,addr=0x14680000,data=0xdeadbeef,data-len=0x4\
-machine gic-version=3 \
-machine secure=true \
-machine virtualization=true \
-nographic \
-S -s
I then open gdb, and do:
target remote :1234
x/x 0x14680000
The result is not 0xdeadbeef, as I had expected, but 0xffffffff.
Why is this happening? I cant find much documentation on the loader device in qemu, and have mostly just been following:
https://qemu-project.gitlab.io/qemu/system/generic-loader.html
I am trying to emulate ARM64 Linux on qemu. The following command works:
qemu-system-aarch64 -M virt-6.2 -cpu cortex-a53 -m 1G -smp 4\
-kernel Image.gz \
-append 'earlycon=pl011,0x9000000 console=ttyAMA0 root=/dev/vda rw' \
-drive file=base.img,format=raw,if=virtio \
-nographic
However, the block device type is virtio. To make it work, the virtio driver should be added to the kernel, which I don't want.
After some googling, I tried following command:
qemu-system-aarch64 -M virt-6.2 -cpu cortex-a53 -m 1G -smp 4\
-kernel Image.gz \
-append 'earlycon=pl011,0x9000000 console=ttyAMA0 root=/dev/vda rw' \
-drive file=base.img,format=raw,if=virtio \
-device sdhci-pci -device sd-card,drive=mydrive -drive id=mydrive,if=none,format=raw,file=base2.img \
-nographic
I was expecting an extra sd-card device, but it does not work. The command lsblk shows nothing new, nor can I find anything new under /dev.
So, how can I emulate a block device in qemu without adding new driver to the kernel?
I am following this guide https://powersj.io/posts/ubuntu-qemu-cli/ but i seem to get stuck in the login prompt at when i run
qemu-system-x86_64 \
-machine accel=kvm,type=q35 \
-cpu host \
-m 2G \
-nographic \
-device virtio-net-pci,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::2222-:22 \
-drive if=virtio,format=qcow2,file=focal-server-cloudimg-amd64.img \
-drive if=virtio,format=raw,file=seed.img
I dont know what the user and password would be. I also am unable to exit this screen so I have to open another terminal and kill it.
Do I need to leave an `&` to leave it running in background?
I have just found out that if you run QEMU with -monitor telnet::45454,server,nowait -nographic, then Ctrl-C kills the QEMU VM instead of generating SIGINT on the guest: How to pass Ctrl-C to the guest when running qemu with -nographic? | Unix & Linux Stack Exchange
However, I don't want to remove -monitor because it is convenient to automate monitor commands, e.g. it allows me to create a helper script that does:
echo 'savevm my_snap_id' | telnet localhost 45454
Is there a way to both keep my Ctrl-C and -monitor working with -nographic?
Full QEMU command:
qemu-system-x86_64 -append 'root=/dev/vda console=ttyS0' -kernel 'bzImage' -drive file='rootfs.ext2.qcow2,if=virtio,format=qcow2' -nographic -monitor telnet::45454,server,nowait
On QEMU 2.10.1, Ubuntu 17.10, full QEMU command:
./x86_64-softmmu/qemu-system-x86_64 \
-append "root=/dev/sda console=ttyS0 nokaslr printk.time=y" \
-drive file="${dir}/out/x86_64/buildroot/images/rootfs.ext2.qcow2,format=qcow2" \
-kernel "${dir}/out/x86_64/buildroot/images/bzImage" \
-nographic \
If I add:
-chardev stdio,id=s1,signal=off \
-serial none -device isa-serial,chardev=s1
then Ctrl+C starts working as desired, but Ctrl+A X does not work to quit QEMU, which is annoying sometimes: I can use telnet to quit, but it requires more typing / automation.
http://lists.nongnu.org/archive/html/qemu-discuss/2018-04/msg00006.html
Add -serial mon:stdio and remove other -serial options
The following satisfies all my requirements:
./x86_64-softmmu/qemu-system-x86_64 \
-append 'root=/dev/vda nopat nokaslr norandmaps printk.devkmsg=on printk.time=y console=ttyS0' \
-drive file="${dir}/out/x86_64/buildroot/images/rootfs.ext2.qcow2,if=virtio,format=qcow2" \
-kernel "${dir}/out/x86_64/buildroot/images/bzImage" \
-nographic \
-monitor telnet::45454,server,nowait \
-serial mon:stdio
Or for aarch64:
./aarch64-softmmu/qemu-system-aarch64 \
-M virt \
-append 'root=/dev/vda nokaslr norandmaps printk.devkmsg=on printk.time=y' \
-cpu cortex-a57 \
-drive file="${dir}/out/aarch64/buildroot/images/rootfs.ext2.qcow2,if=virtio,format=qcow2" \
-kernel "${dir}/out/aarch64/buildroot/images/Image" \
-monitor telnet::45454,server,nowait \
-nographic \
-serial mon:stdio \
Tested on QEMU 9d2a09063922757ec3640d93f6b35921ab95b1c2
(post v2.12.0-rc2).