genode/ports-okl4
Norman Feske fae63f4fa9 Merge base libraries into a single library
This patch simplifies the way of how Genode's base libraries are
organized. Originally, the base API was implemented in the form of many
small libraries such as 'thread', 'env', 'server', etc. Most of them
used to consist of only a small number of files. Because those libraries
are incorporated in any build, the checking of their inter-dependencies
made the build process more verbose than desired. Also, the number of
libraries and their roles (core only, non-core only, shared by both core
and non-core) were not easy to capture.

Hereby, the base libraries have been reduced to the following few
libraries:

- startup.mk contains the startup code for normal Genode processes.
  On some platform, core is able to use the library as well.
- base-common.mk contains the parts of the base library that are
  identical by core and non-core processes.
- base.mk contains the complete base API implementation for non-core
  processes

Consequently, the 'LIBS' declaration in 'target.mk' files becomes
simpler as well. In the most simple case, only the 'base' library must
be mentioned.

Fixes #18
2013-02-19 14:45:55 +01:00
..
config OKLinux: Remove Genode audio support 2013-01-10 23:05:43 +01:00
include Update copyright headers to 2013 2013-01-10 21:44:47 +01:00
lib/mk Merge base libraries into a single library 2013-02-19 14:45:55 +01:00
patches Merge base libraries into a single library 2013-02-19 14:45:55 +01:00
run Imported Genode release 11.11 2011-12-22 16:19:25 +01:00
src New Input::Event::FOCUS, rename keycode to code 2013-01-15 10:18:11 +01:00
Makefile Check for required tools on 'make prepare' 2012-05-29 13:55:00 +02:00
README OKLinux: Remove Genode audio support 2013-01-10 23:05:43 +01:00

README

This repository contains the port of OKLinux for Genode.

OKLinux is a para-virtualized version of Linux running on top of the
micro-kernel OKL4. The original code uses the Iguana framework - a bunch of
server components and libraries to simplify construction of applications
running on top of OKL4. This package contains a small OKLinux support library,
as well as a patch for OKLinux, that replaces Iguana by the Genode framework.
Nevertheless, OKLinux stays to be dependent on OKL4, meaning that
you can only use it in combination with Genode running on top of OKL4.

Usage
-----

If you haven't build Genode for OKL4 yet, please refer to the following documents:

:[http://genode.org/community/wiki/GenodeOnOKL4 - Genode on OKL4 Wiki page]:
  This Wiki page contains the information on how to build and use
  Genode with OKL4.

For building OKLinux for Genode, you first need to download and patch the
original sources. The top-level makefile of this repository automates this
task. Just issue:

! make prepare

Afterwards you need to include the OKLinux repository into the Genode build
process. Just add the path to this directory to the 'REPOSITORIES' declaration
of the 'etc/build.conf' file within your build directory.
Now, you can change to your build directory and simply type:

! make oklinux

That's all. The 'bin/' directory within your build directory should now contain
a symbolic link to the 'vmlinux' binary.
To test your Linux binary, you also need to tweak the config file for init and
for the elfweaver tool. You will find examples for this in the 'config/'
directory of this repository.

Block, net and audio driver
---------------------------

OKLinux for Genode provides special drivers, that provide network-card and
block-device to Linux applications. They are based on the block- and nic-session
interfaces of Genode.

The drivers are compiled in by default, but needs to be enabled in the
XML configuration of OKLinux, like so:

! <config>
!      <block/>
!      <nic/>
! </config>

The block device gets available under the name 'sda', like traditionally
scsi, ata and sata disks under Linux. The nic is available as the first
ethernet device 'eth0'. The audio-card is available as a simple ALSA device.

Kernel command line
-------------------

You can state the Linux kernel command line by using the XML configuration of
the start entry of your OKLinux instance:

! <config>
!      <commandline args="root=/dev/gda1"/>
! </config>

Initrd
------

If you need to start Linux with an initramfs, you have to provide the name of the
archive within the config area of your Linux instance:

! <config>
!      <initrd name="initrd-2.6.23.gz"/>
! </config>

Of course, you need to add this archive-file to the list of rom-files provided.

Screens
-------

Genode's version of OKlinux does include a special screen driver, which maps
framebuffer, input and/or nitpicker sessions to Linux's framebuffer device and
input event device interfaces.
A single screen is either a conglomerate of native framebuffer and input session,
or framebuffer and input sessions of a nitpicker session. To enable one or more
devices in Linux use the 'screens' section in your XML configuration:

! <config>
!       <screens>
!             <framebuffer/>
!             <nitpicker/>
!       </screens>
! </config>

The order in the 'screens' section determine the order of visible devices in Linux.

Configure Linux
---------------

This OKLinux package contains only a minimal Linux configuration. Especially,
any hardware drivers are missing, as Genode/OKL4 doesn't allow direct hardware
access from Linux. If you want to enable/disable options in Linux, you can
simply do so by using the normal Linux build system. You will find the
'.config' file Linux is using within the 'oklinux/' directory of your build
directory. If you don't want to tweak '.config' directly, you can also change
to the 'oklinux/' directory of your build directory and issue:

! ARCH=l4 SYSTEM=i386 make menuconfig

Then you will get the well known ncurses interface.

Troubleshooting
---------------

If you run into problems when building OKLinux and you want the build process
to be somehow more verbose, you can build OKLinux this way:

! VERBOSE_LX_MK=1 make oklinux