| Native Linux KVM tool |
| ===================== |
| |
| kvmtool is a lightweight tool for hosting KVM guests. As a pure virtualization |
| tool it only supports guests using the same architecture, though it supports |
| running 32-bit guests on those 64-bit architectures that allow this. |
| |
| From the original announcement email: |
| ------------------------------------------------------- |
| The goal of this tool is to provide a clean, from-scratch, lightweight |
| KVM host tool implementation that can boot Linux guest images (just a |
| hobby, won't be big and professional like QEMU) with no BIOS |
| dependencies and with only the minimal amount of legacy device |
| emulation. |
| |
| It's great as a learning tool if you want to get your feet wet in |
| virtualization land: it's only 5 KLOC of clean C code that can already |
| boot a guest Linux image. |
| |
| Right now it can boot a Linux image and provide you output via a serial |
| console, over the host terminal, i.e. you can use it to boot a guest |
| Linux image in a terminal or over ssh and log into the guest without |
| much guest or host side setup work needed. |
| -------------------------- |
| |
| This is the stand-alone version which does not live inside a Linux |
| kernel tree. |
| 1. To check it out, clone the main git repository: |
| |
| git clone git://git.kernel.org/pub/scm/linux/kernel/git/will/kvmtool.git |
| |
| 2. Compile the tool (for more elaborate instructions see INSTALL): |
| |
| cd kvmtool && make |
| |
| 3. Download a raw userspace image: |
| |
| wget http://wiki.qemu.org/download/linux-0.2.img.bz2 && bunzip2 |
| linux-0.2.img.bz2 |
| |
| 4. The guest kernel has to be built with the following configuration: |
| |
| - For the default console output: |
| CONFIG_SERIAL_8250=y |
| CONFIG_SERIAL_8250_CONSOLE=y |
| |
| - For running 32bit images on 64bit hosts: |
| CONFIG_IA32_EMULATION=y |
| |
| - Proper FS options according to image FS (e.g. CONFIG_EXT2_FS, CONFIG_EXT4_FS). |
| |
| - For all virtio devices listed below: |
| CONFIG_VIRTIO=y |
| CONFIG_VIRTIO_RING=y |
| CONFIG_VIRTIO_PCI=y |
| |
| - For virtio-blk devices (--disk, -d): |
| CONFIG_VIRTIO_BLK=y |
| |
| - For virtio-net devices ([--network, -n] virtio): |
| CONFIG_VIRTIO_NET=y |
| |
| - For virtio-9p devices (--virtio-9p): |
| CONFIG_NET_9P=y |
| CONFIG_NET_9P_VIRTIO=y |
| CONFIG_9P_FS=y |
| |
| - For virtio-balloon device (--balloon): |
| CONFIG_VIRTIO_BALLOON=y |
| |
| - For virtio-console device (--console virtio): |
| CONFIG_VIRTIO_CONSOLE=y |
| |
| - For virtio-rng device (--rng): |
| CONFIG_HW_RANDOM_VIRTIO=y |
| |
| - For vesa device (--sdl or --vnc): |
| CONFIG_FB_VESA=y |
| |
| |
| 5. And finally, launch the hypervisor: |
| |
| ./lkvm run --disk linux-0.2.img \ |
| --kernel ../../arch/x86/boot/bzImage \ |
| or |
| |
| sudo ./lkvm run --disk linux-0.2.img \ |
| --kernel ../../arch/x86/boot/bzImage \ |
| --network virtio |
| |
| The tool has been written by Pekka Enberg, Cyrill Gorcunov, Asias He, |
| Sasha Levin and Prasad Joshi. Special thanks to Avi Kivity for his help |
| on KVM internals and Ingo Molnar for all-around support and encouragement! |
| |
| See the following thread for original discussion for motivation of this |
| project: |
| |
| http://thread.gmane.org/gmane.linux.kernel/962051/focus=962620 |
| |
| Another detailed example can be found in the lwn.net article: |
| |
| http://lwn.net/Articles/658511/ |
| |
| Contributing |
| ------------ |
| |
| Please send patches for kvmtool to kvm@vger.kernel.org, in the usual git |
| patch format, including "kvmtool" in the mail subject. "kvmtool" can be |
| added automatically by issuing the command |
| |
| git config format.subjectprefix "PATCH kvmtool" |
| |
| in the git repository. |