当前位置: 首页 > ops >正文

【Note】Linux Kernel 实时技术深入:详解 PREEMPT_RT 与 Xenomai

Linux Kernel 实时技术深入:详解 PREEMPT_RT 与 Xenomai

实时性(Real-Time)是嵌入式系统、自动驾驶、机器人等场景的基本要求。Linux 社区提供两种主流方案:单核内核补丁 PREEMPT_RT 与“协同内核”方案 Xenomai。本文全面对比它们的架构、源码差异、构建流程及实际调试方法。


一、PREEMPT_RT:单核硬实时补丁

1. 架构与设计目标

  • 目标是将 Linux 内核几乎所有路径转换为可抢占;
  • 原理包括:将大锁(如 big kernel lock)转化为自旋锁,允许被抢占;中断以线程形式处理;
  • 2024 年随着内核 6.12 发布,PREEMPT_RT 已正式合入主线内核,ARM64、x86、RISC‑V 等架构全面支持 (Wikipedia)。

2. 核心源码变化

  • 全局锁:替换 raw_spinlock_t 为实时自旋锁 rt_spinlock_t
  • 异步中断:IRQ 处理改为 IRQ thread,将中断上下文变为可抢占线程;
  • 调度和时钟中断修改为高分辨率计时器;
  • 新增 SCHED_DEADLINE, SCHED_FIFO, SCHED_RR 实时调度类 (jack23247.github.io)。

3. 构建流程

# 下载内核与 PREEMPT_RT 补丁
wget linux-5.15.x.tar.gz
wget patch-5.15.x-rtYY.patch.xz
tar xf linux-*.tar.gz
xz -d patch-*.xz
patch -p1 < patch-*.patch
# 配置启用 RT
make menuconfig # 选择 Fully Preemptible Kernel (RT)
make -j$(nproc)
sudo make modules_install && sudo make install
reboot 入内核 -rt 版本
uname -r # 确认带 -rt 字样

这套流程可在 modern Ubuntu 上执行 (acontis.com, jack23247.github.io)。

4. 使用与性能表现

  • 系统表现更低的中断延迟,99% 延迟可控在几十微秒 (forums.fedoraforum.org);
  • 降低了抢占锁(lock)范围,替换常驻大锁路径;
  • 引入调试与追踪工具(ftracetrace-cmd)分析抢占点。

二、Xenomai:协同内核方案

1. 架构模式

Xenomai 3 支持两种模式 (DEV Community, v3.xenomai.org):

  • Cobalt(Dual-Kernel):在 Linux 之上构建微内核,通过 I‑pipe(中断管线)接管中断,实现硬实时;
  • Mercury(Single-Kernel):基于主线内核,依赖 PREEMPT_RT 补丁提高实时性。

2. 核心机制

  • 协同内核采用 I‑pipe 筛取中断,Cobalt 拦截关键事件确保实时响应;
  • 提供 RTDM 驱动模型及 RTOS 风格 API(如 Alchemy、POSIX/Cobalt);
  • Dual‑kernel 模式中拥有更低且可预测的延迟,适合严格硬实时需求 (v3.xenomai.org, Number Analytics, cs.ru.nl, Wikipedia)。

3. 构建流程示例

wget xenomai-3.x.tar.bz2 && tar xf xenomai-3*.tar.bz2
cd xenomai-3.x
./scripts/prepare-kernel.sh --linux=/path/to/linux --arch=arm64
# 选择 cobalt 模式移植或 mercury 配合 PREEMPT_RT
cd /path/to/linux
make menuconfig # 修改为 Xenomai 相关选项
make -j && make modules_install && make install
cd ../xenomai-3.x
./configure --with-kernel=... && make && sudo make install

具体源码逻辑包括 skins/, cobalt/, mercury/ 模块 (foundries.io, YouTube, v3.xenomai.org, Indico)。

4. 使用要点

  • 编写实时任务时使用 Xenomai API,如:

    #include <alchemy/task.h>
    RT_TASK task;
    rt_task_create(&task, "foo", 0, 99, 0);
    rt_task_start(&task, &func, NULL);
    rt_task_join(&task);
    
  • 在 dual‑kernel 模式,RTDM 驱动可激活硬实时中断;

  • Mercury 模式适合对 Linux 驱动兼容性高的项目。


Building Hard Real‑Time Linux Systems with Xenomai

(以上视频展示了 Xenomai/Kern 协同内核运行时如何实现硬实时场景)


三、对比总结

特性PREEMPT_RT(Single-Kernel)Xenomai Cobalt(Dual-Kernel)
内核结构单一内核、全路径可抢占双核模式,有专用实时内核
中断处理IRQ 作为线程处理,延迟可控I‑pipe 由 Cobalt 直接接管中断,延迟极低
API 支持POSIX / SCHED_* 实时接口支持 RTOS Skin(Alchemy、VxWorks 模拟)
维护与稳定性已合入主线,自带长期支持需要特定打补丁,维护稍复杂
适用场景低中实时延迟需求,如工业自动化、视频处理严格硬实时,如电机控制、精密系统实现

四、如何选择?

  • 时间延迟 <100 μs,且系统对中断抖动敏感 → 使用 Xenomai Cobalt;
  • 成本最低、易维护 → 使用 PREEMPT_RT 内核即可;
  • 已有 RTOS 应用迁移 → Xenomai 提供 RTOS API 兼容性。

五、实践建议

  1. 若系统只需低延迟与高 POSIX 兼容性,编译启用 PREEMPT_RT;
  2. 若需精度更高或已有 RTOS 代码基础,选 Xenomai dual‑kernel;
  3. 利用 trace-cmd, cyclictest, rt-tests 测量延迟;
  4. 始终使用调度策略(SCHED_FIFO),并设置 CPU pin 与 IRQ affinity。

总结

  • PREEMPT_RT 和 Xenomai 是 Linux 实时扩展的两条成熟路径;
  • 前者易用可维护,后者延迟极低、适合高精度实时应用;
  • 构建过程现代化,已在 Yocto、Buildroot 中广泛支持;
  • 选择应根据系统时延、代码兼容性与后期维护成本综合评估。
http://www.xdnf.cn/news/15073.html

相关文章:

  • python+django/flask基于微信小程序的农产品管理与销售APP系统
  • 数据仓库:企业数据管理的核心枢纽
  • 20250710解决KickPi的K7的SDK编译异常:rk3576-android14.0-25250704.tar.gz【降低BUILD_JOBS】
  • OrCAD 24.1补丁005中文界面切换指南
  • RT-Thread 的 SCons 构建系统的语法、常用用法,并举例说明如何编写典型的 `Kconfig` 和 `SConscript` 文件
  • 解析几何几百年重大错误:将无穷多各异圆盘(球)误为同一点集
  • PyTorch Tensor 的创建与操作入门
  • TCP-与-UDP-协议详解:原理、区别与应用场景全解析
  • 使用SpringAOP自定义权限控制注解
  • UE5 Rotate 3 Axis In One Material
  • Android Studio 打 release 包 Algorithm HmacPBESHA256 not available 问题解决
  • Vue 中监测路由变化时,通常不需要开启深度监听(deep: true)
  • Linux中rw-rw-r--相关的访问权限讲解
  • android TabLayout 标题栏切换 事件拦截
  • 达梦数据库不兼容 SQL_NO_CACHE 报错解决方案
  • 三、神经网络——网络优化方法
  • Ansible:强大的自动部署工具
  • 线上事故处理记录
  • STM32单片机_3
  • Linux驱动开发(platform 设备驱动)
  • RV1126平台(Buildroot Linux)+ SunplusIT SPCA2688 USB摄像头 RTSP推流全流程复盘与问题解决记录
  • 对象序列化与反序列化
  • 快速将照片从三星手机传输到电脑
  • 节点小宝:手机图片备份至电脑功能实测体验
  • linux系统---ISCSI存储服务
  • GitHub信息收集
  • Flutter跨平台开发全解析
  • 从Rust模块化探索到DLB 2.0实践|得物技术
  • Spring Boot 企业级动态权限全栈深度解决方案,设计思路,代码分析
  • 深度学习与图像处理案例 │ 基于深度学习的自动驾驶小车