Free Web Space | BlueHost Review  



Qemu (KVM) and Vista.


I wrote this article nearly a year ago, but never got around to finishing it. I have added the driver ISO, but otherwise it is little changed. I used the Kernel Virtual Machine (KVM) rather than QEMU itself, but what works for KVM, will usually work for QEMU, as KVM has QEMU as its foundation. If time permits, I will add a section on which CPUs are KVM capable and how to compile the latest version of KVM. Until then, I will point you to:

http://kvm.qumranet.com/kvmwiki and
http://fabrice.bellard.free.fr/qemu/

Copy your Vista installation disk to an iso image with:

 dd if=/dev/cdrom of=vista.iso

Create a raw image with:

 /usr/local/kvm/bin/qemu-img create -f raw vista.img 10G

The reason for using the raw format is that you can use ntfs-3g to mount the image. This makes copying files into the image a breeze. However, do not boot the image when it is mounted, or mount it when booted, as this will probably fry it.

You need one of the following kvm kernel modules:

 /sbin/modprobe kvm-amd
 /sbin/modprobe kvm-intel

Vista does not produce valid boot sector information, so partition and format the image, vista.img, with XP or Linux. For example, use:

 qemu-system-x86_64 -boot d -m 512 vista.img -cdrom xp.iso

to format the image using an XP install disk (xp.iso). Stop after the partition is formated (with NTFS).

KVM doesn't make a distinction between i386 and x86_64 so, even in i386, you should use qemu-system-x86_64. If your system cannot find qemu-system-x86_64, you might need to use the full path:

/usr/local/kvm/bin/qemu-system-x86_64.

Now install Vista with:

 qemu-system-x86_64 -boot d -m 512 vista.img -cdrom vista.iso

The installation runs much faster from the iso image, but, you can also install from the CD with:

 qemu-system-x86_64 -boot d -m 512 vista.img -cdrom /dev/cdrom

Now mount vista.img and copy the drivers into the image:

 mount -t ntfs-3g -o loop,offset=$((63*512)) vista.img /1
 mkdir /1/drivers; cp -r ES1370 RTL8029 /1/drivers

$((63*512)) = 32256, 63 sectors of 512 bytes. Or, use the tiny iso image, drivers.iso:

 bunzip2 drivers.iso.bz2
 qemu-system-x86_64 -m 512 -soundhw es1370 -usb -usbdevice tablet vista.img -cdrom drivers.iso

The option -soundhw es1370 has qemu emulate an Ensoniq AudioPCI ES1370 sound card.

The default network hardware -net nic,model=ne2k_pci is a Realtek 8029 PCI Ethernet Card.

Drivers for both, are on drivers.iso. Install them by right-clicking on the .inf files and choosing install from the menu.

The complete default network option is -net nic,model=ne2k_pci -net user. The -net user option sets up a SLIRP connection (since it is modeled on the earlier SLIRP connections). It allows you to get on the internet and is naturally fire-walled. It is not a true network connection, e.g., ping does not work.

Qemu can also emulate a Realtek 8139 Ethernet Card, which Vista does have a driver for, however, this does not recognize the SLIRP connection, the DHCP server, or the tap devices (so is essentially useless to you).

To use the Realtek 8139 card use the option -net nic,model=rtl8139.

Kvmwiki claims that rtl8139 now works with recent versions of KVM. You apparently need, the 0.9.0-cvs version of QEMU (check, e.g., kvm-58/qemu/VERSION). If you are still using QEMU 0.9.0, then you will need the rtl8029 driver. It should be noted, that the rtl8139 driver, always "worked", you just couldn't connect to the internet, or do anything useful, with it.

Now run Vista with the command:

 qemu-system-x86_64 -m 512 -localtime -soundhw es1370 -usb -usbdevice tablet vista.img

The -usb -usbdevice tablet option allows your mouse to escape from Vista to Linux by just moving outside the Vista window (without this, you have to press Ctrl-Alt to escape the mouse).

The -m 512 option allocates 512 MB of RAM to KVM.

Using the -no-acpi option can result in much faster installation and performance.