Qemu Compilation From CVS


I would highly recommend that anyone wishing to compile QEMU from CVS should first look at the Qemu Compilation page. Specifically it would be wise to ensure their environment is setup correctly to enable them to compile QEMU from the latest stable version on the author’s home page before attempting this.

That said, there’s really very little difference between the procedure on this page and that on the Qemu Compilation page. It makes sense therefore for this page to only detail the differences rather than duplicate the entire compilation procedure as this would mean we have two pages to maintain every time QEMU changes!


As outlined on the Qemu Compilation page you will need the Linux kernel sources or headers and the necessary version of GCC to compile QEMU. You’ll also need various libraries that QEMU compiles against (SDL and the like). It’s all detailed over there on that page. Come back when you have those things sorted.

Obtaining the source

Getting the source from cvs presumes you have the cvs program installed. If you don’t then you should go do that now using whatever package management system your Linux distribution has. Once done you simply navigate to a directory where you like to do compiling and type the following command to obtain the source for QEMU.

cvs -z3 co qemu

You may also want the KQEMU kernel accelerator. This is now open source (it wasn’t previously). We need to go get it, so in the same place you typed the above command type this.

wget -c

Note: The above link is currently (6th February 2007) valid, this may change when the author updates the KQEMU package. If the above does not work, simply visit the author’s home page and follow the necessary links to download the KQEMU package to this directory.

Before compiling

Navigate into the qemu directory which is created by cvs

cd qemu

Unpack the KQEMU package.

tar zxvf ../kqemu-1.3.0pre10.tar.gz

Set the necessary environment variables (if required).

export CPP=g++-3.4  
export CC=gcc-3.4


Clean up any previous compiles

make clean

Run configure. Note: I keep my kernel source in a directory in my home under /src. You will need to change that

./configure --prefix=/usr/local --cc=gcc-3.4 --host-cc=gcc-3.4 --kernel-path=/home/alan/src/`uname -r`/

If all goes well, we compile.


That’s it!

Now you can go back to the Qemu Compilation page to find out how to package this all up with “checkinstall” (for example).

Alternatively you could install using the following command (which you might want to run with sudo or as root).

 make install

Running it!

Note: I just ran the above commands to prove they work, I also packaged up using checkinstall and then just typed qemu. Here’s the result. Looks good!

QEMU PC emulator version 0.8.1, Copyright (c) 2003-2005 Fabrice Bellard 
usage: qemu [options] [disk_image]  

'disk_image' is a raw hard image image for IDE hard disk 0  

Standard options: 
-M machine      select emulated machine (-M ? for list) 
-fda/-fdb file  use 'file' as floppy disk 0/1 image 
-hda/-hdb file  use 'file' as IDE hard disk 0/1 image 
-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image 
-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master) 
-boot [a|c|d]   boot on floppy (a), hard disk (c) or CD-ROM (d) 
-snapshot       write to temporary files instead of disk image files 
-m megs         set virtual RAM size to megs MB [default=128] 
-smp n          set the number of CPUs to 'n' [default=1] 
-nographic      disable graphical output and redirect serial I/Os to console 
-k language     use keyboard layout (for example "fr" for French) 
-audio-help     print list of audio drivers and their options 
-soundhw c1,... enable audio support 
                and only specified sound cards (comma separated list)        
                use -soundhw ? to get the list of supported cards
                use -soundhw all to enable all of them 
-localtime      set the real time clock to local time [default=utc] 
-full-screen    start in full screen 
-win2k-hack     use it when installing Windows 2000 to avoid a disk full bug 
-usb            enable the USB driver (will be the default soon) 
-usbdevice name add the host or guest USB device 'name'

Network options: 
-net nic[,vlan=n][,macaddr=addr][,model=type]
                create a new Network Interface Card and connect it to VLAN 'n'
-net user[,vlan=n][,hostname=host]
                connect the user mode network stack to VLAN 'n' and send
                hostname 'host' to DHCP clients 
-net tap[,vlan=n][,fd=h][,ifname=name][,script=file]
                connect the host TAP network interface to VLAN 'n' and use 
                the network script 'file' (default=/etc/qemu-ifup); 
                use 'fd=h' to connect to an already opened TAP interface 
-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port] 
                connect the vlan 'n' to another VLAN using a socket connection 
-net socket[,vlan=n][,fd=h][,mcast=maddr:port] 
                connect the vlan 'n' to multicast maddr and port 
-net none       use it alone to have zero network devices; if no -net option 
                is provided, the default is '-net nic -net user'
-tftp prefix    allow tftp access to files starting with prefix user 
-smb dir        allow SMB access to files in 'dir' user 
-redir [tcp|udp]:host-port:[guest-host]:guest-port
                redirect TCP or UDP connections from host to guest [[-net|user]]

Linux boot specific: 
-kernel bzImage use 'bzImage' as kernel image 
-append cmdline use 'cmdline' as kernel command line 
-initrd file    use 'file' as initial ram disk

Debug/Expert options: 
-monitor dev    redirect the monitor to char device 'dev' 
-serial dev     redirect the serial port to char device 'dev' 
-parallel dev   redirect the parallel port to char device 'dev' 
-pidfile file   Write PID to 'file' 
-S              freeze CPU at startup (use 'c' to start execution) 
-s              wait gdb connection to port 1234 
-p port         change gdb connection port 
-d item1,...    output log to /tmp/qemu.log (use -d ? for a list of log items) 
-hdachs c,h,s[,t] force hard disk 0 physical geometry and the optional BIOS
                translation (t=none or lba) (usually qemu can guess them) 
-L path         set the directory for the BIOS and VGA BIOS 
-kernel-kqemu   enable KQEMU full virtualization (default is user mode only) 
-no-kqemu       disable KQEMU kernel module usage 
-std-vga        simulate a standard VGA card with VESA Bochs Extensions 
                (default is CL-GD5446 PCI VGA) 
-no-acpi        disable ACPI 
-loadvm file    start right away with a saved state (loadvm in monitor) 
-vnc display    start a VNC server on display

During emulation, the following keys are useful: 
ctrl-alt-f      toggle full screen 
ctrl-alt-n      switch to virtual console 'n' 
ctrl-alt        toggle mouse and keyboard grab

When using -nographic, press 'ctrl-a h' to get some help.

The above should also give you some idea of the new command line options available.

See Also

Leave a Reply