From: Jack Lange Date: Sat, 28 Feb 2009 06:04:32 +0000 (-0600) Subject: wrote up through the "running" section X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=commitdiff_plain;h=23f6cada28f48c1925a468ff727dfcbcfeff9aef wrote up through the "running" section --- diff --git a/manual/manual.tex b/manual/manual.tex index b48a111..d7a30d7 100755 --- a/manual/manual.tex +++ b/manual/manual.tex @@ -136,6 +136,9 @@ You can then clone Kitten from the local mirror: hg clone /home/palacios/kitten \end{verbatim} +Both the Kitten and Palacios clone commands should be run from the +same direcotyr. This means that both repositories should be located at +the same directory level. The Kitten build process depends on this. {\em Important:} Like Palacios, Kitten is very actively developed so source tree is frequently changing. In order to keep up to date with @@ -144,46 +147,145 @@ changes from the mirror repository by running \verb.hg pull. followed by \verb.hg update.. \section{Compiling Palacios} -cd palacios/build/ +Palacios is capable of targeting 32 and 64 bit operating systems, and +includes a build process that supports both these +architectures. Furthermore, Palacios has multiple build locations, +with multiple makefiles: a top level build directory and a Palacios +specific build directory. The Palacios build process first generates a +static library that includes the Palacios VMM. This static library is +then linked into a host operating system. Palacios internally supports +GeekOS and can generate a complete OS image via a unified build +process. To combine Palacios with Kitten, it is necessary to first +compile Palacios and then to compile Kitten externally link it with +Palacios. The output of the compilation process is a bit more complex +and generates multiple binaries, and the specifics can be found in the +Makefiles. + +The top level build directory provides a number of high level make +targets, and is located in {\em palacios/build/}. It supports building +32 and 64 bit versions of the Palacios library independently as well +as building an integrated version of GeekOS. The basic targets are: +\begin{itemize} +\item \verb.make palacios-full32. -- Generates a 32 bit version of the Palacios static library +\item \verb.make palacios-full64. -- Generates a 64 bit version of the +Palacios static library +\item \verb.make geekos. -- Compiles the GeekOS kernel, and link it with the +Palacios static library +\item \verb.make geekos-iso. -- Generate an ISO boot disk image from the +GeekOS kernel that has been compiled +\end{itemize} + +The second build directory is located at {\em palacios/palacios/build} +and handles only the Palacios compilation process. It supports a +differnt set of targets and arguments: +\begin{itemize} +\item \verb.make ARCH=32. -- iteratively compiles a 32 bit version of Palacios +\item \verb.make ARCH=64. -- iteratively compiles a 64 bit version of +Palacios +\item \verb.make ARCH=32 world. -- fully recompiles a 32 bit version of +Palacios +\item \verb.make ARCH=64 world. -- fully recompiles a 64 bit version of +Palacios +\end{itemize} + +Both build levels support compilation directives that control the +debugging messages that are generated by Palacios. These are specified +by appending a \verb.DEBUG_=1. to the end of the +\verb.make. command. The components that are currently supported are: +\begin{itemize} +\item \verb.DEBUG_ALL=1. -- enables debugging for all the VMM components +({\em Warning:} this generates a {\em lot} of debug information. +\item \verb.DEBUG_SHADOW_PAGING=1. +\item \verb.DEBUG_CTRL_REGS=1. +\item \verb.DEBUG_INTERRUPTS=1. +\item \verb.DEBUG_IO=1. +\item \verb.DEBUG_KEYBOARD=1. +\item \verb.DEBUG_PIC=1. +\item \verb.DEBUG_PIT=1. +\item \verb.DEBUG_NVRAM=1. +\item \verb.DEBUG_GENERIC=1. +\item \verb.DEBUG_EMULATOR=1. +\item \verb.DEBUG_RAMDISK=1. +\item \verb.DEBUG_XED=1. +\item \verb.DEBUG_HALT=1. +\item \verb.DEBUG_DEV_MGR=1. +\item \verb.DEBUG_APIC=1. +\end{itemize} -This will build Palacios as a library, libv3vee.a in the palacios/palacios/build/. \section{Compiling Kitten} +Kitten requires a 64 bit version of Palacios, so make sure that +Palacios has been correctly compiled before compiling Kitten. + \subsection{Configuration} -Kitten building can be configured by either text or graph configure interface, which is similar to the Linux kernel configure, By one of the following commands: +Kitten borrows a lot of concepts from Linux, including the Linux build +process. As such it must be configured before it is actually compiled. +The Kitten configuration process is the same as Linux, and can be +accessed via any of these make targets. +\begin{itemize} +\item \verb.make xconfig. +\item \verb.make config. +\item \verb.make menuconfig. +\end{itemize} -make xconfig -make config -make menuconfig +There are some specific configuration options that should be disabled +to work with Palacios. Because Palacios is configured by default to +provide a guest with direct access to the VGA console, the {\em VGA +console} device driver should be disbabled in the Kitten +configuration. Similarly the {\em VM console} driver should be +disabled as well. -Make sure turn on the network device driver, networking, and input kernel command 'console=serial net=rtl8139' -\subsection{Compilation} +Furthermore, because the VGA console is not being used the {\em Kernel +Command Line Arguments} must be modified to remove the {\em VGA} +device from the console list. + +The guest OS that is booted as a VM is included as an ISO image in raw +binary format inside Kitten's {\em init\_task}. To change the guest +ISO, you must change the makefile for the init\_task. This is located +in {\em user/hello\_world/Makefile} and the syntax is well commented. +On {\em newskysaw} a collection of guest ISO images are located in +{\em /opt/vmm-tools/isos/}. -Build Palacios as a module for Kitten -In the first time, make sure to build Kitten before you building the Palacios as the module to kitten. -Palacios now is built as a module of the Kitten. You can find the palacios.c and palacios.h in the kitten/palacios/. Enter the directory, build the palacios module. -cd kitten/palacios +\subsection{Compilation} +After Kitten has been configured the compilation can be done. The +general process is to compile a reference build of Kitten, followed by +compiling Palacios support as a kernel module, and then doing a new +full recompilation of Kitten. + +The specific compilation steps are run from the top level Kitten directory: +\begin{verbatim} +make +cd palacios make -C .. M=`pwd` cp built-in.o ../modules/palacios-mod.o -Build Kitten -Go back to kitten root directory, and build the Kitten again. +cd .. +make +make isoimage +\end{verbatim} + +This generates an ISO boot image containing Kitten, Palacios, and the +guest that will be run as a VM. The ISO image is located at {\em +./arch/x86\_64/boot/image.iso}. -make isoimage \section{Running Palacios/Kitten} -Run the whole stuff built above in Qemu using following command: +Kitten and Palacios are capable of running under Qemu, which makes +debugging much simpler. +The basic form of the command to start the Qemu emulator is: \begin{verbatim} -/usr/local/qemu/bin/qemu-system-x86_64 -smp 1 -m 1024 - -serial file:./serial.out - -cdrom ./arch/x86_64/boot/image.iso - -net tap, ifname=tap0 - < /dev/null +/usr/local/qemu/bin/qemu-system-x86_64 -smp 1 -m 1024 \ + -serial file:./serial.out \ + -cdrom ./arch/x86_64/boot/image.iso \ + < /dev/null \end{verbatim} - +The command starts up a single processor emulated machine, with 1gig +of RAM and a cdrom drive loaded with the Kitten ISO image. Furthermore +all output to the serial port is written directly to a file called +{\em serial.out}. This command can be copied into a shell script for easy access. \section{Development Guidelines} @@ -216,6 +318,11 @@ Bridging tapX with eth1 will only work (work = send packet and also make packet \subsection{Configuring Kitten} +To enable networking in Qemu, networking needs to be enabled in the configuration. + +Make sure turn on the network device driver, networking, and input +kernel command 'console=serial net=rtl8139' + How to set ip address in kitten: Kitten ip address setting is in file drivers/net/ne2k/rtl8139.c, in the code below which is located in function rtl8139\_init.