第一部分 引導概要
目錄
-
硬件支持
xenomai支持大量硬件,鏈接:https://gitlab.denx.de/Xenomai/xenomai/-/wikis/Supported_Hardware
該鏈接分爲兩大類:支持的CPU架構和已經停產的CPU架構,毫無疑問我們本次所要移植的是X86架構:
支持從帶有TSC的i586 cpu開始的所有兼容x86的32/64位處理器類型。即當從CPU獲得本地APIC時,可以實現較低的延遲。
拓展:linux中時鐘分爲3中:
- Real Time Clock (RTC)
位於CMOS中的,其頻率範圍是2HZ--8192HZ
2.Programable Interval Timer (PIT)
主要由8254時鐘芯片實現的
3.Time Stamp Counter (TSC)
位於CPU裏面的一個64位的TSC寄存器。每個CPU時鐘週期其值加一
RTC是PC主板上的晶振及相關電路組成的時鐘電路的生成脈衝,RTC經過8254電路的頻產生一個頻率較低一點的OS(系統)時鐘TSC,系統時鐘每一個cpu週期加一,每次系統時鐘在系統初起時通過RTC初始化。8254本身工作也需要有自己的驅動時鐘(PIT),可以參考一些單片機方面的書籍。
確保您在內核配置中選擇的處理器類型實際上與您的CPU匹配。如果您在x86板上運行enomai時出現奇怪的延遲,請務必檢查此鏈接即故障指南,即x86系統的xenomai編譯menuconfig配置內容,該內容在第二部分有具體描述
https://gitlab.denx.de/Xenomai/xenomai/-/wikis/Configuring_For_X86_Based_Dual_Kernels
這裏需要用特別提醒的是:很多人不在乎硬件條件,可能直接跳過該部分,我需要提醒大家,這一節最重要,直接決定你能不能移植Xenomai:官方推薦硬件
①CPU處理器:Intel/AMD Processor i5/i7,低端處理器就不要嘗試了,就算移植成功了也是不穩定的。
②網卡型號:使用e1000e/e1000/r8169驅動類型的網卡,官方推薦
o Intel PRO/1000 GT
o Buffalo LGY-PCI-GT (8169S)
o Corega CG-LAPCIGT (8169S)
o D-Link DGE-528T (8169S)
o Gigabyte 7N400 Pro2 Integrated Gigabit Ethernet (8110S)
o LevelOne GNC-0105T (8169S)
o Linksys EG1032v3 (8169S)
o Netgear GA511 PC Card (8169)
o PLANEX COMMUNICATIONS Inc. GN-1200TC (8169S)
o Surecom EP-320G-TX1 (8169S)
o US Robotics USR997902 (8169S)
o Xterasys XN-152 10/100/1000 NIC (8169)
③如果你有其他需求如GPIO/CAN,推薦硬件建議先查看menuconfig選型中Xenomai/cobalt--->drivers--->xxxx是否支持
-
Xenomai實現實時內核原理
有兩種選擇: Cobalt / Mercury
第一種通過爲Linux補充一個與之並行運行的實時內核。這個名爲Cobalt的小擴展內置在Linux內核中,可以處理所有對時間要求嚴格的活動,比如處理中斷和調度實時線程。Cobalt核比linux Kernel具有更高的優先級。
在這種雙內核(dual kernel)配置中,Xenomai的所有RTOS api都提供了與Cobalt內核的接口,只有這些APls被認爲具有實時能力,包括Xenomai(別名libcobalt)實現的POSIX 1003.1c服務的子集。
拓展:Cobalt是對xenomai2架構的衍生補充
1.xenomai 3 雙內核配置
該技術基於一個內核補丁,該補丁引入了一種機制,用於將所有關鍵事件轉移到一個雙內核擴展,並耦合到主機Linux內核。這個被稱爲中斷管道(l-Pipe)的機制
第二種 通過依託本地Linux內核的實時功能,形成Mercury內核。通常,應用程序需要在目標內核中啓用PREEMPT-RT擴展,以便交付實時服務。
補充:PREEMPT-RT補丁 此時linux kernel已經是一個實時內核了
在這個單一的內核配置中,Xenomai提供的所有非posix RTOS api都是通過本機線程庫(最好是NPTL,但也支持用於遺留設置的linux threads)進行精確模擬的。
Xenomai 3支持單內核和雙內核配置。已經停止維護的Xenomai 2架構只支持雙內核配置。
總結:Xenomai 3.x,Xenomai RTOS模擬系統的架構,它能夠無縫運行如一個雙內核(基於I-pipe技術的Xenomai 2.x),或者完全在Linux內核之上(啓用PREEMPT-RT)
-
關鍵調研
1.單內核與雙內核選擇
假設您知道目標SoC和與實時保證相關的應用程序需求,您應該定義哪種單一或雙內核配置最適合您的需要。以下提示可能會有所幫助:
1. 您的應用程序實際上有實時需求嗎?它們有多嚴格?
如果要將應用程序從嵌入式RTOS遷移到基於Linux的平臺?請考慮:
因爲與傳統的RTOS不同,Linux將嵌入式和實時特性視爲正交問題。一些遷移的應用程序甚至可以只在常規內核和標準搶佔(CONFIG PREEMPT)上模擬原始RTOS API。那麼推薦單一內核配置的Xenomai 3。
對於嚴格的實時需求,您應該考慮目標SoC體系結構和Linux內核版本的硬實時支持的可用性。
這些雙重內核的優點對您的情況是否至關重要?
o將鈷鈷共核移植到一個新的架構中是相當簡單的。
o它與主流Linux內核的開發週期解耦,因此可以更自由地選擇所需的(或必需的)內核版本
o它可以簡化最壞情況的分析,並保持結果在主線Linux內核的更新週期有效。
o它可微調非實時部分的產量,而不會對實時工作造成負面影響。它不需要對常規的Linux系統進行任何調優,以保證實時作業的短延遲和有限延遲。
這些單個內核的優點是否對您的情況至關重要?
o實時應用程序無需更改就可以重用備用內核驅動程序(前提是它們不會因爲不恰當的實現而造成延遲問題)。另一方面,驅動程序需要專門實現在雙重內核配置上運行,即在內核內RTDM接口上運行
o編程模型可能比使用雙內核配置更簡單,因爲內核被認爲是在全局執行實時行爲。也就是說,不管底層的實時技術如何,謹慎的應用程序設計和實現必須是一個通用規則,因爲並非所有可用的服務都適合實時使用。
o所有用以監察系統運作的標準工具,均可即時報告系統的運作情況。另一方面,雙內核系統必須專門爲此目的調整這些工具。
2.是否需要將非POSIX實時API全部更換爲POSIX實時內核
不建議,兩者可能存在差異,一旦移植某些功能可能無法實現,
-
故障指南
https://gitlab.denx.de/Xenomai/xenomai/-/wikis/Troubleshooting