QEMU Upstream

From Xen
Revision as of 11:34, 1 March 2013 by Fantu (talk | contribs) (SPICE / QXL)

How to build QEMU with Xen

Nowadays, xen-unstable will clone and build a qemu git tree from xenbits. (It is qemu-stable-1.0 today). But you can follow this guide to build the upstream unstable qemu git tree.

You can add this to your "xen-unstable.git/.config" file, so xen-unstable will clone and build the upstream tree.

 QEMU_UPSTREAM_URL = git://git.qemu.org/qemu.git

Then, add "device_model_version = 'qemu-xen'" in your vm config file to use this new qemu.

Or build qemu out of the xen-unstable dir:

Get the source

Build it!

  • Build Xen
    • make xen tools, if it fail see bellow.
  • Build QEMU upstream with Xen
    • ./configure --enable-xen --target-list=i386-softmmu --extra-cflags="-I$path_to_xen_source/tools/include -I$path_to_xen_source/tools/libxc -I$path_to_xen_source/tools/xenstore" --extra-ldflags="-L$path_to_xen_source/tools/libxc -L$path_to_xen_source/tools/xenstore"
    • make

Troubleshooting compilation errors: If you get an error from configure like "ERROR: User requested feature xen ERROR: configure was not able to find it" then see this: http://xen.1045712.n5.nabble.com/Upstream-Qemu-With-Xen-configuration-problem-td4561779.html , ie. you need to point the paths for "configure" to xen source directory, not to xen dist directory.

Run it!


  • With the latest xen-unstable tree, use:
    • device_model_version = 'qemu-xen'
    • device_model_override = '/root/work/qemu/_build/i386-softmmu/qemu-system-i386'

Now xl will always try run qemu upstream with seabios, so build xen with seabios.

Use with SeaBIOS

SeaBIOS support is now fully integrated into the Xen build system (in xen-unstable and xen-4.2 onwards) and is always used when using device_model_version = "qemu-xen".

If you want to build a version of SeaBIOS other than the default then you can override SEABIOS_UPSTREAM_URL and/or SEABIOS_UPSTREAM_TAG via .config. For reference the upstream SeaBIOS repository is [[1]].

New features


It's the PV drivers from KVM world. To use it for network, just use 'virtio-net' as a model:

 vif = [ 'model=virtio-net' ]

You will need those kernel modules to use a VirtIO device

 virtio_mmio virtio_pci virtio_net


SPICE is an other remote-display protocol and QXL is a PV framebuffer which use the best of the SPICE capability. To activate SPICE you can add this in the VM config file (this works only with xl).


If you which to use QXL as well you'll have to add:

 device_model_args_hvm = [ '-vga', 'qxl' ]
 videoram = 128

On recent xen-unstable qxl support is included in libxl, you need to add only vga="qxl".

Actually QXL under xen works only as standard vga, for full qxl working other changes/fixes are probably needed on hvmloader.

Difference with qemu-xen-traditional

Missing feature from the good old qemu-dm

Currently, there is few missing feature that not supported by QEMU upstream, but the work is ongoing.

  • dirty log: This is needed to migrate a guest. Patches have been posted to both QEMU and libxl, but are not applied yet.
  • VGA passthrough: Sometime (all the time?), simple PCI passthrough does not works for graphics card. The few things that are done in qemu-dm are not yet upstreamed.

New feature from QEMU upstream

There is some benefice of upstreaming the support of Xen to QEMU, we can now use:

  • VirtIO, as an alternative to Xen PV drivers
  • SPICE, for a remote-display instead of the old VNC.
  • different kind of file format for a disc.
  • the ability to connect several time to the VNC server.
  • ...