02-Xenomai简介
特性I-pipeDovetail代码量较大(~30K行)较小(~5K行)维护状态维护中活跃开发内核兼容性较差,需大量适配更好,跟进主线性能略优略低(但足够)推荐场景旧项目、稳定性优先新项目、未来趋势如何选择?新项目:推荐使用 Dovetail旧项目迁移:根据情况选择追求稳定性:I-pipe 更成熟发展历史:从 2001 年至今 20 多年的演进双内核架构:Cobalt + Linux 的独特设计:
Xenomai 简介:发展历史、架构与应用场景
本系列教程将带领大家从零开始学习 Xenomai 实时系统,本文是第2篇。
Xenomai 发展历史
起源(2001年)
Xenomai 项目始于 2001年8月,由法国工程师 Philippe Gerum 创建。最初目的是为 Linux 提供一个高性能的实时扩展框架,让 Linux 能够满足工业控制等领域的硬实时需求。
在 Xenomai 出现之前,Linux 想要实现实时性非常困难,需要大量的内核补丁。Xenomai 的出现改变了这一局面。
与 RTAI 融合(2003年)
2003年,Xenomai 与 RTAI(Real-Time Application Interface)项目合并,推出了 RTAI/fusion,这就是 Xenomai 3 的前身。这次合并吸收了 RTAI 的优秀设计理念,形成了现在看到的 Xenomai 架构。
版本演进
| 版本 | 时间 | 特点 |
|---|---|---|
| Xenomai 2.x | 2005-2015 | 基于 Adeos I-pipe 补丁,最成熟的版本 |
| Xenomai 3.x | 2015-至今 | 支持 I-pipe 和 Dovetail 双接口 |
| Xenomai 4.x | 开发中 | EVL 核心,全新架构 |

演进趋势
Xenomai 2.x → Xenomai 3.x → Xenomai 4.x
(I-pipe) (I-pipe/Dovetail) (EVL)
从时间线可以看出,Xenomai 一直在演进。Xenomai 3.x 是目前最常用的版本,它同时支持两种内核接口:传统的 I-pipe 和新一代的 Dovetail。Xenomai 4.x 正在开发中,引入了 EVL(Explicitly Volatile List)核心。
Xenomai 核心概念
双内核架构
Xenomai 采用双内核设计,这是它与其他实时方案最大的不同:
- Cobalt 内核:实时微内核,负责处理硬实时任务
- Linux 内核:通用操作系统,处理非实时任务
两者并行运行,硬件中断首先被 Cobalt 拦截,实时任务直接在 Cobalt 上执行,非实时任务才交给 Linux。

这种设计的优势是:实时任务的执行不受 Linux 任何影响,Linux 即使负载很高,也不会干扰实时任务的确定性。
域(Domain)
Xenomai 将系统划分为两个域(Domain):
| 域 | 优先级 | 说明 |
|---|---|---|
| Xenomai 域 (Cobalt) | 高 | 硬实时任务,优先调度 |
| Linux 域 | 低 | 普通任务,背景运行 |
这种优先级机制确保了实时任务始终能够第一时间获得 CPU 资源。
中断管道
Xenomai 通过中断管道(Interrupt Pipeline) 拦截硬件中断:
- 硬件中断首先进入 Xenomai 域(Cobalt)
- Cobalt 判断中断类型:
- 实时中断:立即在 Cobalt 域处理
- 普通中断:转发给 Linux 域处理
- 如果是实时任务触发的中断,Cobalt 可以直接唤醒对应任务
这种设计保证了中断响应的确定性,这是硬实时系统的关键。
I-pipe vs Dovetail(重点详解)
这是 Xenomai 3.x 最重要的特性之一。I-pipe 和 Dovetail 是两种不同的 Linux 内核接口方案,它们的作用是让 Xenomai 能够"插入"到 Linux 内核中。
为什么需要内核接口?
Xenomai 需要在 Linux 之前拦截硬件中断、管理调度。这意味着需要对 Linux 内核进行一些修改。内核接口就是这种修改的标准方式。
I-pipe(传统方案)
I-pipe(Interrupt Pipeline) 是 Xenomai 最早使用的接口,也称为 AdeOS 或 Adeos。

工作原理:
硬件中断 → I-pipe 补丁层 → Xenomai 域 → Linux 域
I-pipe 在 Linux 内核和硬件之间增加了一个"管道层",所有中断都先经过这个管道,再分发给 Xenomai 或 Linux。
特点:
- 成熟稳定,经过20多年验证
- 代码量较大(约数万行补丁)
- 对内核版本依赖性强,每个内核版本需要单独适配
- 仍在维护,但新功能较少
- 适合旧项目和对稳定性要求高的场景
支持的 Linux 版本:
- 2.6.x ~ 4.x 系列
- 最新的 I-pipe 补丁支持到 Linux 4.19/5.x
Dovetail(新一代方案)
Dovetail 是 2019 年推出的新一代接口,旨在解决 I-pipe 的一些问题。
设计目标:
- 更轻量,代码量更少
- 更容易维护
- 与主线 Linux 内核更好的兼容性
工作原理:
硬件中断 → Dovetail 层 → Xenomai 域 → Linux 域
Dovetail 利用了 Linux 内核的一些新特性(如 kernel markers),以更优雅的方式实现中断拦截,不需要大规模的内核补丁。
特点:
- 代码量小(约几千行)
- 维护简单,跟进主线内核快
- 与主线内核兼容性更好
- 推荐新项目使用
- 活跃开发中
支持的 Linux 版本:
- 5.x ~ 6.x 系列
- 目前推荐用于 Linux 6.x
对比总结
| 特性 | I-pipe | Dovetail |
|---|---|---|
| 代码量 | 较大(~30K行) | 较小(~5K行) |
| 维护状态 | 维护中 | 活跃开发 |
| 内核兼容性 | 较差,需大量适配 | 更好,跟进主线 |
| 性能 | 略优 | 略低(但足够) |
| 推荐场景 | 旧项目、稳定性优先 | 新项目、未来趋势 |
如何选择?
- 新项目:推荐使用 Dovetail
- 旧项目迁移:根据情况选择
- 追求稳定性:I-pipe 更成熟
Philippe Gerum 的解释
Xenomai 作者 Philippe Gerum 在 2019 年的演讲中提到:
“Dovetail 是为了解决 I-pipe 维护困难的问题而设计的。I-pipe 需要对每个内核版本进行大量适配工作,而 Dovetail 利用了内核的 tracepoint 机制,大大减少了需要修改的代码。”
Xenomai 核心组件
1. Cobalt 内核
Cobalt 是 Xenomai 的实时核心,运行在 Linux 之上:
- 实时任务调度:基于固定优先级和 EDF 算法
- 实时中断处理:确保中断响应时间确定
- 优先级管理:支持 256 级优先级
- 内存管理:实时内存池,避免动态分配延迟
2. libcobalt
提供给应用程序的 C 语言库:
- POSIX 接口:pthread、mutex、sem 等
- 原生 Xenomai 接口:更高效的实时 API
- API 兼容层:支持 VxWorks、RTEMS 等其他实时系统的 API
3. RTDM(Real-Time Driver Model)
实时设备驱动接口:
- 统一的驱动编程模型
- 实时驱动与普通驱动的区别
- 支持常见的设备类型(字符设备、网络设备等)
4. 多种 API 接口
Xenomai 的一个重要优势是多 API 支持:
┌─────────────────────────────────────┐
│ 应用层 │
├─────────────────────────────────────┤
│ POSIX │ VxWorks │ RTEMS │ ... │ ← 不同 API
├─────────────────────────────────────┤
│ libcobalt │ ← 统一接口层
├─────────────────────────────────────┤
│ Cobalt 内核 │ ← 实时核心
├─────────────────────────────────────┤
│ I-pipe / Dovetail 接口 │ ← 内核接口
├─────────────────────────────────────┤
│ Linux 内核 │ ← 通用系统
└─────────────────────────────────────┘
这意味着:你可以在不改变应用程序的情况下,在不同实时系统之间切换。
应用场景
工业控制
- PLC(可编程逻辑控制器):硬实时控制
- 运动控制器:多轴电机控制,毫秒级精度
- 机器人控制:实时轨迹规划
- 数控机床:高精度加工
实时通信
- EtherCAT 主站:工业以太网,微秒级同步
- PROFINET IRT:实时工业以太网
- RTnet:开源实时网络栈
测试测量
- 高速数据采集:多通道同步采样
- 示波器/逻辑分析仪:实时信号显示
- 实时信号处理:FFT、滤波等
航空航天
- 飞行控制系统:安全关键系统
- 模拟器:实时仿真
- 卫星控制:姿态控制
为什么选择 Xenomai?
核心优势
| 优势 | 说明 |
|---|---|
| 硬实时性 | 微秒级延迟确定性,最坏情况可预测 |
| 多 API | 支持 POSIX、VxWorks、RTEMS 等,无需重写代码 |
| RTDM | 统一的实时驱动模型 |
| 社区活跃 | 持续更新,文档完善 |
| 硬件支持 | x86、ARM、PowerPC、MIPS 等多种架构 |
对比其他方案
| 特性 | PREEMPT_RT | Xenomai | RTLinux |
|---|---|---|---|
| 架构 | 单内核 | 双内核 | 双内核 |
| 实时性 | 软实时 | 硬实时 | 硬实时 |
| 复杂度 | 低 | 中 | 高 |
| 维护状态 | 主线 | 活跃 | 很少维护 |
| 多 API | 无 | 支持 | 有限 |
PREEMPT_RT 和 Xenomai 是目前最流行的两种 Linux 实时方案:
- PREEMPT_RT 适合对实时性要求不那么严格,但希望简单部署的场景
- Xenomai 适合工业控制等对确定性要求极高的场景
如何获取 Xenomai?
源码仓库
- 官方仓库:https://git.xenomai.org/
- GitHub 镜像:https://github.com/xenomai-ci/xenomai
内核版本选择
| Linux 版本 | 推荐接口 | 说明 |
|---|---|---|
| 4.x | I-pipe | 稳定 |
| 5.x | Dovetail | 推荐 |
| 6.x | Dovetail | 最佳支持 |
总结
本文详细介绍了 Xenomai 的各个方面:
- 发展历史:从 2001 年至今 20 多年的演进
- 双内核架构:Cobalt + Linux 的独特设计
- I-pipe vs Dovetail:两种内核接口的详细对比(重点!)
- 核心组件:Cobalt、libcobalt、RTDM
- 应用场景:工业控制、实时通信、测试测量
- 优势:硬实时性、多 API 支持
思考题:
- 你的项目应该选择 I-pipe 还是 Dovetail?为什么?
- 你计划把 Xenomai 应用在什么场景?
欢迎在评论区留言讨论!
下篇预告: 环境搭建:内核编译、安装、配置 GRUB
更多推荐


所有评论(0)