xenomai内核解析之xenomai的组成结构

@html

这是第二篇笔记。linux

1、xenomai 3

从xenomai3开始支持两种方式构建linux实时系统,分别是cobaltmercury网络

  • cobalt :添加一个实时核,双核结构,具备实时内核cobalt、实时驱动模型RTDM、实时应用POSIX接口库libcobalt,基于libcobalt的其余API skins,如Alchemy APIVxWorks® emulatorpSOS® emulator等。

  • mercury :基于直接修改linux内核源代码的PREEMPT RT,应用空间在glibc之上,添加xenomai API库,以下图所示。在不支持cobalt内核时,可以使用该方法运行xenomai应用;固然,也可不须要PREEMPT RT,那么实时性就……

2、xenomai3 结构

mercury只是在glibc上加了一层皮,不是接下来研究的对象。咱们看cobalt ,从底层硬件驱动、内核空间到用户空间,保证了实时任务的实时性。其总体结构如图所示。架构

在内核空间,在标准linux基础上添加一个实时内核Cobalt,得益于基于ADEOS(Adaptive Domain Environment for Operating System),使Cobalt在内核空间与linux内核并存,并把标准的Linux内核做为实时内核中的一个idle进程在实时内核上调度。框架

ADEOS (Adaptive Domain Environment for Operating System),提供了一个灵活的环境,能够在多个操做系统之间或单个OS的多个实例之间共享硬件资源,从而使多个优先级域能够同时存在于同一硬件上。早期在xenomai 2上使用。dom

2005年6月17日,Philippe Gerum发布用于Linux内核的I-pipe,I-pipe基于ADEOS,可是I-pipe更精简,而且只处理中断,xenomai3使用I-pipe。socket

ADEOS ,其核心思想是Domain,也就是范围的意思,linux内核有linux内核的范围,cobalt内核有cobalt内核的范围。两个内核管理各自范围内的应用、驱动、中断;两个domain之间有优先级之分,cobalt内核优先级高于linux内核;I-pipe优先处理高优先级域的中断,来保证高优先级域的实时性。此外,高优先级域能够经过I-pipe 向低优先级域发送各种事件等。性能

在用户空间,添加针对实时应用优化的库--libcobalt,libcobalt提供POSIX接口给应用空间实时任务使用,应用经过libcobalt让实时内核cobalt提供服务。优化

驱动方面,xenomai提供实时驱动框架模型RTDM(Real-Time Driver Model),专门用于Cobalt,基于RTDM进行实时设备驱动开发,为实时应用提供实时驱动。RTDM将驱动分为2类:操作系统

•字符设备(open/close, read, write, ioctl),如UART,UDD,SPI,Memory,……

•协议设备(socket, bind, send, recv, etc),如UDP/TCP,CAN,IPC,……

中断方面,I-Pipe(interrupt Pipeline)分发Linux和Xenomai之间的中断,并以Domain优先级顺序传递中断。I-Pipe传递中断以下图所示,对于实时内核注册的中断,会直接获得处理。对于linux的中断,先将中断记录在i-log,等实时任务让出CPU后,linux获得运行,该中断才获得处理。

实时内核cobalt与非实时内核linux相结合,既能提供工业级RTOS的硬实时性能,又能利用linux操做系统很是出色的网络和图形界面服务,在产品的开发周期和成本控制方面都有巨大优点 。

解析系统调用是了解内核架构最有力的一把钥匙,后续文章会以xenomai POSIX接口(libcobalt )为入口,解析xenomai内核。

参考连接:

ADEOS

Adaptive Domain Environment for Operating Systems

ELC-2018-Xenomai

Xenomai 3 – An Overview of the Real-Time Framework for Linux

Real-Time Linux Testbench on Raspberry Pi 3 using Xenomai

相关文章
相关标签/搜索