Fiasco -- L4-compatible real-time µ-kernel

1 Synopsis

main [ -nowait ] [ -nokdb ] [ -comspeed n ] [ -comport n ] [ -hercules ] [ -serial ] [ -VT[+] ] [ -serial_esc ] [ -tbuf_entries n ] [ -out_buf n ] [ -esc ] [ -nofancy ] [ -no_serial_fifo ] [ -profile ] [ -profstart ] [ -irq0 ] [ -irqcom | -I- ] proto=physical_address

2 Description

Fiasco is a new µ-kernel (microkernel) running on x86 PCs intended to be compatible with the L4/x86 µ-kernel for x86. It implements the L4 ABI as defined in the L4/x86 Reference Manual. The Fiasco kernel can be used to construct flexible systems. We at TU Dresden will use it as a base for our DROPS system which supports a running real-time and time-sharing application concurrently on one computer. However, Fiasco is not only suitable for big and complex systems, but also for small, embedded applications.

3 Options

Removes the initial ``KDB: init'' breakpoint. The installation instructions on the Fiasco web site recommend this option; if you plan to do some serious debugging, you shouldn't use it.
Disables the kernel debugger. Should Fiasco raise an exception, it will just call the builtin jdb.
-comspeed n
Will set the rate of the serial interface to n bytes/second. 115200 bytes/second is the default.
-comport n
Will use COMn for serial communication. COM2 is the default. Possible values for n are 1 and 2.
Redirect kernel messages to the Hercules (or other MGA-compatible) console.
Disable serial ``fancy home´´ mode. Very useful when debugging with jdb and the minicom window has more than 25 lines.
Disable seriel fifo buffer. Might be required by some older (buggy) UARTs to work properly.
-serial or -VT[+]
Will additionally output kernel messages to the serial interface; this can save you copying kernel messages by hand. If -nokdb is also enabled, you can use a terminal program on the host to control Fiasco. If you are connected to a remote GDB, messages are copied to GDB's console.
Enable esc hack. On every timer interrupt, ask the keyboard if the Escape key was pressed. If so, do enter into kernel debugger. Applications (e.g. L4Linux) may be confused by dropped key events so better use -serial_esc.
Enter jdb on serial receive interrupts. This is only necessary if kdb was disabled by -nokdb.
-tbuf_entries n
Set number of lines to store in the debugging trace buffer. Default is 200.
-out_buf n
Set output buffer for kd_display functions to n bytes. Default is 4096.
Enable kernel profiling support; you need to compile it with -DPROFILE for this to work. Profiling needs to be started with either the -profstart option or using the kernel-debugger interface. When you terminate Fiasco (e.g., using the remote debugger), the profiling information is printed in uuencoded 4.4BSD gmon.out format to the serial interface; you can capture it using a terminal program.

Unfortunately, current versions of GNU `gprof' don't understand the 4.4BSD gmon.out format; the next version hopefully does. I've sent a patch to the `gprof' maintainer (the patch is also available on request from me).

Immediately start profiling after boot. This option requires the -profile option.
Enable IRQ0 for user tasks. Normally, IRQ0 is reserved for kernel use.
-irqcom or -I-
Disable for user tasks the IRQ associated with the serial port used for I/O or the kernel debugger.
This argument is automatically added by RMGR when starting Fiasco. It communicates the address of a template for the kernel's info page which contains configuration information for Fiasco. For details on the kernel info page, please see the L4 Reference Manual.

4 Booting

Fiasco should be booted using RMGR. Please see the RMGR manual page for details.

It is important to load a Sigma0 server along with Fiasco, because unlike L4/x86, Fiasco doesn't contain its own Sigma0 implementation. Here is a sample GRUB configuration file (menu.lst) which accomplishes this:

# RMGR is the boot kernel
kernel= (fd0)/rmgr -configfile -sigma0
# The Fiasco kernel must be the first boot module
module= (fd0)/main -nowait
# Sigma0
module= (fd0)/sigma0
# The RMGR config file (if any) must come just before the boot servers
module= (fd0)/rmgr.cfg
# boot server tasks follow
module= (fd0)/glinux.gz root=/dev/sda5
module= (fd0)/hello

5 Bugs


Please report bugs to <>.

6 See Also


L4 Reference Manual

GRUB, the Grand Unified Bootloader

Multiboot standard proposal

Michael Hohmuth