Xenomai最开始的理念就是提供一套方案来解决传统的实时API在Linux上的移植问题。目前已经支持了多平台和对多个OS的对应。
目前的版本是Xenomai2,主要是实现了用户态下的实时支持。
包括POSIX 1003.1b和原生Xenomai skin的支持以及内核下的RTDM(实时驱动模块的支持)
这里要介绍的是Xenomai3,由于PREEMPT_RT的广泛使用和大量的现存的实时实现移植到Linux上,
Xenomai3实现了这样一套机制,一方面支持已有的双核方案(即现有的Xenomai实现),另一方面支持Linux 自身的PREEMPT_RT.
就是用户可以选择使用上面的任何一套方案而不用去修改自己的实现。
在PREEMPT_RT的情况下,Xenomai仅仅是对实时API的模拟,而不去实现底层的Adeos ipipe。
最关键的一点:Xenomai3不支持内核空间的skin API,就是说你只能在用户态下运行实时程序。
这样有几个好处:比较容易回避GPL协议,可以用gdb进行调试和内存保护。
当然,性能方面比内核空间要差一点,但是很有限,任务切换的时间仅仅差了3-20微秒(在最坏的情况下)。
另外,Xenomai2也会做为一个长期项目继续下去,想在内核空间移植App也没有什么问题。