Xenomai brief introduction
What is Xenomai?
Xenomai is a RTOS-to-Linux Portability Framework.
It comes in two flavors.
As a dual-kernel / co-kernel extension for (patched) Linux.
Allows more stringent real-time requirements.
More complex installation.
As libraries for native Linux (including PREEMPT-RT)
Less predictable.
Can be used on standard Linux.
For what is it used?
Many areas:
Machine control systems, PLCs.
Printing machines (manroland).
Printers / copying machines.
Network switches (e.g. Ruggedcom).
Magnetic resonance tomographs (Siemens Healthcare).
OROCOS (OSS robotics framework).
Many robotic research projects.
And many others ...
Architecture
Co-kernel: Cobalt
Supplements Linux with a real-time co-kernel running side-by-side with it.
Cobalt extension built into the Linux kernel and deals with all time-critical activities (e.g. interrupts, scheduling).
The Cobalt core has higher priority than native kernel activities.
Best real-time performance, but requires kernel patch (Adeos) and compilation.
What is a co-kernel architecture
Based on Adeos: nanokernel hardware abstraction layer (HAL), or hypervisor, that operates between computer hardware and the operating system.
Single (Linux) kernel: Mercure
Uses only the native real-time capabilities of the native Linux kernel.
PREEMPT-RT enhances the real-time behavior.
Not mandatory.
Depends on app requirements with respect to latency/jitter.
All the non-POSIX RTOS APIs that Xenomai provides are emulated over the native Linux threading.
“Skins” are also supported
Task migration: Cobalt only
Every cobalt thread is also a Linux task.
Thread states are shared/synchronized among domains.
Only one can run at a time.
Migration to RT:
On syscall xnshadow_harden().
Linux task suspended; Cobalt thread resumed.
Migration to Linux.
On syscall xnshadow_relax(), or fault/trap, signal.
Cobalt thread suspended; Linux task resumed.
Real-Time Driver Model
Goals and principles.
Provide environment for co-kernel real-time drivers.
Service interface towards applications and other drivers.
Low-level primitives from implementing drivers.
Linux for non-RT purposes: setup / shutdown, resource discovery and claiming, etc.
Last updated