AVATT

This page is about the "All Virtual All The Time" GSoC 2008 project.
This project aims to create a modified Linux-As-Bootloader coreboot payload that contains a Linux kernel modified to include KVM support, uClibc, a custom busybox image, and whatever is needed to get KVM-qemu up and running in the ROM image.

Needed tools

In order for it to work, you need to have installed the prerequisites of buildrom.

You need a x86 Linux environment/distribution, since currently the build fails under x86-64. This will get fixed in the future.

How to build

Just type

make

from within the buildrom directory and everything should get built.

(Optional step) If you wish to make some adjustments you may do it by running one of these commands, but normally you shouldn't need to do this:

make menuconfig (for buildrom)
make kernel-config
make uclibc-config
make busybox-config

How to run

You should read the QEMU Build Tutorial and the QEMU pages to see how to run a BIOS image with qemu, but since this howto aims to be as short as possible, here you have all you need to get it running ASAP:

It's quite handy to have a symlink to "deploy/emulation-qemu-x86.rom" in your $HOME with the name bios.bin, and in the same directory you should have the Cirrus VGA BIOS ROM image.
Here you have cut/paste commands for this scenario:

Then you must run qemu in 64bit mode so that we can get support for the SVM instructions:

qemu-system-x86_64 -L ~ -hda /dev/null -m 768 -serial stdio

Notes:

The -m 768 parameter is mandatory, since otherwise the kernel will panic because I hardcoded the RAM size to 768M in coreboot. It was 128M before, and that proved to be too small. Sorry for those who have few MBs of RAM.

The -serial parameter is good for those who have keyboard issues with the default SDL output of qemu, like arrow keys not working, etc. This way you can also use the terminal you used to launch qemu as a second console and here all the keys should work fine.

What's inside the 2MB BIOS ROM image?

Linux kernel version 2.6.22.2 with tiny patches and a custom config

uClibc 0.9.28.3 with some patches applied (aio, fenv, long double math) and a custom config - only the .so files is included

zlib 1.2.3 - only the .so file included

ncurses 5.6 - the .so file and some other small necessary files are included

kvm-72 with some small patches - the extra BIOSes, the nbd tool and the docs are missing

busybox 1.1.3 with a custom config - NEEDS UPDATE

Current status

everything compiles fine on x86 but fails on x86-64. I have tested it on Ubuntu 8.04, Debian Lenny and Gentoo current, all on x86.

kvm crashes due to Thread Local Store(TLS) issues in uClibc.

TODO

make the kvm userspace tool not to crash anymore. Possible solutions:

fix the TLS issues from the version of uClibc we currently use

migrate to another version of uClibc which hopefully has a fixed implementation of TLS. This would imply removing the long double math function calls from kvm or maybe even porting the uClibc-nptl branch to x86 if the linuxthreads branch proves to be too broken for us.

user-friendly tool that can create and run virtual machines.

automatically starting the virtual machines at boot.

get the network to work in qemu since it fails with both coreboot v2 and v3.

integrate the virt-manager daemon inside the ROM image, if it and its dependencies fit the remaining free space. This needs network support to be really useful.

fix compilation on x86_64 boxes by compiling everything in 64bit mode. We need a 64bit hardware anyway since the SVM instructions are available only on recent 64 bit boxes so this shouldn't matter too much, except for the some extra wasted ROM space caused by 64bit code.

keep the versions as up-to-date as possible but also compatible with each other

Contact

If you find anything incomplete or wrong about this page please don't hesitate to fix it. If you can't, please drop me an email at cristi.magherusan NO@SPAM net.utcluj.ro and I'll do it myself.