天天看點

在openEuler社群開源的Embedded SIG,來聊聊它的多 OS 混合部署架構

背景:混合關鍵性系統

在嵌入式場景中,雖然 Linux 已經得到了廣泛應用,但并不能覆寫所有需求,例如高實時、高可靠、高安全的場合。這些場合往往是實時作業系統的用武之地。有些應用場景需要 Linux 的管理能力、豐富的生态又需要實時作業系統的高實時、高可靠、高安全,那麼一種典型的設計是采用一顆性能較強的處理器運作 Linux 負責富功能,一顆微控制器 / DSP / 實時處理器運作實時作業系統負責實時控制或者信号處理,兩者之間通過 I/O、網絡或片外總線的形式通信。這種方式存在的問題是,硬體上需要兩套系統、內建度不高,通信受限與片外實體機制的限制如速度、時延等,軟體上 Linux 和實時作業系統兩者之間是割裂的,在靈活性上、可維護性上存在改進空間。

受益于硬體技術的快速發展,嵌入式系統的硬體能力越來越強大,如單核能力不斷提升、單核到多核、異構多核乃至衆核的演進,虛拟化技術和可信執行環境(TEE)技術的發展和應用,未來先進封裝技術會帶來更高的內建度等等,使得在一個片上系統中(SoC)部署多個 OS 具備了堅實的實體基礎。

同時,受應用需求的推動,如物聯網化、智能化、功能安全與資訊安全等等,整個嵌入式軟體系統也越發複雜,全部由單一 OS 承載所有功能所面臨的挑戰越來越大。解決方式之一就是不同系統負責各自所擅長的功能,如 Windows 的 UI、Linux 的網絡通信與管理、實時作業系統的高實時與高可靠等,而且還要易于開發、部署、擴充,實作的形式可以是容器、虛拟化等。

面對上述硬體和應用的變化,結合自身原有的特點,嵌入式系統未來演進的方向之一就是 「混合關鍵性系統(MCS,Mixed Criticality System)」 , 這可以從典型的嵌入式系統 —— 汽車電子的最近發展趨勢略見一斑。

「圖 1」openEuler Embedded 中的混合關鍵性系統大緻架構

在openEuler社群開源的Embedded SIG,來聊聊它的多 OS 混合部署架構

從 openEuler Embedded 的角度,混合關鍵性系統的大緻架構如圖 1 所示,所面向的硬體是具有同構或異構多核的片上系統,從應用的角度看會同時部署多個 OS / 運作時,例如 Linux 負責系統管理與服務、1 個實時作業系統負責實時控制、1 個實時作業系統負責系統可靠、1 個裸金屬運作時運作專用算法,全系統的功能是由各個 OS / 運作時協同完成。中間的「混合部署架構」和「嵌入式虛拟化」是具體的支撐技術。關鍵性(Criticality)狹義上主要是指功能安全等級,參考泛功能安全标準 IEC-61508,Linux 可以達到 SIL1 或 SIL2 級别,實時作業系統可以達到最高等級 SIL3;廣義上,關鍵性可以擴充至實時等級、功耗等級、資訊安全等級等目标。

在這樣的系統中,需要解決如下幾個問題:

  • 「高效地混合部署問題」:如何高效地實作多 OS 協同開發、內建建構、獨立部署、獨立更新。
  • 「高效地通信與協作問題」:系統的整體功能由各個域協同完成,是以如何高效地實作不同域之間高效、可擴充、實時、安全的通信。
  • 「高效地隔離與保護問題」:如何高效地實作多個域之間的強隔離與保護,使得出故障時彼此不互相影響,以及較小的可信基(Trust ComputeBase)。
  • 「高效地資源共享與排程問題」:如何在滿足不同目标限制下(實時、功能安全、性能、功耗),高效地管理排程資源,進而提升硬體資源使用率。

對于上述問題,openEuler Embedded 的目前思路是 「混合關鍵性系統 = 部署 + 隔離 + 排程」 ,即首先實作多 OS 的混合部署,再實作多 OS 之間的隔離與保護,最後通過混合關鍵性排程提升資源使用率,具體可以映射到 「混合部署架構」 和 「嵌入式虛拟化」 。混合部署架構解決 「高效地混合部署問題」 和 「高效地通信與協作問題」 ,嵌入式虛拟化解決 「高效地隔離與保護問題」 和 「高效地資源共享與排程問題」 。

多 OS 混合部署架構

openEuler Embedded 中多 OS 混合部署架構的架構圖如下所示,引入了

開源架構 OpenAMP [1]

作為基礎,并結合自身需要進一步創新。

「圖 2」多 OS 混合部署架構的基礎架構

在openEuler社群開源的Embedded SIG,來聊聊它的多 OS 混合部署架構

在上述架構中,libmetal 提供屏蔽了不同系統實作的細節提供了統一的抽象,virtio queue 相當于網絡協定中的 MAC 層提供高效的底層通信機制,rpmsg 相當于網絡協定中的傳輸層提供了基于端點(endpoint)與通道 (channel)抽象的通信機制,remoteproc 提供生命周期管理功能包括初始化、啟動、暫停、結束等。

在 openEuler Embedded 22.03 中,內建了 OpenAMP 相關支援,并與 openEuler 的

SIG Zephyr [2]

合作實作了 openEuler Embedded 與實時作業系統

Zephyr [3]

在 QEMU 平台上的混合部署,具體可以參考

多 OS 混合部署 Demo [4]

在此基礎上,openEuler Embedded 的混合部署架構還會繼續演進,包括對接更多的實時作業系統,如國産開源實時作業系統

RT-Thread [5]

,實作如圖 3 所示的多 OS 服務化部署并适時引入基于虛拟化技術的嵌入式彈性底座。

「圖 3」 多 OS 服務化部署架構

在openEuler社群開源的Embedded SIG,來聊聊它的多 OS 混合部署架構

在上述多 OS 服務化部署架構中,openEuler Embedded 是中心,主要對其他 OS 提供管理、網絡、檔案系統等通用服務,其他 OS 可以專注于其所擅長的領域,并通過 shell、log 和 debug 等通道與 Linux 豐富而強大維測體對接進而簡化開發工作。

---

Embedded 已經在

openEuler社群

開源。将開展一系列主題分享,如果您對 Embedded 的建構,應用感興趣,歡迎圍觀和加入。

引用

繼續閱讀