mini-os icon indicating copy to clipboard operation
mini-os copied to clipboard

Mirror of the Xen MiniOS Git from git://xenbits.xen.org/mini-os.git

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=

    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.