xenomai內核解析之xenomai的組成結構
@
這是第二篇筆記。
一、xenomai 3
從xenomai3開始支援兩種方式構建linux實時系統,分別是cobalt 和 mercury。
- cobalt :添加一個實時核,雙核結構,具有實時內核cobalt、實時驅動模型RTDM、實時應用POSIX介面庫libcobalt,基於libcobalt的其他API skins,如Alchemy API、VxWorks® emulator、pSOS® emulator等。
- mercury :基於直接修改linux內核源程式碼的PREEMPT RT,應用空間在glibc之上,添加xenomai API庫,如下圖所示。在不支援cobalt內核時,可使用該方法運行xenomai應用;當然,也可不需要PREEMPT RT,那麼實時性就……
二、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上使用。
2005年6月17日,Philippe Gerum發布用於Linux內核的I-pipe,I-pipe基於ADEOS,但是I-pipe更精簡,並且只處理中斷,xenomai3使用I-pipe。
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內核。
參考鏈接:
Adaptive Domain Environment for Operating Systems
Xenomai 3 – An Overview of the Real-Time Framework for Linux
Real-Time Linux Testbench on Raspberry Pi 3 using Xenomai