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

相關文章
相關標籤/搜索