wiki:Linux/KvmQemuSerialMonitor

KVM / QEMU Serial and Monitor options

When testing new kernels and distributions it is handy to start them in a virtual machine to check for generic problems. I use kvm/qemu for this.

When starting kvm it I want the monitor to be in the terminal where it starts, and the kernel's console output available via the virtual machine's serial port.

First, in a separate terminal window start a TCP socket listener on port 9999 that also writes output to a log file (for later review):

nc -l -p 9999 | tee boot.log

Switch to the terminal window where kvm will be started and add these options to the command line:

-monitor stdio -serial tcp:127.0.0.1:9999

If booting from a live-CD ISO image-file, set up the loop device:

sudo losetup /dev/loop0 /home/all/Downloads/jaunty-desktop-amd64.0203.1.iso

Add the options to mount the device as a cdrom and boot from it:

-boot d -cdrom /dev/loop0

The complete command-line might look similar to this:

kvm -name Ubuntu-Jaunty-Desktop -serial tcp:127.0.0.1:9999 -monitor stdio \
 -m 768  -hda ubuntu-jaunty-desktop.qcow2 -boot d -cdrom /dev/loop0 \
 -usb -k en-gb  \
 -net nic,model=rtl8139,macaddr=56:44:45:30:31:32,vlan=0 -net vde,sock=/var/run/kvm0.ctl,vlan=0

(assumes there is a network vdeswitch interface (kvm0) configured that the VM guest will connect to)

When the system boots the kernel command line needs the following additional options:

debug console=tty0 console=ttyS0,115200n8

When starting from a live-CD these can be added via the 'F6' key "Other Options". If starting an installed system with GRUB, enter the GRUB menu and use the manual edit options (press E) to modify the kernel line, then press B to boot with the modifications.

The kernel output will appear in the terminal where nc is running and be saved to the log-file.