mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-21 06:33:31 +00:00
Remove stale documentation
The topics are either covered by the Genode Founations book for by our tools, in particular the integration of the prepare_port mechanism with the run tool.
This commit is contained in:
parent
cc4e21e7a7
commit
03c3040a1d
@ -1,119 +0,0 @@
|
|||||||
|
|
||||||
=============================================
|
|
||||||
How to use Genode with the Fiasco microkernel
|
|
||||||
=============================================
|
|
||||||
|
|
||||||
|
|
||||||
Norman Feske, Christian Helmuth
|
|
||||||
|
|
||||||
Abstract
|
|
||||||
########
|
|
||||||
|
|
||||||
This documentation describes the process of building and booting the L4/Fiasco
|
|
||||||
version of Genode. It assumes that you are familiar with basic concepts
|
|
||||||
described in the introductory documentation of Genode, namely the "How to start
|
|
||||||
exploring Genode" document.
|
|
||||||
|
|
||||||
|
|
||||||
Preconditions
|
|
||||||
#############
|
|
||||||
|
|
||||||
The Fiasco version of Genode relies on the following components from
|
|
||||||
the source tree of the Fiasco microkernel and the L4 environment (which also
|
|
||||||
need additional tools).
|
|
||||||
|
|
||||||
|
|
||||||
Tools
|
|
||||||
=====
|
|
||||||
|
|
||||||
* Gawk
|
|
||||||
* Bison
|
|
||||||
* Byacc
|
|
||||||
* Python
|
|
||||||
|
|
||||||
|
|
||||||
The Fiasco microkernel
|
|
||||||
======================
|
|
||||||
|
|
||||||
Information about Fiasco are provided at its official website:
|
|
||||||
|
|
||||||
! http://os.inf.tu-dresden.de/fiasco/prev/
|
|
||||||
|
|
||||||
To download the kernel and integrate it with Genode, issue the following
|
|
||||||
command from within the toplevel directory:
|
|
||||||
|
|
||||||
! ./tool/ports/prepare_port fiasco
|
|
||||||
|
|
||||||
For the vesa driver on x86 the x86emu library is required and can be downloaded
|
|
||||||
and prepared by invoking the following command:
|
|
||||||
|
|
||||||
! ./tool/ports/prepare_port x86emu
|
|
||||||
|
|
||||||
This command will download a prepackaged version of the kernel tested
|
|
||||||
with Genode. The build process of the kernel is integrated with Genode's
|
|
||||||
build system. After creating a build directory using 'create_builddir'
|
|
||||||
with 'fiasco_x86' as argument:
|
|
||||||
|
|
||||||
! <genode-dir>/tool/create_builddir fiasco_x86 \
|
|
||||||
! BUILD_DIR=<build-dir>
|
|
||||||
|
|
||||||
From within the new <build-dir>, the kernel can be compiled via
|
|
||||||
|
|
||||||
! make kernel/fiasco
|
|
||||||
|
|
||||||
When using Genode's run mechanism, there is no need to explicitly build the
|
|
||||||
kernel. The run environment (see 'tool/run/boot_dir/fiasco') takes care of it.
|
|
||||||
So you can simple execute run scripts from within the build directory, for
|
|
||||||
example:
|
|
||||||
|
|
||||||
! make run/demo
|
|
||||||
|
|
||||||
|
|
||||||
Behind the scenes
|
|
||||||
=================
|
|
||||||
|
|
||||||
For using the L4/Fiasco kernel, some basic user-level components and libraries
|
|
||||||
are needed. These are subsumed under the name L4 environment an are organized
|
|
||||||
as a number of packages. These packages provide two types of components. There
|
|
||||||
are low-level components for booting up and interfacing to Fiasco and there are
|
|
||||||
higher-level components that compose a basic OS infrastructure. For Genode, we
|
|
||||||
only rely on the low-level packages.
|
|
||||||
|
|
||||||
Previous versions of Genode included all necessary sources from the L4
|
|
||||||
environment in the '3rd/fiasco/snapshot' subdirectory. From release 10.02, the
|
|
||||||
'3rd' directory is no longer part of the release archive and also removed from
|
|
||||||
the subversion repository. Please download the '3rd_fiasco.tar.bz2' archive.
|
|
||||||
The source are organized as follows
|
|
||||||
|
|
||||||
:'tool': contains the tools that are used by the build processes of
|
|
||||||
the L4 environment and Fiasco. For example, the build process of Fiasco
|
|
||||||
relies on the 'preprocess' tool.
|
|
||||||
|
|
||||||
:'kernel': contains the Fiasco microkernel.
|
|
||||||
|
|
||||||
:'l4': contains the L4-environment source tree. The single packages
|
|
||||||
are located at 'l4/pkg'.
|
|
||||||
|
|
||||||
From all the packages of the L4 environment, the following three are of
|
|
||||||
interest for using Genode:
|
|
||||||
|
|
||||||
:'pkg/l4sys': contains the Fiasco system-call bindings.
|
|
||||||
|
|
||||||
The system-call bindings are a set of C-header files that define the
|
|
||||||
application-programming interface for invoking the system calls of
|
|
||||||
Fiasco.
|
|
||||||
|
|
||||||
:'pkg/sigma0':
|
|
||||||
|
|
||||||
Sigma0 is the initial memory manager required to use Fiasco.
|
|
||||||
|
|
||||||
:'pkg/bootstrap':
|
|
||||||
|
|
||||||
Bootstrap is the program that is started by the boot loader.
|
|
||||||
After being started, Bootstrap prepares the bare machine to
|
|
||||||
accommodate Fiasco. On many embedded architectures, bootstrap
|
|
||||||
is used to create a single binary image containing all boot-time
|
|
||||||
OS components.
|
|
||||||
|
|
||||||
Those components are implicitly built by the Genode build system when
|
|
||||||
issuing 'make kernel/fiasco'.
|
|
@ -1,78 +0,0 @@
|
|||||||
|
|
||||||
===================================
|
|
||||||
Genode on the Fiasco.OC microkernel
|
|
||||||
===================================
|
|
||||||
|
|
||||||
|
|
||||||
Stefan Kalkowski
|
|
||||||
|
|
||||||
|
|
||||||
Fiasco.OC is a microkernel originally developed by the OS group of the
|
|
||||||
TU-Dresden. Nowadays, it is primarily maintained and developed by
|
|
||||||
the company Kernkonzept. It's an object-oriented capability-based system
|
|
||||||
for x86, ARM, PowerPC and MIPS platforms.
|
|
||||||
|
|
||||||
This document provides brief instructions about downloading, building and
|
|
||||||
booting the Fiasco.OC version of Genode.
|
|
||||||
|
|
||||||
|
|
||||||
Prerequisites
|
|
||||||
#############
|
|
||||||
|
|
||||||
You need certain tools to use the Fiasco.OC build system. On Debian/Ubuntu
|
|
||||||
systems you have to install the following packages:
|
|
||||||
|
|
||||||
! apt-get install make gawk g++ binutils pkg-config g++-multilib subversion
|
|
||||||
|
|
||||||
Moreover, you need to download and install the tool-chain used by Genode. Have
|
|
||||||
a look at this page:
|
|
||||||
|
|
||||||
:[http://genode.org/download/tool-chain]:
|
|
||||||
Genode tool-chain
|
|
||||||
|
|
||||||
|
|
||||||
Building the Fiasco.OC version of Genode
|
|
||||||
########################################
|
|
||||||
|
|
||||||
The current version of Genode is available at the public Github repository:
|
|
||||||
|
|
||||||
:http://github.com/genodelabs/genode:
|
|
||||||
Github repository of Genode
|
|
||||||
|
|
||||||
After you've fetched the Genode source tree from the git repository, or
|
|
||||||
downloaded the latest release tar archive, you need the Fiasco.OC source code,
|
|
||||||
its kernel-bindings, additional bootstrap tools etc. To simplify that step,
|
|
||||||
you can use the 'prepare_port' tool:
|
|
||||||
|
|
||||||
! ./tool/ports/prepare_port foc
|
|
||||||
|
|
||||||
This will install all necessary third-party source code in the 'contrib' folder.
|
|
||||||
|
|
||||||
Now, go to a directory where you want the Genode/Fiasco.OC build directory to
|
|
||||||
remain. Use the helper script in the 'tool' directory of the Genode
|
|
||||||
source tree to create the initial build environment. You need to state the
|
|
||||||
build directory you want to create, and the hardware architecture to run
|
|
||||||
Fiasco.OC/Genode on. Choose 'x86_32', 'x86_64', or one of the available ARM
|
|
||||||
boards.
|
|
||||||
|
|
||||||
! <genode-dir>/tool/create_builddir x86_64
|
|
||||||
|
|
||||||
Now, go to the newly created build directory and type make:
|
|
||||||
|
|
||||||
! cd build/x86_64
|
|
||||||
! make KERNEL=foc
|
|
||||||
|
|
||||||
This will build the Fiasco.OC kernel, its bootstrap code, and every Genode component,
|
|
||||||
that runs on top of Fiasco.OC.
|
|
||||||
|
|
||||||
If you just want to give Genode/Fiasco.OC a try, you can call e.g.: the demo run-script
|
|
||||||
instead of building everything:
|
|
||||||
|
|
||||||
! make run/demo KERNEL=foc
|
|
||||||
|
|
||||||
|
|
||||||
Further Information
|
|
||||||
###################
|
|
||||||
|
|
||||||
:[https://l4re.org/fiasco/]:
|
|
||||||
Official website for the Fiasco.OC microkernel.
|
|
@ -1,195 +0,0 @@
|
|||||||
|
|
||||||
==========================================
|
|
||||||
How to use Genode with the NOVA hypervisor
|
|
||||||
==========================================
|
|
||||||
|
|
||||||
Norman Feske
|
|
||||||
|
|
||||||
|
|
||||||
When we started the development of Genode in 2006 at the OS Group of the TU
|
|
||||||
Dresden, it was originally designated to be the user land of a next-generation
|
|
||||||
and to-be-developed new kernel called NOVA. Because the kernel was not ready at
|
|
||||||
that time, we had to rely on intermediate solutions as kernel platform such as
|
|
||||||
L4/Fiasco and Linux during development. These circumstances led us to the
|
|
||||||
extremely portable design that Genode has today and motivated us to make Genode
|
|
||||||
available on the whole family of L4 microkernels. In December 2009, the day we
|
|
||||||
waited for a long time had come. The first version of NOVA was publicly
|
|
||||||
released:
|
|
||||||
|
|
||||||
:Official website of the NOVA hypervisor:
|
|
||||||
[http://hypervisor.org]
|
|
||||||
|
|
||||||
Besides the novel and modern kernel interface, NOVA has a list of features that
|
|
||||||
sets it apart from most other microkernels, in particular support for
|
|
||||||
virtualization hardware, multi-processor support, and capability-based
|
|
||||||
security.
|
|
||||||
|
|
||||||
|
|
||||||
Why bringing Genode to NOVA?
|
|
||||||
############################
|
|
||||||
|
|
||||||
NOVA is an acronym for NOVA OS Virtualization Architecture. It stands for a
|
|
||||||
radically new approach of combining full x86 virtualization with microkernel
|
|
||||||
design principles. Because NOVA is a microkernelized hypervisor, the term
|
|
||||||
microhypervisor was coined. In its current form, it successfully addresses
|
|
||||||
three main challenges. First, how to consolidate a microkernel system-call API
|
|
||||||
with a hypercall API in such a way that the API remains orthogonal? The answer
|
|
||||||
to this question lies in NOVA's unique IPC interface. Second, how to implement
|
|
||||||
a virtual machine monitor outside the hypervisor without spoiling
|
|
||||||
performance? The Vancouver virtual machine monitor that runs on top NOVA proves
|
|
||||||
that a decomposition at this system level is not only feasible but can yield
|
|
||||||
high performance. Third, being a modern microkernel, NOVA set out to pursue a
|
|
||||||
capability-based security model, which is a challenge on its own.
|
|
||||||
|
|
||||||
Up to now, the NOVA developers were most concerned about optimizing and
|
|
||||||
evaluating NOVA for the execution of virtual machines, not so much about
|
|
||||||
running a fine-grained decomposed multi-server operating system. This is where
|
|
||||||
Genode comes into play. With our port of Genode to NOVA, we contribute the
|
|
||||||
workload to evaluate NOVA's kernel API against this use case. We are happy to
|
|
||||||
report that the results so far are overly positive.
|
|
||||||
|
|
||||||
At this point, we want to thank the main developers of NOVA Udo Steinberg and
|
|
||||||
Bernhard Kauer for making their exceptional work and documentation publicly
|
|
||||||
available, and for being so responsive to our questions. We also greatly
|
|
||||||
enjoyed the technical discussions we had and look forward to the future
|
|
||||||
evolution of NOVA.
|
|
||||||
|
|
||||||
|
|
||||||
How to explore Genode on NOVA?
|
|
||||||
##############################
|
|
||||||
|
|
||||||
To download the NOVA kernel and integrate it with Genode, issue the following
|
|
||||||
command from within toplevel directory:
|
|
||||||
|
|
||||||
! ./tool/ports/prepare_port nova
|
|
||||||
|
|
||||||
For the vesa driver on x86 the x86emu library is required and can be downloaded
|
|
||||||
and prepared by invoking the following command from within the 'libports'
|
|
||||||
directory:
|
|
||||||
|
|
||||||
! ./tool/ports/prepare_port x86emu
|
|
||||||
|
|
||||||
For creating a preconfigured build directory prepared for compiling Genode for
|
|
||||||
NOVA, use the 'create_builddir' tool:
|
|
||||||
|
|
||||||
! <genode-dir>/tool/create_builddir nova_x86_32 BUILD_DIR=<build-dir>
|
|
||||||
|
|
||||||
This tool will create a fresh build directory at the location specified
|
|
||||||
as 'BUILD_DIR'. Provided that you have installed the
|
|
||||||
[http://genode.org/download/tool-chain - Genode tool chain], you can now build
|
|
||||||
the NOVA kernel via
|
|
||||||
|
|
||||||
! make kernel
|
|
||||||
|
|
||||||
For test driving Genode on NOVA directly from the build directory, you can use
|
|
||||||
Genode's run mechanism. For example, the following command builds and executes
|
|
||||||
Genode's graphical demo scenario on Qemu:
|
|
||||||
|
|
||||||
! make run/demo
|
|
||||||
|
|
||||||
|
|
||||||
Challenges
|
|
||||||
##########
|
|
||||||
|
|
||||||
From all currently supported base platforms of Genode, the port to NOVA was
|
|
||||||
the most venturesome effort. It is the first platform with kernel support for
|
|
||||||
capabilities and local names. That means no process except the kernel has
|
|
||||||
global knowledge. This raises a number of questions that seem extremely hard
|
|
||||||
to solve at the first sight. For example: There are no global IDs for threads
|
|
||||||
and other kernel objects. So how to address the destination for an IPC message?
|
|
||||||
Or another example: A thread does not know its own identity per se and there is
|
|
||||||
no system call similar to 'getpid' or 'l4_myself', not even a way to get a
|
|
||||||
pointer to a thread's own user-level thread-control block (UTCB). The UTCB,
|
|
||||||
however, is needed to invoke system calls. So how can a thread obtain its UTCB
|
|
||||||
in order to use system calls? The answers to these questions must be provided by
|
|
||||||
user-level concepts. Fortunately, Genode was designed for a capability kernel
|
|
||||||
right from the beginning so that we already had solutions to most of these
|
|
||||||
questions. In the following, we give a brief summary of the specifics of Genode
|
|
||||||
on NOVA:
|
|
||||||
|
|
||||||
* We maintain our own system-call bindings for NOVA ('base-nova/include/nova/')
|
|
||||||
derived from the NOVA specification. We put the bindings under MIT license
|
|
||||||
to encourage their use outside of Genode.
|
|
||||||
|
|
||||||
* Core runs directly as roottask on the NOVA hypervisor. On startup, core
|
|
||||||
maps the complete I/O port range to itself and implements debug output via
|
|
||||||
the serial/UART I/O ports defined by the BIOS data area.
|
|
||||||
|
|
||||||
* Because NOVA does not allow rootask to have a BSS segment, we need a slightly
|
|
||||||
modified linker script for core (see 'src/core/core.ld').
|
|
||||||
All other Genode programs use Genode's generic linker script.
|
|
||||||
|
|
||||||
* The Genode 'Capability' type consists of a portal selector expressing the
|
|
||||||
destination of a capability invocation.
|
|
||||||
|
|
||||||
* Thread-local data such as the UTCB pointer is provided by the new thread
|
|
||||||
context management introduced with the Genode release 10.02. It enables
|
|
||||||
each thread to determine its thread-local data using the current stack
|
|
||||||
pointer.
|
|
||||||
|
|
||||||
* NOVA provides threads without time called local execution contexts (EC).
|
|
||||||
Local ECs are used as server-side RPC handlers. The processing time
|
|
||||||
needed to perform RPC requests is provided by the client during the RPC call.
|
|
||||||
This way, RPC semantics becomes very similar to function call semantics with
|
|
||||||
regard to the accounting of CPU time. Genode already distinguishes normal
|
|
||||||
threads (with CPU time) and server-side RPC handlers ('Rpc_entrypoint')
|
|
||||||
and, therefore, can fully utilize this elegant mechanism without changing the
|
|
||||||
Genode API.
|
|
||||||
|
|
||||||
* On NOVA, there are no IPC send or IPC receive operations. Hence, this part
|
|
||||||
of Genode's IPC framework cannot be implemented on NOVA. However, the
|
|
||||||
corresponding classes 'Ipc_istream' and 'Ipc_ostream' are never used directly
|
|
||||||
but only as building blocks for the actually used 'Ipc_client' and
|
|
||||||
'Ipc_server' classes. Compared with the other Genode base platforms, Genode's
|
|
||||||
API for synchronous IPC communication maps more directly onto the NOVA
|
|
||||||
system-call interface.
|
|
||||||
|
|
||||||
* The Lock implementation utilizes NOVA's semaphore as a utility to let a
|
|
||||||
thread block in the attempt to get a contended lock. In contrast to the
|
|
||||||
intuitive way of using one kernel semaphore for each user lock, we use only
|
|
||||||
one kernel semaphore per thread and the peer-to-peer wake-up mechanism we
|
|
||||||
introduced in the release 9.08. This has two advantages: First, a lock does
|
|
||||||
not consume a kernel resource, and second, the full semantics of the Genode
|
|
||||||
lock including the 'cancel-blocking' semantics are preserved.
|
|
||||||
|
|
||||||
* On the current version of NOVA, kernel capabilities are delegated using IPC.
|
|
||||||
Genode supports this scheme by being able to marshal 'Capability' objects as
|
|
||||||
RPC message payload. In contrast to all other Genode base platforms where
|
|
||||||
the 'Capability' object is just plain data, the NOVA version must marshal
|
|
||||||
'Capability' objects such that the kernel translates the sender-local name to
|
|
||||||
the receiver-local name. This special treatment is achieved by overloading
|
|
||||||
the marshalling and unmarshalling operators of Genode's RPC framework. The
|
|
||||||
transfer of capabilities is completely transparent at API level and no
|
|
||||||
modification of existing RPC stub code was needed.
|
|
||||||
|
|
||||||
|
|
||||||
Manually booting Genode on NOVA
|
|
||||||
###############################
|
|
||||||
|
|
||||||
NOVA supports multi-boot-compliant boot loaders such as GRUB, Pulsar, or gPXE.
|
|
||||||
For example, a GRUB configuration entry for booting the Genode demo scenario
|
|
||||||
with NOVA looks as follows, whereas 'genode/' is a symbolic link to the
|
|
||||||
'var/run/demo/genode' directory created by invoking the 'demo' run script.
|
|
||||||
|
|
||||||
! title Genode demo scenario
|
|
||||||
! kernel /hypervisor iommu serial
|
|
||||||
! module /genode/core
|
|
||||||
! module /genode/config
|
|
||||||
! module /genode/init
|
|
||||||
! module /genode/timer
|
|
||||||
! module /genode/nitpicker
|
|
||||||
! ...
|
|
||||||
|
|
||||||
Limitations
|
|
||||||
###########
|
|
||||||
|
|
||||||
The current NOVA version of Genode is able to run the complete Genode demo
|
|
||||||
scenario including several device drivers (PIT, PS/2, VESA, PCI) and the GUI.
|
|
||||||
Still the NOVA support is not on par with some of the other platforms.
|
|
||||||
The current limitations are:
|
|
||||||
|
|
||||||
* Threads (ECs) can not be migrated to another CPU once started.
|
|
||||||
|
|
||||||
* For portals used as exception vectors for threads, the thread causing the
|
|
||||||
exception and the handler thread which is bound to the exception portal must
|
|
||||||
be on the same CPU.
|
|
@ -1,128 +0,0 @@
|
|||||||
|
|
||||||
==============================
|
|
||||||
Genode on the OKL4 microkernel
|
|
||||||
==============================
|
|
||||||
|
|
||||||
|
|
||||||
Stefan Kalkowski
|
|
||||||
|
|
||||||
|
|
||||||
OKl4 is a microkernel developed and distributed by Open Kernel Labs. It is
|
|
||||||
focused on embedded devices. Genode support the OKL4 kernel version 2.1
|
|
||||||
on the x86_32 platform.
|
|
||||||
|
|
||||||
This document provides brief instructions about downloading, building and
|
|
||||||
booting the OKL4 version of Genode.
|
|
||||||
|
|
||||||
|
|
||||||
Prerequisites
|
|
||||||
#############
|
|
||||||
|
|
||||||
You need Python 2.4 to use the OKL4 build system. On Debian/Ubuntu systems
|
|
||||||
simply type:
|
|
||||||
|
|
||||||
! apt-get install python2.4
|
|
||||||
|
|
||||||
Since Ubuntu 10.04, the python2.4 package is no longer part of the official
|
|
||||||
repositories. However, you can manually add the repository via:
|
|
||||||
|
|
||||||
! add-apt-repository ppa:python24-team/python24
|
|
||||||
! apt-get update
|
|
||||||
|
|
||||||
Moreover, you need to download and install the tool-chain used by Genode. Have
|
|
||||||
a look at this page:
|
|
||||||
|
|
||||||
:[http://genode.org/download/tool-chain]:
|
|
||||||
Genode tool-chain
|
|
||||||
|
|
||||||
|
|
||||||
Downloading and building the OKL4 kernel
|
|
||||||
########################################
|
|
||||||
|
|
||||||
To download the OKL4 source code, issue the following command:
|
|
||||||
|
|
||||||
! <genode-dir>/tool/ports/prepare_port okl4
|
|
||||||
|
|
||||||
It will take care of downloading the kernel's source code and applying the
|
|
||||||
patches found at 'base-okl4/patches'.
|
|
||||||
|
|
||||||
For the VESA driver on x86, the x86emu library is required and can be downloaded
|
|
||||||
and prepared by invoking the following command:
|
|
||||||
|
|
||||||
! <genode-dir>/tool/ports/prepare_port x86emu
|
|
||||||
|
|
||||||
To create a build directory for Genode running on OKL4, use the 'create_builddir'
|
|
||||||
tool:
|
|
||||||
|
|
||||||
! <genode-dir>/tool/create_builddir okl4_x86
|
|
||||||
|
|
||||||
Once you have created the build directory at '<genode-dir>/build/okl4_x86',
|
|
||||||
the OKL4 kernel can be built from within the build directory via
|
|
||||||
|
|
||||||
! make kernel
|
|
||||||
|
|
||||||
|
|
||||||
Running the Genode demonstration scenario
|
|
||||||
#########################################
|
|
||||||
|
|
||||||
For a quick test drive of the OKL4 kernel, issue 'make run/demo' from the
|
|
||||||
build directory.
|
|
||||||
|
|
||||||
|
|
||||||
Manually building a boot image
|
|
||||||
##############################
|
|
||||||
|
|
||||||
This section is not needed when using Genode's run-script mechanism. The manual
|
|
||||||
steps described below are automatically executed via the OKL4 run environment
|
|
||||||
as found at 'tool/run/boot_dir/okl4'.
|
|
||||||
|
|
||||||
To practically use the OKL4 kernel and applications running on top of it, Open
|
|
||||||
Kernel Labs provide a tool called 'elfweaver', that is used to merge different
|
|
||||||
application binaries and the kernel itself into one single elf binary that can
|
|
||||||
be executed by your bootloader, e.g. Grub.
|
|
||||||
|
|
||||||
To configure 'elfweaver' to merge the appropriated elf binaries you have to
|
|
||||||
provide an XML file. A good starting point is the 'weaver_x86.xml' file that
|
|
||||||
includes the Genode demo example. Simply copy that file to your Genode build
|
|
||||||
directory and adapt the 'file' attribute of the 'kernel' tag to the absolute
|
|
||||||
path of the OKL4 kernel we build previously.
|
|
||||||
|
|
||||||
! cp <path_to_genode_src>/base-okl4/tool/weaver_x86.xml weaver.xml
|
|
||||||
|
|
||||||
The corresponding line in your weaver.xml should look like this:
|
|
||||||
|
|
||||||
! <kernel file="<path_to_okl4_src>/build/pistachio/bin/kernel" xip="false" >
|
|
||||||
|
|
||||||
Before creating the image, we need to supply a Genode config file as well.
|
|
||||||
For a quick start, you can copy and rename the template provided 'os/config/demo'
|
|
||||||
to '<buil-ddir>/bin/config'. Alternatively, you can assign another file to the
|
|
||||||
'filename' of the 'memsection' declaration for the config file in 'weaver.xml'.
|
|
||||||
Now, we can use 'elfweaver' to create the image. Go to the 'bin' directory in
|
|
||||||
the Genode build directory that contains all the binaries and invoke the
|
|
||||||
script.
|
|
||||||
|
|
||||||
! cd bin
|
|
||||||
! <path_to_okl4_src>/tools/pyelf/elfweaver merge --output=weaver.elf ../weaver.xml
|
|
||||||
! strip weaver.elf
|
|
||||||
|
|
||||||
Note: the given paths to the resulting elf file and the input xml file have to
|
|
||||||
be relative.
|
|
||||||
|
|
||||||
*Bug alert:* Elfweaver triggers an assertion when too many memsections are
|
|
||||||
declared in the 'weaver.xml' file and just outputs the following message
|
|
||||||
! An error occurred:
|
|
||||||
Apparently, elfweaver has a problem with calculating the size of the boot info
|
|
||||||
section. As a quick fix, you can increase the value of 'BOOTINFO_GUESS_OPS' in
|
|
||||||
'<okl4-dir>/tools/pyelf/weaver/bootinfo.py'.
|
|
||||||
|
|
||||||
The resulting elf image can be loaded by GRUB now.
|
|
||||||
|
|
||||||
|
|
||||||
Further Information
|
|
||||||
###################
|
|
||||||
|
|
||||||
:[http://genode.org/documentation/articles/genode-on-okl4]:
|
|
||||||
Article about the porting work of Genode to OKL4, featuring many technical
|
|
||||||
insights that are useful to understand the peculiarities of this base
|
|
||||||
platform.
|
|
||||||
|
|
@ -1,68 +0,0 @@
|
|||||||
|
|
||||||
=========================================
|
|
||||||
Genode on the L4ka::Pistachio microkernel
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
|
|
||||||
Norman Feske
|
|
||||||
|
|
||||||
|
|
||||||
Pistachio is the reference implementation of the L4 API version x.2 (also
|
|
||||||
referred to a v4). It is developed by the System Architecture Group at the
|
|
||||||
University of Karlsruhe, Germany and the DiSy group at the University of
|
|
||||||
New South Wales, Australia.
|
|
||||||
|
|
||||||
Because this kernel has been the experimentation platform for a lot of exciting
|
|
||||||
research experiments at the L4ka group and it is the basis for the commercial
|
|
||||||
version of L4 developed by OK-Labs, Pistachio is a very interesting base
|
|
||||||
platform for the Genode OS Framework.
|
|
||||||
|
|
||||||
The original port of the Genode OS Framework to Pistachio is the work of Julian
|
|
||||||
Stecklina who wanted to elaborate on the portability of the framework and
|
|
||||||
explore the use of Pistachio's multi-processor capabilities with Genode.
|
|
||||||
|
|
||||||
This document provides brief instructions about downloading, building and
|
|
||||||
booting the Pistachio version of Genode.
|
|
||||||
|
|
||||||
|
|
||||||
Downloading, building, and using L4ka::Pistachio
|
|
||||||
################################################
|
|
||||||
|
|
||||||
Please make sure that you haved downloaded and installed the tool chain,
|
|
||||||
which will be used for both, the L4ka::Pistachio kernel and Genode.
|
|
||||||
|
|
||||||
:[http://genode.org/download/tool-chain]:
|
|
||||||
Preconfigured GNU tool chain for building Genode
|
|
||||||
|
|
||||||
To download the kernel source codes, issue './tool/ports/prepare_port pistachio'.
|
|
||||||
This command will checkout the upstream Git repository of the kernel. Please
|
|
||||||
make sure to have Git installed.
|
|
||||||
|
|
||||||
For the vesa driver on x86 the x86emu library is required and can be downloaded
|
|
||||||
and prepared by invoking the following command:
|
|
||||||
|
|
||||||
! ./tool/ports/prepare_port x86emu
|
|
||||||
|
|
||||||
After having successfully prepared the 'base-pistachio' repository and
|
|
||||||
'libports' you are ready to create a Genode build directory using the
|
|
||||||
'tool/create_builddir':
|
|
||||||
|
|
||||||
! <genode-dir>/tool/create_builddir pistachio_x86 \
|
|
||||||
! BUILD_DIR=<build-dir>
|
|
||||||
|
|
||||||
From within this directory, you can build the kernel by using 'make kernel'.
|
|
||||||
The kernel will be built within '<build-dir>/kernel/pistachio' using the Genode
|
|
||||||
tool chain.
|
|
||||||
|
|
||||||
To build and start Genode directly from within the Genode build directory,
|
|
||||||
issue
|
|
||||||
|
|
||||||
! make run/demo
|
|
||||||
|
|
||||||
This command will execute the steps described in the run script located at
|
|
||||||
'os/run/demo.run'. It will build all Genode components needed for the demo
|
|
||||||
scenario, create a configuration, and start the scenario using Qemu. To inspect
|
|
||||||
the individual steps more closely or learn the steps needed to manually
|
|
||||||
integrate Genode with L4ka::Pistachio, please revisit the Pistachio-specific
|
|
||||||
run environment at 'tool/run/boot_dir/pistachio'.
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user