如何讓“啞”終端進化,你知道嗎?

華為雲開發者社群發表於2020-08-13
摘要:談到物聯網,最大的問題之一就在於溝通,不同裝置、不同標準之間的溝通、軟體與硬體的溝通。如何解決這種 “溝通”問題,作業系統變得尤為重要。

提到作業系統,第一時間我們就會想到執行在電腦上的Windows,想起執行在手機上的安卓。這些系統直接執行在“裸機”裝置的最低層,搭建起其他軟體、應用執行的環境與基礎。作業系統的興起、完善,促成了軟體與應用的興起,鑄就了輝煌的PC時代與移動網際網路時代。

談到物聯網,最大的問題之一就在於溝通,不同裝置、不同標準之間的溝通、軟體與硬體的溝通。如何解決這種 “溝通”問題,作業系統變得尤為重要。物聯網作業系統排程“物體”本身,對“物體”的排程過程通過層層分發、層層下達,通過排程雲、邊、端,不同層級中不同裝置的計算資源而實現。因此,物聯網中的作業系統涉及到晶片層、終端層、邊緣層、雲端層等多個層面

當前很多物聯網裝置已經從傳統意義上的“啞”裝置成功轉型為智慧化裝置。那麼一個裝置從“啞”到智慧化,必須面對兩個問題:資源管理、裝置的互聯互通。而在這物聯網作業系統百家爭鳴,百花齊放的時代,華為LiteOS物聯網作業系統要如何破浪前進?

LiteOS資源管理:麻雀雖小,五臟俱全

說到物聯網作業系統,不得不提物聯網的核心,一個核心要具備尺寸伸縮性強、實時性必須足夠強、架構可擴充套件性強、足夠安全和可靠、低功耗節能省電等優良特質。比如,一個極端的情況下,核心尺寸必須維持在10K以內,以支撐記憶體和CPU效能都很受限的感測器。這要求核心需具備完善的任務排程、記憶體管理、本地儲存、複雜的網路協議等功能,以滿足高配置的智慧物聯網終端的要求。

LiteOS核心的資源管理,可分為四個部分:時間管理、儲存管理、硬體管理、同步通訊資源。在LiteOS的最底層,實現的是對各類硬體的一個總體抽象,這主要是解決LiteOS和CPU體系的耦合。對於作業系統核心而言,和CPU的耦合主要在於任務的排程、異常的處理等,這和每個CPU體系架構強相關。LiteOS的任務排程,正是基於CPU架構而非單個特定的CPU,目前已經支援ARMV6M、ARMV7M、RISIC-V等,這就意味著,LiteOS可以在不同的MCU廠商的產品上做到無縫移植,降低裝置廠商切換硬體的難度。

一般的記憶體管理都是採用的雙連結串列模式,按需分配。那麼這個時候就會帶來一個問題,如何管理這個雙向連結串列呢?普通的雙向連結串列,對查詢比較麻煩,有序的雙向連結串列,對排序的時間存在不確定性,這會給開發者帶來困擾。為了降低開發者對時間搜尋的不確定性,LiteOS採用了TLSF以及基於紅黑樹的二叉搜尋樹,這兩個方法將會大大的降低我們搜尋的複雜度。當記憶體經過多次的申請和釋放之後,組織空閒記憶體的線性連結串列可能很長,在這種情況下如果去搜尋一個匹配的記憶體可能很費勁,因為你不知道最合適的記憶體在什麼位置(有可能在連結串列尾部)。而採用TLSF的方式,通過計算MAP的位置,可以一次命中,這樣就讓開發者查詢一塊空閒的記憶體時間變得更加確定。

同時,LiteOS的中斷管理、驅動等功能,還給傳統裸機開發者帶來更好的開發體驗。例如中斷管理,我們知道在MCU上,串列埠的數量比較多,每個串列埠都可能分配一箇中斷號,如果是裸機開發者,就不得不寫很多中斷服務函式掛載到中斷表中。而LiteOS的中斷管理,開發者可以通過採用註冊的方式,傳遞相同的服務函式,只需引數不同即可,這就意味著開發者可以實現串列埠中斷函式的最大複用,同樣的道理,還可以應用到驅動程式中。

LiteOS互聯互通:有趣的靈魂萬里挑一,做開發者鍾愛的皮囊——提供快速整合和統一的協議

LiteOS的資源管理,是為滿足開發者對資源管理的訴求,解決物聯網硬體上的碎片化而生。就拿TCPIP通訊來說,實現方式就千奇百怪,有使用蜂窩模組自帶的SOCKET、有使用PPP撥號、有使用WIIF模組、有使用LWIP這樣的軟體協議棧的。不是說這樣不好,畢竟它們都是有趣的靈魂;但是對於開發者而言,會帶來一個問題——為了保證相容性,他們不得不基於TCPIP進行開發,從而導致程式碼出現各種各樣的巨集開關,到最後這種程式碼幾乎沒有辦法維護。

為了解決開發者委曲求全的適配各種方式帶來毀滅性的維護問題,LiteOS提出元件功能標準化。不論你是WIFI模組還是LTE模組,還是其他的軟體棧,只要採用統一的標準API之後,各種各樣形態的元件,就像是選單上的一個選項,只需要打勾選擇想要即可。LiteOS作業系統從核心到網際網路協議的抽象層框架,構建統一的API標準。基於這個標準,開發者可以快速將協議或者其他元件插入到框架,幫助開發者複用已有能力,也加快了整合的效率。

LiteOS一鍵上雲:採用積木式的元件和組裝模式,更靈活輕便

在華為雲IoT的雲管端戰略中,LiteOS承擔著雲服務落地的關鍵角色,因此如何更好的、更合理的引導終端裝置快速的上雲是LiteOS的主要目標。整體看,LiteOS可以分作兩部分:

  • LiteOS的核心,這部分主要是用來管理端側資源,讓端側裝置更好、更方便的使用端側的各種硬體資源;
  • LiteOS的互聯互通性,將雲服務做到協議無關性,更方便的在各種傳統裝置上整合。

原則上,LiteOS的各個模組在開發設計過程中,可以做到模組解耦、可裁剪、可配置。從這可以看出LiteOS在開發整體上,可以說是屬於 “積木型開發”,開發者像搭建積木一樣簡單來使用,可以按照自己的實際應用場景,選擇不同的解決方案,從而解決物聯網碎片化的問題。

但用原始的小積木搭建一個滿意的作品,也要有設計的一個過程,包括選擇何種協議,使用哪個元件。事實上,物聯網裝置存在一個“老大難”的問題——儲存資源、計算資源有限。例如,TLS除了要佔用大幾十KB的ROM和RAM以外,還非常消耗我們的計算資源;在一個200M主頻的MCU在ECHDA模式下,握手協議過程都需要接近10秒鐘,對於那些低速裝置可能會更長。

在這種情況下,如果告訴你,有個模組,通過簡單的AT指令就可以直接和華為雲IoT互通,你會不會很驚喜呢?華為LiteOS將互聯互通功能整合到了模組內部,豐富自運算資源、儲存資源。裝置廠家通過簡單的AT指令就可以呼叫LiteOS的互聯API,省卻了移植、配置等煩惱,再也不用考慮和雲對接的底層流程和詳細細節。

關於LiteOS也許你還好奇

Linux系統作為目前物聯網裝置中應用最廣泛的作業系統,LiteOS與Linux有什麼區別?

和其他物聯網作業系統對比,我們LiteOS的靠譜(優勢)在哪裡呢?

採用華為LiteOS系統和用其他系統接入華為雲loT平臺是否有區別?

未來,LiteOS會有哪些新特性?

看視訊瞭解更多

 

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章