mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 19:07:52 +00:00
lguest.txt update
o Describe the new split configurations o Highlight code documentation in drivers/lguest/README o Point out necessity of having a getty on /dev/hvc0 o Remove gratuitous "m" in example o Don't discuss I/O model here, stick to user documentation. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
141341cdae
commit
9653c4aff9
1 changed files with 28 additions and 38 deletions
|
@ -6,7 +6,7 @@ Lguest is designed to be a minimal hypervisor for the Linux kernel, for
|
||||||
Linux developers and users to experiment with virtualization with the
|
Linux developers and users to experiment with virtualization with the
|
||||||
minimum of complexity. Nonetheless, it should have sufficient
|
minimum of complexity. Nonetheless, it should have sufficient
|
||||||
features to make it useful for specific tasks, and, of course, you are
|
features to make it useful for specific tasks, and, of course, you are
|
||||||
encouraged to fork and enhance it.
|
encouraged to fork and enhance it (see drivers/lguest/README).
|
||||||
|
|
||||||
Features:
|
Features:
|
||||||
|
|
||||||
|
@ -23,19 +23,30 @@ Developer features:
|
||||||
|
|
||||||
Running Lguest:
|
Running Lguest:
|
||||||
|
|
||||||
- Lguest runs the same kernel as guest and host. You can configure
|
- The easiest way to run lguest is to use same kernel as guest and host.
|
||||||
them differently, but usually it's easiest not to.
|
You can configure them differently, but usually it's easiest not to.
|
||||||
|
|
||||||
You will need to configure your kernel with the following options:
|
You will need to configure your kernel with the following options:
|
||||||
|
|
||||||
CONFIG_HIGHMEM64G=n ("High Memory Support" "64GB")[1]
|
"General setup":
|
||||||
CONFIG_TUN=y/m ("Universal TUN/TAP device driver support")
|
"Prompt for development and/or incomplete code/drivers" = Y
|
||||||
CONFIG_EXPERIMENTAL=y ("Prompt for development and/or incomplete code/drivers")
|
(CONFIG_EXPERIMENTAL=y)
|
||||||
CONFIG_PARAVIRT=y ("Paravirtualization support (EXPERIMENTAL)")
|
|
||||||
CONFIG_LGUEST=y/m ("Linux hypervisor example code")
|
|
||||||
|
|
||||||
and I recommend:
|
"Processor type and features":
|
||||||
CONFIG_HZ=100 ("Timer frequency")[2]
|
"Paravirtualized guest support" = Y
|
||||||
|
"Lguest guest support" = Y
|
||||||
|
"High Memory Support" = off/4GB
|
||||||
|
"Alignment value to which kernel should be aligned" = 0x100000
|
||||||
|
(CONFIG_PARAVIRT=y, CONFIG_LGUEST_GUEST=y, CONFIG_HIGHMEM64G=n and
|
||||||
|
CONFIG_PHYSICAL_ALIGN=0x100000)
|
||||||
|
|
||||||
|
"Device Drivers":
|
||||||
|
"Network device support"
|
||||||
|
"Universal TUN/TAP device driver support" = M/Y
|
||||||
|
(CONFIG_TUN=m)
|
||||||
|
"Virtualization"
|
||||||
|
"Linux hypervisor example code" = M/Y
|
||||||
|
(CONFIG_LGUEST=m)
|
||||||
|
|
||||||
- A tool called "lguest" is available in this directory: type "make"
|
- A tool called "lguest" is available in this directory: type "make"
|
||||||
to build it. If you didn't build your kernel in-tree, use "make
|
to build it. If you didn't build your kernel in-tree, use "make
|
||||||
|
@ -51,14 +62,17 @@ Running Lguest:
|
||||||
dd if=/dev/zero of=rootfile bs=1M count=2048
|
dd if=/dev/zero of=rootfile bs=1M count=2048
|
||||||
qemu -cdrom image.iso -hda rootfile -net user -net nic -boot d
|
qemu -cdrom image.iso -hda rootfile -net user -net nic -boot d
|
||||||
|
|
||||||
|
Make sure that you install a getty on /dev/hvc0 if you want to log in on the
|
||||||
|
console!
|
||||||
|
|
||||||
- "modprobe lg" if you built it as a module.
|
- "modprobe lg" if you built it as a module.
|
||||||
|
|
||||||
- Run an lguest as root:
|
- Run an lguest as root:
|
||||||
|
|
||||||
Documentation/lguest/lguest 64m vmlinux --tunnet=192.168.19.1 --block=rootfile root=/dev/lgba
|
Documentation/lguest/lguest 64 vmlinux --tunnet=192.168.19.1 --block=rootfile root=/dev/lgba
|
||||||
|
|
||||||
Explanation:
|
Explanation:
|
||||||
64m: the amount of memory to use.
|
64: the amount of memory to use, in MB.
|
||||||
|
|
||||||
vmlinux: the kernel image found in the top of your build directory. You
|
vmlinux: the kernel image found in the top of your build directory. You
|
||||||
can also use a standard bzImage.
|
can also use a standard bzImage.
|
||||||
|
@ -99,31 +113,7 @@ Running Lguest:
|
||||||
"--sharenet=<filename>": any two guests using the same file are on
|
"--sharenet=<filename>": any two guests using the same file are on
|
||||||
the same network. This file is created if it does not exist.
|
the same network. This file is created if it does not exist.
|
||||||
|
|
||||||
Lguest I/O model:
|
There is a helpful mailing list at http://ozlabs.org/mailman/listinfo/lguest
|
||||||
|
|
||||||
Lguest uses a simplified DMA model plus shared memory for I/O. Guests
|
Good luck!
|
||||||
can communicate with each other if they share underlying memory
|
|
||||||
(usually by the lguest program mmaping the same file), but they can
|
|
||||||
use any non-shared memory to communicate with the lguest process.
|
|
||||||
|
|
||||||
Guests can register DMA buffers at any key (must be a valid physical
|
|
||||||
address) using the LHCALL_BIND_DMA(key, dmabufs, num<<8|irq)
|
|
||||||
hypercall. "dmabufs" is the physical address of an array of "num"
|
|
||||||
"struct lguest_dma": each contains a used_len, and an array of
|
|
||||||
physical addresses and lengths. When a transfer occurs, the
|
|
||||||
"used_len" field of one of the buffers which has used_len 0 will be
|
|
||||||
set to the length transferred and the irq will fire.
|
|
||||||
|
|
||||||
Using an irq value of 0 unbinds the dma buffers.
|
|
||||||
|
|
||||||
To send DMA, the LHCALL_SEND_DMA(key, dma_physaddr) hypercall is used,
|
|
||||||
and the bytes used is written to the used_len field. This can be 0 if
|
|
||||||
noone else has bound a DMA buffer to that key or some other error.
|
|
||||||
DMA buffers bound by the same guest are ignored.
|
|
||||||
|
|
||||||
Cheers!
|
|
||||||
Rusty Russell rusty@rustcorp.com.au.
|
Rusty Russell rusty@rustcorp.com.au.
|
||||||
|
|
||||||
[1] These are on various places on the TODO list, waiting for you to
|
|
||||||
get annoyed enough at the limitation to fix it.
|
|
||||||
[2] Lguest is not yet tickless when idle. See [1].
|
|
||||||
|
|
Loading…
Reference in a new issue