【原创】xenomai内核解析之嵌入式实时linux概述
版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/
上篇文章【原创】linux为什么不是实时操作系统我们简单介绍了Linux为什么不实时,本文介绍常用的Linux实时方案有哪些。
Linux系统作为一个GPOS(通用操作系统)发展至今已经非常成熟可靠了,并且由于遵循GPL协议,开放所有系统源代码,非常易于裁剪。更重要的是,与其他开源的GPOS或RTOS相比,Linux系统支持多种处理器、开发板,提供多种软件开发工具,同时Linux系统对网络和图形界面的支持非常出色。显然,选择Linux操作系统在产品的开发周期和成本控制方面都有巨大优势。
虽然Linux系统功能强大、实用性强、易于软件的二次开发,并且提供编程人员熟悉的标准API。但是由于Linux系统一开始就被设计成GPOS(通用操作系统),它的目的是构建一个完整、稳定的开源操作系统,尽量缩短系统的平均响应时间,提高吞吐量,注重操作系统的整体功能需求,达到更好地平均性能。所以标准Linux并不提供硬实时性。
为解决linux不具有硬实时的问题,诞生了几种基于Linux的硬实时解决方案,分为三类:
方案一:直接修改现有Linux代码
1)直接修改Linux内核源代码。对Linux内核代码进行细微修改并不对内核作大规模的变动,在遵循GPL协议的情况下,直接修改内核源代码将Linux改造成一个完全可抢占的实时系统。其缺点是:通过修改Linux内核,难以保证实时进程的执行不会遭到非实时进程所进行的不可预测活动的干扰。该方法的代表是RT-patch(Real Preemption Patch)。
修改现有内核部分机制达到实时,也就是我们说的PREEMPT-RT,起源于2004年,随着主线内核发展,为主线内核贡献了很多特性。
由于需要修改现有Linux的很多机制来提供实时,基本上涉及内核中的每个文件,所以代码修改量巨大,早期PREEMPT-RT发展缓慢,但随着时间的推移,目前PREEMPT-RT已成为Linux实时增强的标准。它被广泛使用在各行各业:电信,工业自动化,专业音频,医疗设备,数据采集,汽车等。
方案二:双内核
2)双内核法。添加一个实时内核,在内核空间与linux内核并存,把标准的Linux内核作为一个普通进程在实时内核上调度,与直接修改Linux内核相比,重写一个实时调度核是相对容易的,所以双内核法发展历史较早,至今超过20年的历史。其优点是可以做到硬实时,并且能很方便地实现一种新的调度策略。常用的双内核法有RT-Linux、RTAI(Real-Time Application Interface)和 Xenomai。
RT-Linux最早出现,开创了双核法的先河,是双核法的代表。基于一种成为实时硬件抽象的层技术RTHAL(Real Time Hardware Abstraction Layer),且为该技术申请了专利,后RT-Linux被WindRiver 收购并商业化,WindRiver于2011年8月彻底停止对其更新和维护,现在 RT-linux 已经不再更新。
双内核方案发展历史如下:
- 1991年9月17日 Linux 发布。
- RTLinux诞生于美国新墨西哥州立大学数据挖掘技术学院,RTLinux通过硬件和操作系统间的中断控制来支持硬实时(确定性)操作。进行确定性处理所需要的中断由实时核心加工,其他中断被送往非实时操作系统。操作系统运行为低优先级线程。先进先出管道(FIFOs)或共享内存可以被用来在操作系统和实时核心之间共享数据。
- RTLinux 方法(以及相关专利的主要思想)是将硬件置于一个小型的硬实时系统的控制之下,而将整个 Linux 作为实时系统下的一个低优先级的任务运行。RT-Linux只允许以内核模块的形式提供实时应用;
- 2000年,Karim发表了一篇名为《操作系统的自适应域环境》的论文(Adeos的基础),提出了一种基于管道处理中断的思路。
- 2001年8月2日,Philippe Gerum邮件发公告开始一个新自由软件项目 (GPL) XENODAPTOR。背后的主要动机显然是帮助依赖专有商业 RTOS 的应用程序设计人员尽可能顺利地迁移到基于 Linux 的硬实时扩展。基于RTAI和Rtlinux。
- 2002年6月6日 Philippe Gerum发布基于Linux 2.4.18的第一个ADEOS补丁几个月后,ADEOS补丁被RTAI项目采用,RTAI 来源自意大利米兰大学。
- 2003年XENODAPTOR和RTAI项目合并推出了RTAI/fusion。RTAI/fusion是Linux平台上的具有工业生产级别的实时自由软件开发平台,它基于Xenomai的抽象实时操作系统内核。
- 所以2005年的时候RTAI/fusion项目又从RTAI中独立出来作为Xenomai 2.0项目单独发展。虽然xenomai和RTAL这两个项目基于同一本质的实时硬件抽象层技术ADEOS(Adoptive Domain Environment for Operating System),但是实际上他们有很多不同之处。这些不同之处主要是由他们不同的目标和各自不同的实现方式造成的。RTAI项目致力于技术上可行的最低延迟;Xenomai除实时性之外还很看重扩展性,可移植性以及可维护性。Xenoami项目不仅提供双核还对PREEMPT RT实时抢占补丁提供支持,这又是与RTAI项目的一个显著的不同。
- 2015年 Xenomai 3.0发布,支持Cobalt和mercury两种方式的构建xenomai实时应用。
- 2016年xenomai社区开发dovetail以替代难以维护的ipipe,同时诞生了现今xenomai4的实时内核evl的雏形。
几种linux实时方案对比如下表--Linux实时性改造优缺点对比。
性能 | 直接修改内核 | 直接修改内核 | 双内核 | 双内核 | 双内核 |
---|---|---|---|---|---|
RT-patch | 其他 | RT-Linux | RTAI | xenomai | |
实时性 | 好 | 差 | 好 | 较好 | 较好 |
硬件支持 | 较好 | 好 | 一般 | 一般 | 较好 |
API | 丰富 | 一般 | 一般 | 一般 | 丰富 |
维护难度 | 易 | 易 | 难 | 难 | 难 |
社区活跃度 | 较好 | 差 | 较差 | 一般 | 良好 |
用户态实时任务 | 支持 | 支持 | 不支持 | 支持 | 支持 |
内核实时任务 | 支持 | 不支持 | 支持 | 支持 | 支持 |
非实时任务吞吐量 | 较差 | - | 良好 | 良好 | 良好 |
极限优化下WCET | 30us | - | - | 5us | user 5us,kernel 3us |
综上,从硬件支持、社区活跃度、API和商业版权等方面综合考虑,preempt-RT是最优选择,在此基础上一些对实时性要求更高的场合(实时性要求与具体应用场景强相关,如运动控制、数控系统、硬件在环仿真等)xenomai无疑是基于Linux实时操作系统的唯一选择,如果WCET要求3us以下,若无CPU特殊支持,基本已经达到支持linux的硬件极限,只能通过fpga等辅助硬件做专用确定性逻辑来offload实时部分实现。
方案三:多核异构+实时虚拟化
AMP CPU上,一个或多个核跑linux,其他核跑裸机或RTOS,操作系统调度层面完全隔离。
SMP CPU通过虚拟化实现,本博客有关实时虚拟化介绍
参考:
刘剑, 仲宇, 王琦. 嵌入式Linux实时性改造技术综述[J]. 航天控制, 2018, 36(2): 93-97.