摘要:談到物聯網,最大的問題之一就在於溝通,不同設備、不同標准之間的溝通、軟件與硬件的溝通。如何解決這種 “溝通”問題,操作系統變得尤為重要。
提到操作系統,第一時間我們就會想到運行在電腦上的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會有哪些新特性?