 Minimal OS
 ----------

This shows some of the stuff that any guest OS will have to set up.

This includes:

 * installing a virtual exception table
 * handling virtual exceptions
 * handling asynchronous events
 * enabling/disabling async events
 * parsing start_info struct at start-of-day
 * registering virtual interrupt handlers (for timer interrupts)
 * a simple page and memory allocator
 * minimal libc support
 * minimal Copy-on-Write support
 * network, block, framebuffer support
 * transparent access to FileSystem exports (see tools/fs-back)

- to build it just type make.

- Mini-OS can be configured in various ways by specifying a config file:

  MINIOS_CONFIG=config-file make

  config-file can contain various CONFIG_* items set to either "y" or "n".
  Their defaults can be found in Config.mk.
  It is possible to specify the interface version of Xen via setting

  XEN_INTERFACE_VERSION=<version>

  in the config file. This defaults to 0x00030205, which is the minimal
  version supported. The latest available version is specified by setting

  XEN_INTERFACE_VERSION=__XEN_LATEST_INTERFACE_VERSION__

- By typing

  make testbuild

  it is possible to test builds of various configurations. This should be
  done always after modifying Mini-OS.

  The configurations which are build tested can be found in the directory
  arch/*/testbuild with one file per configuration. Those configurations are
  being built for each sub-architecture (e.g. x86_32 and x86_64 for the
  x86 architecture).

  Please update the current configuration files when adding a new CONFIG_
  item and maybe even add a new configuration file if the new item interacts
  with other CONFIG_ items.

- to build it with TCP/IP support, download LWIP 1.3.2 source code and type

  make LWIPDIR=/path/to/lwip/source

- to build it with much better libc support, see the stubdom/ directory

- to start it do the following in domain0
  # xl create -c domain_config

This starts the kernel and prints out a bunch of stuff and then once every
second the system time.

If you have setup a disk in the config file (e.g.
disk = [ 'file:/tmp/foo,hda,r' ] ), it will loop reading it.  If that disk is
writable (e.g. disk = [ 'file:/tmp/foo,hda,w' ] ), it will write data patterns
and re-read them.

If you have setup a network in the config file (e.g. vif = [''] ), it will
print incoming packets.

If you have setup a VFB in the config file (e.g. vfb = ['type=sdl'] ), it will
show a mouse with which you can draw color squares.

If you have compiled it with TCP/IP support, it will run a daytime server on
TCP port 13.


 ARM notes
 =========

- The IRQ numbers are currently hard-coded in gic.c and may need to be updated if
  future versions of Xen change them.
