| |
L4Ka::Pistachio/ia32
The IA32 port of L4Ka::Pistachio is the reference architecture and
therefore in the most complete state. It supports most features of
the Version 4 API and has relatively well-tested SMP support. Note,
that all SMP support is still in an experimental stage.
Supported Hardware
L4Ka::Pistachio/ia32 was tested on a wide variety of system
configurations. The following system configurations are supported and
known to work:
- Intel i486
- Intel Pentium
- Intel Pentium II and Pentium III
- Intel Pentium 4
- VMware Workstation 3.2, 4.5
Multi-processors and APIC/IOAPIC support requires a system with ACPI.
Older MP systems only providing Intel's MP structure are not supported
and can therefore only be used in PIC and uniprocessor mode.
L4Ka::Pistachio/ia32 was tested on the following multi-processor
systems:
- 8-way Pentium 4 HT 2.2GHz with 1MB L3 cache, 8GB RAM
- 4-way Pentium 3 Xeon 700MHz with 1MB L2 cache, 1.25GB RAM
- 2-way Pentium 3 800MHz, 256K L2 cache, 768MB RAM
All listed performance measurements were
conducted on the dual P3 system.
Building and Booting
Step-by-step instructions for building L4Ka::Pistachio/ia32 can be
found in Getting Started with
L4Ka::Pistachio on ia32.
Kernel
The kernel can be built using GCC 2.95.2 and higher. However, we
highly recommend using GCC 3.2 or newer to make use of the far better
code optimizations and thereby getting better performance results.
Since most development systems are IA32 we assume that cross
compilation is a non-issue. Currently, there are problems building the kernel with GCC 4.
The kernel debugger can direct its I/O via the serial line or the
keyboard/screen. Be sure to configure your kernel for the appropriate I/O
device.
The binary distribution includes the kernel configurations for the
respective kernel binaries.
User-Level
The user-level applications are configured to use the serial port for I/O by
default. To use screen I/O, run the configure script with the
--without-comport command line option.
If you want to use the serial port, you can choose a particular port by either
specifying an index (0, 1, 2, or 3), or its physical device
address (e.g. 0x3f8), with the --with-comport= command line option.
Booting
The kernel can be booted using GRUB and
L4Ka::KickStart; latter is part of the kernel distribution. GRUB
requires a configuration file which contains all modules to be loaded.
Besides the kernel image itself further modules can be loaded. The
kernel requires at least sigma0 and the root task. Following an
example menu.lst file:
title=L4Ka::Pistachio
kernel=/kickstart
module=/ia32-kernel
module=/sigma0
module=/roottask
GRUB supports network booting using the TFTP protocol. For more
details refer to the corresponding documentations. A ready-to-run
GRUB floppy image can be generated and downloaded from here.
After booting, GRUB starts L4Ka::KickStart which
then configures the kernel configuration page using the boot-loader
provided configuration information. Afterwards, L4Ka::Kickstart hands over control to the
kernel which bootstraps sigma0, sigma1 (if available), and the root
task.
Runtime Output
The kernel prints diagnostic information to the screen (if the kernel
debugger is enabled). The information appears as "spinning" characters in
the upper right corner, one row per processor. The character will change
upon kernel events. The events, in reverse display order (right to left), are:
- idler invocation
- timer interrupt
- hardware interrupts
- end-of-timeslice
- cross-processor
If the kernel prints the message "KD# System started (press 'g'
to continue)" at startup and does not continue booting, and
you don't know why, simply press 'g' to continue. This feature allows
to set breakpoints and the like before the first user threads
are executed. You can control this behavior with the option "Enter
kernel debugger on startup" in the Debugger menu of the kernel
configuration utility.
If the kernel prints the error message "CPU does not support all
features (XYZ) -- halting" then the processor does not support required
features to operate the kernel. XYZ represents a feature mask, which is
validated against the CPUID instruction. When the kernel is configured
for verbose init, it will print cryptic strings representing the missing
features (the cryptic strings correlate to features enumerated in the ia32
manuals). To solve the problem, configure the kernel to use an older
generation processor.
Missing Features / Known Bugs
- Lipc not implemented
- IPC does not return local thread IDs on intra-address space IPC
- Kernel crashes without warning on systems not supporting 4MB pages
- A post-Pentium kernel crashes without warning on Pentium systems
- Kernel-ptab synchronization has race on SMP systems
- SMP support for pre-ACPI systems missing
|