Ubuntu16.04 Xenomai3.x 系列移植筆記-----引導概要

第一部分 引導概要

目錄

硬件支持

Xenomai實現實時內核原理

關鍵調研

  1.單內核與雙內核選擇

  2.是否需要非POSIX實時API

故障指南

  • 硬件支持

xenomai支持大量硬件,鏈接:https://gitlab.denx.de/Xenomai/xenomai/-/wikis/Supported_Hardware

該鏈接分爲兩大類:支持的CPU架構和已經停產的CPU架構,毫無疑問我們本次所要移植的是X86架構:

支持從帶有TSC的i586 cpu開始的所有兼容x86的32/64位處理器類型。即當從CPU獲得本地APIC時,可以實現較低的延遲。

拓展:linux中時鐘分爲3中:

  1. 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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章