1.1 实时Linux发展历史
1.1.1 实时系统概况
实时系统(Real-Time System, RTOS)是一类强调任务执行时间可预测性的操作系统。在这类系统中,任务的响应时间比吞吐量更为关键。实时系统一般分为硬实时和软实时:
硬实时:任务必须在规定时间内完成,否则系统视为失败。典型应用包括工业控制、机器人操作、航空航天控制等。
软实时:任务尽量按时完成,但允许偶尔延迟,常见于多媒体播放、通信系统等。
Linux 操作系统本身设计为通用操作系统,并非针对硬实时优化,因此在严格实时任务中存在抖动(jitter)问题。为改善 Linux 的实时性,出现了两类主要方案:
- 单内核架构:提升 Linux 内核自身实时性。
- 双内核架构:在硬件上同时运行实时内核和 Linux 内核。
1. 单内核架构
为了提升 Linux 内核自身实时性,需要对Linux内核的内部进行实时改造,尽可能减少内核不可抢占的代码。
Preempt-RT(Real-Time)是一个对标准Linux内核的补丁集,旨在将Linux从一个分时操作系统转变为一个具备强实时能力的操作系统。它通过一系列关键机制改造内核,减少和消除不可抢占的延迟源,从而实现近硬实时的响应能力。
Preempt-RT在2015年成为Linux Foundation的正式项目“Real Time Linux Collaborative Project”,于2024年9月被正式合并进Linux主线内核。从 Linux 6.12版本开始,不再需要为内核单独打PREEMPT_RT补丁来获得实时能力。
以下是Preempt-RT改造Linux内核实时性的主要技术手段:
-
可抢占内核(Fully Preemptible Kernel)
将原本在内核态执行时不可抢占的临界区(如自旋锁保护的区域)改造为可被高优先级任务抢占,实现内核态任务的抢占式调度。 -
将自旋锁(spinlock)转化为可休眠的互斥锁(mutex)
将传统的自旋锁替换为基于等待队列的可抢占互斥锁(如rtmutex),避免在高优先级任务等待锁时忙等,防止优先级反转并允许调度。 -
实现可抢占的中断处理线程化(Threaded IRQs)
将大部分硬件中断处理程序(ISR)转化为内核线程运行,赋予其调度优先级,使高优先级中断处理可抢占低优先级中断处理。 -
优先级继承(Priority Inheritance)机制
在rtmutex中实现优先级继承,解决因资源竞争导致的优先级反转问题,确保高优先级任务能尽快获得资源。 -
可抢占的内核抢占点(Preemption Points)增加
在内核代码中插入更多安全的抢占点(如在长循环、系统调用返回路径等),确保高优先级任务能及时获得CPU。 -
延迟减少:消除不可抢占的临界区(如Big Kernel Lock, BKL)
移除或替换全局锁(如旧版的BKL),减少大范围不可抢占代码段,降低最大关抢占延迟。 -
高精度定时器(hrtimer)与实时调度器集成
基于高精度定时器实现更精确的调度和唤醒机制,支持微秒级调度精度,提升实时任务的响应确定性。 -
软中断(softirq)线程化(Threaded Softirqs)
将延迟敏感的软中断(如网络、调度相关)转化为可调度的内核线程(如ksoftirqd/0),使其可被高优先级任务抢占。
2. 双内核架构
双内核架构是指在硬件之上运行一个实时内核,把Linux内核当成一个普通的进程,其代表有RTLinux、RTAI和Xenomai。
RTLinux、RTAI 和 Xenomai 是 Linux 实时化发展史上三个具有代表性的实时扩展框架,它们均采用“双内核”(Dual-Kernel)架构,通过在标准 Linux 内核之外运行一个轻量级的实时内核来实现硬实时能力。
| 特性 | RTLinux | RTAI | Xenomai |
|---|---|---|---|
| 诞生时间 | 1996 年 | 1999 年 | 2001 年 |
| 架构 | 双内核 | 双内核 | 双内核 + Adeos 中断虚拟化层 |
| 实时性 | 微秒级延迟 | 微秒级延迟 | 微秒级延迟,更稳定 |
| API 支持 | 自定义 FIFO/共享内存 | RTAI API | 多种“皮肤”(POSIX, pSOS, vxworks 等) |
| 与 Linux 集成 | 较弱 | 中等 | 强(支持多种通信机制) |
| 维护状态 | 已停止 | 维护减少 | 活跃 |
| 典型应用 | 早期实时控制 | 教学、运动控制 | 工业自动化、机器人、嵌入式 |
- RTLinux(Real-Time Linux)
- 由新墨西哥理工学院的 Victor Yodaiken 于 1996 年提出并开发。
- 是最早实现 Linux 实时化的项目之一,开创了“微内核 + 宏内核”协同工作的双内核模式。
- 2002 年被 Wind River(风河)公司收购,后续发展受限,开源版本逐渐停滞。
- RTAI(Real-Time Application Interface)
- 起源于 1999 年,由意大利比萨大学等研究机构开发。
- 最初是作为 RTLinux 的改进和开源替代方案,旨在解决 RTLinux 的闭源问题。
- 基于 RTLinux 思想,但采用更灵活的模块化设计。
- 仍在维护,但活跃度下降。最新的版本是2021/5/19发布的RTAI 5.3,适配Linux 4.19,主页上宣称支持的硬件是x86和x86_64,对ARM的支持处于rework中。
- Xenomai
- 项目始于 2001 年,最初目标是为工业自动化提供实时支持。
- 早期基于 RTAI 技术,后发展为独立项目。
- 与 RTAI 并行发展,但在架构设计上更注重可移植性和多内核抽象。
- 持续支持新硬件架构(x86, ARM, RISC-V 等)和新内核版本。
- 广泛应用于工业控制、CNC、机器人(如 ROS 2 实时扩展)、汽车等领域。
- 目前最活跃和广泛使用的双内核实时 Linux 框架。
2. PREEMPT_RT 与 Xenomai 对比
综上所述,单内核的终极方案是 PREEMPT_RT,双内核最活跃和广泛使用的方案是 Xenomai。
随着 PREEMPT_RT 在 Linux 6.12 中合入主线,基于单内核的实时方案正成为主流。然而,在对实时性要求极高的场景中,Xenomai 双内核方案仍具有不可替代的优势。
-
更高实时确定性
基于中断虚拟化层,实现微秒级甚至亚微秒级中断响应,延迟抖动极小,满足硬实时(Hard Real-Time)要求。 -
更强的执行隔离
实时任务运行于独立的实时内核域,与 Linux 内核行为(如页错误、调度延迟、内存回收)完全隔离,避免非实时干扰。 -
多 RTOS API 兼容性(Skin 架构)
支持 POSIX、VRTX、μC/OS、LWIP 等多种实时接口,便于传统嵌入式应用迁移与跨平台集成。 -
更低的内核版本依赖
通过 Adeos 抽象层与主内核解耦,兼容性高,适用于长期维护的定制化嵌入式系统,升级维护成本低。 -
更优的混合关键性支持
适用于混合关键性系统(Mixed-Criticality Systems),可同时运行高确定性实时任务与通用 Linux 应用,互不干扰。
尽管 Xenomai 在实时性上更强,但 PREEMPT-RT 也有其优势:
- 集成度高:无需额外框架,开箱即用(Linux 6.12+)。
- 开发简单:使用标准 Linux 工具链和 API。
- 社区支持好:主线内核支持,长期维护。
- 更适合软实时应用:如音视频处理、机器人控制(非安全关键)。
从实际应用场景对比:
| 方案 | 推荐场景 |
|---|---|
| Xenomai | 工业控制、运动控制(CNC、机器人关节)、高速采集、安全关键系统等硬实时场景 |
| PREEMPT-RT | 音视频处理、软实时控制、ROS 2 实时扩展等对部署简易性要求高的场景 |
实际上 Xenomai 提供 Mecury 单核模式,在 PREEMPT-RT 基础上提供多种实时API。但是缺少用户反馈,发展的不好,现在基本不再维护。
1.1.2 Xenomai 发展历史
-
2001 年
项目启动,由 Philippe Gerum 等开发者发起,目标是构建一个高确定性实时框架。初期基于 RTAI 2.x 架构,运行于 Linux 2.4 内核之上。
“Xeno-” 是一个源自希腊语的词根,意思是“外来的”、“陌生的”或“客人”。“xeno-” 作为前缀,广泛用于构成表示“与外来者、异己或异质事物相关”的词汇。
在计算机领域,带有“外来”或“异构”的意味,契合双内核架构本质。“-mai”后缀是为了发音方便,并没有特定的含义。 -
2003 年
发布 Xenomai 1.0,首次引入 Adeos(Adaptive Domain Operating System)中断虚拟化层,实现对 x86 架构的完整支持。Adeos 使 Xenomai 实时内核能以最高优先级截获中断,Linux 内核降级为普通域运行。
尽管 Adeos曾经在 Linux 实时领域占据重要地位,但是目前社区活跃度较低,缺乏新的共享和讨论。 -
2005 年
推出 Xenomai 1.2–1.4 系列,逐步完善对 PowerPC、ARM、IA-64 等架构的支持。提出“皮肤(Skin)”架构,实现 POSIX、VRTX、RTAI 等 API 的模块化封装,提升可移植性。 -
2007 年
发布 Xenomai 2.4,成为 2.x 系列成熟版本。支持 Linux 2.6x 内核,广泛应用于工业控制设备(如 Sercos III 驱动、PLC 控制器)。 -
2011 年
Xenomai 2.6 系列发布,适配 Linux 3.x 内核。 -
2013 年
启动 Xenomai 3 重大重构,引入 Cobalt 实时内核,将核心功能从“补丁式内核模块”转向更模块化、可配置的实时运行时。 -
2014 年
宣布将在 Xenomai 3集成 RTNET 实时网络协议栈。 -
2015 年
发布 Xenomai 3.0,标志 Cobalt 内核正式上线。支持 alchemy、posix、native、vxworks等多种 API 接口。用户态实时任务通过 rtdm(Real-Time Driver Model) 与内核通信。 -
2016 年
发布 Xenomai 2.6.5,成为 2.x 系列最终版本。 -
2020 年
Xenomai 3.1 发布,支持 Linux 4.19 内核,优化 ARM64 架构性能,不再支持 blackfin 和 powerpc64 架构。引入 shadow syscall 机制,提升系统调用拦截效率。 -
2021 年
Xenomai 3.2 发布,适配 Linux 5.10 内核。在中断管道层面,不仅支持 I-pipe,还支持其继任者 Dovetail 。
快速推出了 Xenomai 3.2.1 版本,修复了支持 Dovetail 时的问题。 -
2024 年
Xenomai 3.3 发布,支持 Linux 5.10/5.15/6.1/6.12 内核。 -
2024 年至今
Xenomai 3.x 持续维护中,最新版本为 Xenomai 3.3.2。
同时开发 Xenomai 4 版本,进一步增强扩展性和适配性。
Xenomai 自 2001 年起历经三代演进,从基于 RTAI 的原型发展为独立、模块化、多架构支持的硬实时框架。其 中断虚拟层 与 Cobalt 实时内核 构成了高确定性基础,多 API “皮肤”架构 保障了工业生态兼容性。
1549

被折叠的 条评论
为什么被折叠?



