forked from openSUSE/kernel
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
lguest: documentation I: Preparation
The netfilter code had very good documentation: the Netfilter Hacking HOWTO. Noone ever read it. So this time I'm trying something different, using a bit of Knuthiness. Signed-off-by: Rusty Russell <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
- Loading branch information
1 parent
dfb6868
commit f938d2c
Showing
14 changed files
with
218 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
#! /bin/sh | ||
|
||
set -e | ||
|
||
PREFIX=$1 | ||
shift | ||
|
||
trap 'rm -r $TMPDIR' 0 | ||
TMPDIR=`mktemp -d` | ||
|
||
exec 3>/dev/null | ||
for f; do | ||
while IFS=" | ||
" read -r LINE; do | ||
case "$LINE" in | ||
*$PREFIX:[0-9]*:\**) | ||
NUM=`echo "$LINE" | sed "s/.*$PREFIX:\([0-9]*\).*/\1/"` | ||
if [ -f $TMPDIR/$NUM ]; then | ||
echo "$TMPDIR/$NUM already exits prior to $f" | ||
exit 1 | ||
fi | ||
exec 3>>$TMPDIR/$NUM | ||
echo $f | sed 's,\.\./,,g' > $TMPDIR/.$NUM | ||
/bin/echo "$LINE" | sed -e "s/$PREFIX:[0-9]*//" -e "s/:\*/*/" >&3 | ||
;; | ||
*$PREFIX:[0-9]*) | ||
NUM=`echo "$LINE" | sed "s/.*$PREFIX:\([0-9]*\).*/\1/"` | ||
if [ -f $TMPDIR/$NUM ]; then | ||
echo "$TMPDIR/$NUM already exits prior to $f" | ||
exit 1 | ||
fi | ||
exec 3>>$TMPDIR/$NUM | ||
echo $f | sed 's,\.\./,,g' > $TMPDIR/.$NUM | ||
/bin/echo "$LINE" | sed "s/$PREFIX:[0-9]*//" >&3 | ||
;; | ||
*:\**) | ||
/bin/echo "$LINE" | sed -e "s/:\*/*/" -e "s,/\*\*/,," >&3 | ||
echo >&3 | ||
exec 3>/dev/null | ||
;; | ||
*) | ||
/bin/echo "$LINE" >&3 | ||
;; | ||
esac | ||
done < $f | ||
echo >&3 | ||
exec 3>/dev/null | ||
done | ||
|
||
LASTFILE="" | ||
for f in $TMPDIR/*; do | ||
if [ "$LASTFILE" != $(cat $TMPDIR/.$(basename $f) ) ]; then | ||
LASTFILE=$(cat $TMPDIR/.$(basename $f) ) | ||
echo "[ $LASTFILE ]" | ||
fi | ||
cat $f | ||
done | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
Welcome, friend reader, to lguest. | ||
|
||
Lguest is an adventure, with you, the reader, as Hero. I can't think of many | ||
5000-line projects which offer both such capability and glimpses of future | ||
potential; it is an exciting time to be delving into the source! | ||
|
||
But be warned; this is an arduous journey of several hours or more! And as we | ||
know, all true Heroes are driven by a Noble Goal. Thus I offer a Beer (or | ||
equivalent) to anyone I meet who has completed this documentation. | ||
|
||
So get comfortable and keep your wits about you (both quick and humorous). | ||
Along your way to the Noble Goal, you will also gain masterly insight into | ||
lguest, and hypervisors and x86 virtualization in general. | ||
|
||
Our Quest is in seven parts: (best read with C highlighting turned on) | ||
|
||
I) Preparation | ||
- In which our potential hero is flown quickly over the landscape for a | ||
taste of its scope. Suitable for the armchair coders and other such | ||
persons of faint constitution. | ||
|
||
II) Guest | ||
- Where we encounter the first tantalising wisps of code, and come to | ||
understand the details of the life of a Guest kernel. | ||
|
||
III) Drivers | ||
- Whereby the Guest finds its voice and become useful, and our | ||
understanding of the Guest is completed. | ||
|
||
IV) Launcher | ||
- Where we trace back to the creation of the Guest, and thus begin our | ||
understanding of the Host. | ||
|
||
V) Host | ||
- Where we master the Host code, through a long and tortuous journey. | ||
Indeed, it is here that our hero is tested in the Bit of Despair. | ||
|
||
VI) Switcher | ||
- Where our understanding of the intertwined nature of Guests and Hosts | ||
is completed. | ||
|
||
VII) Mastery | ||
- Where our fully fledged hero grapples with the Great Question: | ||
"What next?" | ||
|
||
make Preparation! | ||
Rusty Russell. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,32 @@ | ||
/* | ||
* Lguest specific paravirt-ops implementation | ||
/*P:010 | ||
* A hypervisor allows multiple Operating Systems to run on a single machine. | ||
* To quote David Wheeler: "Any problem in computer science can be solved with | ||
* another layer of indirection." | ||
* | ||
* We keep things simple in two ways. First, we start with a normal Linux | ||
* kernel and insert a module (lg.ko) which allows us to run other Linux | ||
* kernels the same way we'd run processes. We call the first kernel the Host, | ||
* and the others the Guests. The program which sets up and configures Guests | ||
* (such as the example in Documentation/lguest/lguest.c) is called the | ||
* Launcher. | ||
* | ||
* Secondly, we only run specially modified Guests, not normal kernels. When | ||
* you set CONFIG_LGUEST to 'y' or 'm', this automatically sets | ||
* CONFIG_LGUEST_GUEST=y, which compiles this file into the kernel so it knows | ||
* how to be a Guest. This means that you can use the same kernel you boot | ||
* normally (ie. as a Host) as a Guest. | ||
* | ||
* These Guests know that they cannot do privileged operations, such as disable | ||
* interrupts, and that they have to ask the Host to do such things explicitly. | ||
* This file consists of all the replacements for such low-level native | ||
* hardware operations: these special Guest versions call the Host. | ||
* | ||
* So how does the kernel know it's a Guest? The Guest starts at a special | ||
* entry point marked with a magic string, which sets up a few things then | ||
* calls here. We replace the native functions in "struct paravirt_ops" | ||
* with our Guest versions, then boot like normal. :*/ | ||
|
||
/* | ||
* Copyright (C) 2006, Rusty Russell <[email protected]> IBM Corporation. | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters