@html
這是第二篇筆記。linux
從xenomai3開始支持兩種方式構建linux實時系統,分別是cobalt 和 mercury。網絡
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內核。
參考連接:
Adaptive Domain Environment for Operating Systems
Xenomai 3 – An Overview of the Real-Time Framework for Linux