I am currently setting up a Linux laptop to contain some FreeBSD images, instead of going with the trusted VMWare or VirtualBox I decided I would use the built-in KVM virtualisation technology. Besides a few hiccups it is fast and so far has not failed.
I used virt-manager, a graphical tool, to set up everything, including creating the virtual machine, I didn't want to have to deal with XML configuration files and whatnot. After installing FreeBSD there are a few changes I made to get a virtual console working, this allows virsh console <domain> to function as expected.
First we add a new file to the root file system (which should be the first slice on the drive):
echo "-Dh" > /boot.config
See man 5 boot.config for more information. Basically -D says that FreeBSD should boot with a dual console configuration (built-in over VGA) and serial console, and -h says to force the serial console to on.
If you were to reboot now and use the virsh command:
virsh console FreeBSD
you would see the system go through the boot process and show output starting from when the boot block gains control, at this point however you still have no way to login to this new console since we never specified that we wanted any ttys on the serial console, for that we need to edit /etc/ttys.
We are looking for the ttyu0 entry, we want to make sure to change dialup to vt100, and off to on, so that it should look like this:
ttyu0 "/usr/libexec/getty std.9600" vt100 on secure
Now when we reboot once more we will get the usual login display that we have come to expect of console on FreeBSD, and we can login over the serial console. This way we don't have to open up the virtual machine manager to get a console, and can continue to do almost everything from a terminal window.