版權聲明:本文為本文為博主原創文章,轉載請注明出處。如有問題,歡迎指正。博客地址:https://www.cnblogs.com/wsg1100/
@
這是第二篇筆記。
一、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進程在實時內核上調度。
2000年,Karim發表了一篇名為《操作系統的自適應域環境》的論文(即Adeos,Adaptive Domain Environment of Operating System),該論文描述了一種簡單而智能的方案,用於在同一系統上運行的多個內核之間共享公共硬件資源。他通過“pipeline”抽象來說明在x86硬件上共享中斷的基本機制,根據整個系統給定的優先級,依次向每個內核傳入中斷。他倡導一種對硬件中斷進行優先級排序的新方法,以便可以開發基於Linux內核的實時擴展,而無需使用當時已被某些專有RTOS供應商申請授予專利方法,指的就是WindRiver和RT-linux使用的RTHAL技術。
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