【導讀】物聯(lián)網(wǎng)操作系統是新一代信息技術(shù)的重要組成部分。其英文名稱(chēng)是IOT(Internet Of Things)。由此,顧名思義,“物聯(lián)網(wǎng)就是物物相連的互聯(lián)網(wǎng)”。下一代的基礎通信網(wǎng)絡(luò ),包括未來(lái)的5G,通信網(wǎng)絡(luò )架構重構等,為物聯(lián)網(wǎng)提供泛連接網(wǎng)絡(luò )是核心目標。目前也已經(jīng)有很多廠(chǎng)商推出解決方案,比如Google的thread/wave,華為的Hi-Link,以及NB-IoT等。
1. 物聯(lián)網(wǎng)的主要特點(diǎn)
i. 連接
所謂連接,指的是各種各樣的終端設備,都能夠通過(guò)某種網(wǎng)絡(luò )技術(shù),連接到一個(gè)統一的網(wǎng)絡(luò )上。任何終端之間都可以相互訪(fǎng)問(wèn)。下一代的基礎通信網(wǎng)絡(luò ),包括未來(lái)的5G,通信網(wǎng)絡(luò )架構重構等,為物聯(lián)網(wǎng)提供泛連接網(wǎng)絡(luò )是核心目標。目前也已經(jīng)有很多廠(chǎng)商推出解決方案,比如Google的thread/wave,華為的Hi-Link,以及NB-IoT等。
傳統的物聯(lián)網(wǎng)連接,都是指物聯(lián)網(wǎng)終端設備與物聯(lián)網(wǎng)云平臺之間的連接,如下圖:
在這種模式下,物聯(lián)網(wǎng)設備通過(guò)各種各樣的連接技術(shù),比如WiFi,Ethernet,BLE,Zigbee等等技術(shù),連接到位于云端的物聯(lián)網(wǎng)平臺上。需要注意的是,這僅僅是一個(gè)邏輯結構,在物理上,物聯(lián)網(wǎng)設備在接入云平臺之前,很可能需要一個(gè)物聯(lián)網(wǎng)網(wǎng)關(guān)。因為很多連接技術(shù)是無(wú)法直接連接到位于Internet上的物聯(lián)網(wǎng)云平臺的,比如Zigbee,BLE,Z-Wave,NFC等等。這些技術(shù)的通信范圍是一個(gè)小的局域網(wǎng),比如一個(gè)家庭,一間辦公室等。而連入Internet的技術(shù),則往往是WiFi,Ethernet,2/3/4G等這類(lèi)網(wǎng)絡(luò )技術(shù),大部分物聯(lián)網(wǎng)設備并不能提供這種連接的支持能力。因此,需要有一個(gè)物聯(lián)網(wǎng)網(wǎng)關(guān),來(lái)彌補這個(gè)GAP,完成不同技術(shù)之間的轉換。下圖示意了物聯(lián)網(wǎng)網(wǎng)關(guān)的功能和網(wǎng)絡(luò )位置:
物聯(lián)網(wǎng)網(wǎng)關(guān)往往具備相對強大的計算能力,具備豐富的網(wǎng)絡(luò )接口,同時(shí)具備消息或數據的匯聚和分解功能。
在這種連接模式下,物聯(lián)網(wǎng)云平臺是所有物聯(lián)網(wǎng)終端設備的“大腦”,云平臺統一指揮物聯(lián)網(wǎng)終端的行為,如果這種連接一旦斷開(kāi),那物聯(lián)網(wǎng)終端將無(wú)所適從,完全失去控制。
更理想的連接,應該是物聯(lián)網(wǎng)設備之間,也實(shí)現本地的直接連接,如下圖所示:
物聯(lián)網(wǎng)設備之間也建立連接,同時(shí)保留與云平臺的連接。這樣的好處就是,一旦云平臺的連接中斷,物聯(lián)網(wǎng)終端可以采用本地之間的終端連接,繼續提供服務(wù)。同時(shí),物聯(lián)網(wǎng)設備本地之間的交流和通信,直接通過(guò)本地連接完成,而不用再上升到云端。
要實(shí)現這種“云端連接”加“本地連接”的模型,需要物聯(lián)網(wǎng)設備支持消息中繼功能。即物聯(lián)網(wǎng)設備可以把另外的物聯(lián)網(wǎng)設備的消息或數據,轉發(fā)到云平臺,同時(shí)把云平臺發(fā)下來(lái)的數據,轉接給另外的物聯(lián)網(wǎng)設備。
ii. 協(xié)同
協(xié)同,則是指接入網(wǎng)絡(luò )的任何設備之間,能夠通過(guò)學(xué)習,實(shí)時(shí)的了解自己和對方的能力和狀態(tài),能夠根據特定的輸入條件,或者特定的環(huán)境狀態(tài),多種設備實(shí)現有效互動(dòng),協(xié)調工作,完成某種單一設備無(wú)法完成的工作。協(xié)同是物聯(lián)網(wǎng)的核心和本質(zhì)。協(xié)同表現在下面幾個(gè)方面:
- 物聯(lián)網(wǎng)設備之間的自動(dòng)發(fā)現,尤其是不同功能,不同類(lèi)別的設備,如何相互發(fā)現。比如在智慧交通領(lǐng)域,汽車(chē)靠近路燈時(shí),應該可以快速發(fā)現路燈,并建立聯(lián)系。這樣路燈就可以根據與自己建立聯(lián)系的汽車(chē)數量,來(lái)靈活調度信號燈的閃爍時(shí)間;
- 物聯(lián)網(wǎng)設備之間的能力交互。設備之間,只有相互了解對方的能力,了解對方能干什么,才能實(shí)現有效的交互和協(xié)同。類(lèi)似中國人之間的“找關(guān)系”,只有知道對方是干什么的,有哪些能力,才會(huì )有目的的去“發(fā)起請求”,從而一起協(xié)作達到目標;
- 新增物聯(lián)網(wǎng)設備或功能的自動(dòng)傳播。比如在一個(gè)局域網(wǎng)(智慧家庭)中,新加入了一個(gè)新的功能設備,這個(gè)新的設備需要盡快的“融入”原有的設備之中。這包括有一種機制,能夠廣播自己的能力,同時(shí),原有的設備,應該也可以快速的“理解”新加入的設備的功能和角色,這樣后續就又達到一種統一的狀態(tài)。
iii. 智能
智能,則是指物聯(lián)網(wǎng)設備具備“類(lèi)似于人”的智慧,比如根據特定條件和環(huán)境的自我調節能力,能夠通過(guò)持續的學(xué)習,不斷優(yōu)化和改進(jìn),更“人性化”的為人類(lèi)服務(wù)。
如果物聯(lián)網(wǎng)設備只是連接在一起,能夠遠程控制,被動(dòng)的聽(tīng)從人們的指揮,那不能算是真正的物聯(lián)網(wǎng),只能算是“控制網(wǎng)”。理想的目標是,物聯(lián)網(wǎng)設備應該具備自我學(xué)習能力,能夠通過(guò)積累過(guò)往的經(jīng)驗或數據,能夠對未來(lái)進(jìn)行預判,為人們提供更加智能的服務(wù)。這種“機器學(xué)習”的能力,我們認為應該屬于物聯(lián)網(wǎng)操作系統的一部分,應該能夠抽象成一些基本的服務(wù)或API,內置到內核中,供應用開(kāi)發(fā)者或者設備開(kāi)發(fā)者調用。
而且,這種機器學(xué)習的服務(wù),不僅僅只是位于終端操作系統中的一段代碼,還應該有一個(gè)龐大的后臺進(jìn)行支撐。大量的計算和預測功能,在后臺上執行。而終端上只是做一些簡(jiǎn)單計算和結果的執行。這樣終端加后臺軟件,就形成一個(gè)分布式的計算網(wǎng)格,有效分工,協(xié)同計算,有序執行,形成一個(gè)支撐物聯(lián)網(wǎng)的數字神經(jīng)。
2. 物聯(lián)網(wǎng)操作系統整體架構概述
物聯(lián)網(wǎng)操作系統是支撐物聯(lián)網(wǎng)大規模發(fā)展的最核心軟件。根據上面總結的物聯(lián)網(wǎng)的主要特征,結合操作系統的主要功能和分層結構,我們總結出如下的物聯(lián)網(wǎng)操作系統整體架構:
總體來(lái)說(shuō),物聯(lián)網(wǎng)操作系統是由操作系統內核,外圍功能組件,物聯(lián)網(wǎng)協(xié)同框架,通用智能引擎,集成開(kāi)發(fā)環(huán)境等幾個(gè)大的子系統組成。這些子系統之間相互配合,共同組成一個(gè)完整的面向各種各樣物聯(lián)網(wǎng)應用場(chǎng)景的軟件基礎平臺。需要說(shuō)明的是,這些子系統之間有一定的層次依賴(lài)關(guān)系,比如外圍功能組件需要依賴(lài)于物聯(lián)網(wǎng)操作系統內核,物聯(lián)網(wǎng)協(xié)同框架需要依賴(lài)于外圍功能組件,而公共智能引擎,需要依賴(lài)于下層的內核,外圍功能組件,甚至是物聯(lián)網(wǎng)協(xié)同框架等。在這個(gè)架構圖中,也反映了這種層次化的依賴(lài)關(guān)系。
目前主流的物聯(lián)網(wǎng)操作系統,比如Google的Brillo,Linux開(kāi)放基金會(huì )的Ostro項目,以及HelloX項目,都遵循這樣一種框架。下面對這幾個(gè)子系統做簡(jiǎn)要介紹。
a) 物聯(lián)網(wǎng)操作系統內核概述
內核是任何操作系統都有的核心組件,操作系統的核心功能和核心機制,都是在內核中實(shí)現的。比如最核心的線(xiàn)程/任務(wù)管理,內存管理,內核安全和同步等機制。雖然從功能上說(shuō),大部分操作系統的內核都相差不大,但是在這些具體功能的實(shí)現上,面向不同領(lǐng)域的操作系統,其實(shí)現目標和實(shí)現技術(shù)都是不同的。
比如對傳統的通用個(gè)人計算機操作系統來(lái)說(shuō),內核更加關(guān)注用戶(hù)交互的響應時(shí)間,資源的充分利用,不同應用程序之間的隔離和安全等。這是與其應用場(chǎng)景有關(guān)的。而對于面向嵌入式領(lǐng)域的嵌入式操作系統,則更加關(guān)注對中斷的響應時(shí)間,更加關(guān)注線(xiàn)程或任務(wù)的調度算法,以使得整個(gè)系統能夠在可預知的時(shí)間內,完成對外部事件的響應。
而物聯(lián)網(wǎng)操作系統的內核,又有不同于其它操作系統的特點(diǎn)。最主要的是其伸縮性。物聯(lián)網(wǎng)操作系統的內核應該能夠適應各種配置的硬件環(huán)境,從小到幾十K內存的低端嵌入式應用,到高達幾十M內存的復雜應用領(lǐng)域,物聯(lián)網(wǎng)操作系統內核都應該可以適應。同時(shí),物聯(lián)網(wǎng)操作系統的內核應該足夠節能,確保在一些能源受限的應用下,能夠持續足夠長(cháng)的時(shí)間。比如,內核可以提供硬件休眠機制,包括CPU本身的休眠,以便在物聯(lián)網(wǎng)設備沒(méi)有任務(wù)處理的時(shí)候,能夠持續處于休眠狀態(tài)。在需要處理外部事件時(shí),又能夠快速的喚醒。
物聯(lián)網(wǎng)操作系統的內核也應該具備嵌入式操作系統的一些特征,比如可預知可計算的外部事件響應時(shí)間,可預知的中斷響應時(shí)間,對多種多樣的外部硬件的控制和管理機制等。當然,物聯(lián)網(wǎng)操作系統內核必須足夠可靠和安全,以滿(mǎn)足物聯(lián)網(wǎng)對安全性的需求。
從功能上說(shuō),與其它操作系統基本類(lèi)似,主要包括任務(wù)管理,內存管理,中斷管理,內核同步,安全與權限管理,應用管理等。為了確保內核的正常運行,內核也應提供內核統計與監控功能,即監視內核的運行狀態(tài),監視內核對象的數量/狀態(tài)等,為維護或開(kāi)發(fā)人員提供故障定位的工具。在每一個(gè)內核子模塊中,都會(huì )通過(guò)更加具體的機制或者算法,來(lái)滿(mǎn)足物聯(lián)網(wǎng)應用的需求。同時(shí)確保內核的整體安全性和可靠性。
內核也是直接與物理設備打交道的軟件,所有對物理設備的管理,包括物理設備檢測,物理設備驅動(dòng)程序加載和卸載等等功能,也都是在內核中實(shí)現的。為了有效的管理物理設備,內核需要定義一套標準的設備管理框架,設備驅動(dòng)程序需要遵循這一套框架,才能納入內核的管理。為了訪(fǎng)問(wèn)多種多樣的物理設備,內核同時(shí)也會(huì )定義一套叫做硬件抽象層的軟件,這本質(zhì)上是對一些常用硬件操作的抽象,比如讀寫(xiě)設備配置空間,有的CPU是通過(guò)I/O接口來(lái)訪(fǎng)問(wèn)設備空間的,有的則是把設備配置空間直接映射到內存空間,通過(guò)常規內存訪(fǎng)問(wèn)來(lái)讀取設備配置空間。為了適應這種不同的情況,內核一般會(huì )定義一個(gè)叫做__device_read和__device_write的宏,根據設備類(lèi)型的不同,這些宏定義的實(shí)現代碼會(huì )不同,但是對操作系統內核和設備驅動(dòng)程序來(lái)說(shuō),只需要調用這兩個(gè)一致的宏,即可對設備配置空間進(jìn)行訪(fǎng)問(wèn)。這就是一個(gè)典型的硬件抽象層的例子。
除此之外,物聯(lián)網(wǎng)操作系統的內核還提供面向物聯(lián)網(wǎng)應用的常用連接功能,比如對藍牙的支持,對Zigbee的支持,對WiFi的支持,等等。各類(lèi)領(lǐng)域應用可以直接利用物聯(lián)網(wǎng)操作系統內核的這些連接功能,實(shí)現最基本的通信需求。
下圖示意了內核的更進(jìn)一步的功能結構:
b) 外圍功能組件概述
物聯(lián)網(wǎng)操作系統內核只是提供最基本的操作系統功能,供物聯(lián)網(wǎng)應用程序調用。但只有物聯(lián)網(wǎng)操作系統內核是遠遠不夠的,在很多情況下,還需要很多其它功能模塊的支持,比如文件系統,TCP/IP網(wǎng)絡(luò )協(xié)議棧,數據庫等。我們把這些功能組件從物聯(lián)網(wǎng)操作系統內核中獨立出來(lái),組成一個(gè)獨立的功能系統,稱(chēng)為“外圍功能組件”。
之所以把這些功能組件稱(chēng)為“外圍”,是因為在很多情況下,這些功能組件都不是必須的。而且在實(shí)際的物聯(lián)網(wǎng)應用中,這些外圍組件也不會(huì )全部被用到,大部分情況下用到一到兩個(gè)就可以滿(mǎn)足需求了,其它的功能組件必須裁剪掉。因為在物聯(lián)網(wǎng)應用中,很多情況下的系統硬件資源非常有限,如果保留沒(méi)有用到的功能組件,會(huì )浪費掉很多資源。同時(shí),保留一些用不到的組件,會(huì )對整個(gè)系統帶來(lái)安全隱患。比如,如果物聯(lián)網(wǎng)應用不需要聯(lián)網(wǎng),卻保留了TCP/IP協(xié)議棧功能,則TCP/IP協(xié)議棧的BUG或漏洞,可能會(huì )被利用,從而對系統造成安全影響。這些外圍功能組件都是針對物聯(lián)網(wǎng)操作系統進(jìn)行定制和開(kāi)發(fā)的,與物聯(lián)網(wǎng)操作系統內核之間的接口非常清晰,具備高度的可裁剪性。
但通用操作系統中,這些外圍組件的處理方式卻與物聯(lián)網(wǎng)操作系統不同,這些組件會(huì )被統一歸類(lèi)到內核中,隨內核一起分發(fā),作為一個(gè)整體提供給用戶(hù)。即使應用程序不用這些組件,也不能把這些組件裁剪掉。之所以這樣做,是因為通用操作系統的資源相對豐富,多保留一些功能模塊對整體系統的影響并不大。同時(shí),通用操作系統的安全性要求相對較低。
物聯(lián)網(wǎng)操作系統內核和外圍功能組件結合起來(lái),可以解決物聯(lián)網(wǎng)的“連接”需求。這包括內核提供的基本物聯(lián)網(wǎng)本地連接(藍牙,Zigbee,NFC,RFID等),以及外圍功能組件中的TCP/IP協(xié)議棧等提供的復雜網(wǎng)絡(luò )連接。
除TCP/IP網(wǎng)絡(luò )協(xié)議棧外,常見(jiàn)的外圍組件還包括文件系統,圖形用戶(hù)界面(GUI),安全傳輸協(xié)議,腳本語(yǔ)言執行引擎(比如JavaScript語(yǔ)言的執行引擎等),基于TCP/IP協(xié)議的安全傳輸協(xié)議(SSL/SSH等),C運行庫,在線(xiàn)更新機制(軟件升級/在線(xiàn)更新補?。┑?。需要說(shuō)明的是,TCP/IP協(xié)議棧是面向互聯(lián)網(wǎng)設計的通信協(xié)議棧,由于物聯(lián)網(wǎng)本身特征與互聯(lián)網(wǎng)有很大差異,TCP/IP協(xié)議棧在應用到物聯(lián)網(wǎng)的時(shí)候,面臨許多問(wèn)題和挑戰,需要對TCP/IP協(xié)議棧做一番優(yōu)化改造。我們把改造之后的TCP/IP協(xié)議棧,稱(chēng)為“面向物聯(lián)網(wǎng)的TCP/IP協(xié)議”,簡(jiǎn)寫(xiě)為“TCP/IP@IoT”。下圖示意了常見(jiàn)的物聯(lián)網(wǎng)操作系統外圍功能組件:
c) 物聯(lián)網(wǎng)協(xié)同框架概述
物聯(lián)網(wǎng)協(xié)同框架是實(shí)現物聯(lián)網(wǎng)“協(xié)同”功能性需求的關(guān)鍵功能系統。物聯(lián)網(wǎng)操作系統的內核和外圍功能組件,僅僅實(shí)現了物聯(lián)網(wǎng)設備之間的“連接”功能。但是我們知道,僅僅實(shí)現物聯(lián)網(wǎng)設備的連接上網(wǎng),是遠遠不夠的。物聯(lián)網(wǎng)的精髓在于,物聯(lián)網(wǎng)設備之間能夠相互交互和協(xié)同,使得物聯(lián)網(wǎng)設備能夠“充分合作”,相互協(xié)調一致,以達到單一物聯(lián)網(wǎng)設備無(wú)法完成的功能。而物聯(lián)網(wǎng)協(xié)同框架,就是為物聯(lián)網(wǎng)設備之間的協(xié)同提供了技術(shù)基礎。
一般情況下,物聯(lián)網(wǎng)協(xié)同框架是一組軟件的集合,由許多個(gè)功能相互獨立,但是又相互依賴(lài)的軟件模塊組成。比如,Google的Weave物聯(lián)網(wǎng)協(xié)同框架,是由云平臺組件Weave Cloud,面向設備端的LibWeave,以及面向智能手機客戶(hù)端的Weave Client等組件組成。Weave Cloud是整個(gè)框架的“中心管理器”,所有基于Weave的物聯(lián)網(wǎng)設備,首先都連接到Weave Cloud上,接受Weave Cloud下發(fā)的指令,并向Weave Cloud上報相關(guān)數據。Weave Client則也需通過(guò)Weave Cloud來(lái)管理和控制基于Weave的物聯(lián)網(wǎng)設備,等等。
一般來(lái)說(shuō),物聯(lián)網(wǎng)協(xié)同框架至少包括如下功能:
- 物聯(lián)網(wǎng)設備發(fā)現機制。物聯(lián)網(wǎng)設備一般不提供直接的用戶(hù)交互界面,需要通過(guò)諸如智能手機,電腦等方式,連接到設備上,對設備進(jìn)行管理和配置。在物聯(lián)網(wǎng)設備第一次加電并聯(lián)網(wǎng)之后,智能手機/電腦等如何快速準確的找到這個(gè)物聯(lián)網(wǎng)設備,就是物聯(lián)網(wǎng)設備發(fā)現機制要解決的問(wèn)題。尤其是在物聯(lián)網(wǎng)設備數量眾多,功能多樣的情況下,如何準確快速的發(fā)現和連接到物聯(lián)網(wǎng)設備上,是一個(gè)很大的挑戰。設備發(fā)現機制的另外一個(gè)應用場(chǎng)景,是設備與設備之間的直接交互。比如在同一個(gè)局域網(wǎng)內的物聯(lián)網(wǎng)設備,可以相互發(fā)現并建立關(guān)聯(lián),在必要的時(shí)候能夠直接通信,相互協(xié)作,實(shí)現物聯(lián)網(wǎng)設備之間的“協(xié)同”;
- 物聯(lián)網(wǎng)設備的初始化與配置管理,包括設備在第一次使用時(shí)的初始化配置,設備的認證和鑒權,設備的狀態(tài)管理等等;
- 物聯(lián)網(wǎng)設備之間的協(xié)同交互。這包括物聯(lián)網(wǎng)設備之間的直接通信機制。物聯(lián)網(wǎng)協(xié)同框架要能夠提供一套標準或規范,使得建立關(guān)聯(lián)關(guān)系的物聯(lián)網(wǎng)設備之間,能夠直接通信,不需要經(jīng)過(guò)后臺服務(wù)器;
- 云端服務(wù)。大部分情況下,物聯(lián)網(wǎng)服務(wù)需要云端(即物聯(lián)網(wǎng)后臺)的支持。物聯(lián)網(wǎng)設備要連接到云端平臺上,進(jìn)行認證和注冊。物聯(lián)網(wǎng)設備在運行期獲取的數據,也需要傳送到云端平臺上進(jìn)行存儲。如果用戶(hù)與物聯(lián)網(wǎng)設備距離很遠,無(wú)法直接連接,則用戶(hù)也需要經(jīng)過(guò)云端平臺,來(lái)簡(jiǎn)介控制或操作物聯(lián)網(wǎng)設備,等等。物聯(lián)網(wǎng)協(xié)同框架至少要定義并實(shí)現一套標準的協(xié)議,來(lái)支撐這些操作。
除此之外,物聯(lián)網(wǎng)協(xié)同框架還必須實(shí)現一些基本的服務(wù),來(lái)支撐上述功能。比如,物聯(lián)網(wǎng)協(xié)同框架需要定義一套標準的物聯(lián)網(wǎng)設備命名體系,以能夠準確唯一的標識每一臺物聯(lián)網(wǎng)設備。物聯(lián)網(wǎng)設備之間,以及用戶(hù)與物聯(lián)網(wǎng)設備之間,在相互操作之前,還必須要完成認證和鑒權,以確保物聯(lián)網(wǎng)的安全,等等。另外一個(gè)基礎服務(wù),就是標準的物聯(lián)網(wǎng)操作模式。比如在智能家電應用中,用戶(hù)可以通過(guò)一個(gè)標準的Open命令,來(lái)遠程打開(kāi)空調。通過(guò)一個(gè)Adjust命令,來(lái)調節空調的溫度。這些標準的命令必須由物聯(lián)網(wǎng)協(xié)同框架進(jìn)行定義,才能實(shí)現不同廠(chǎng)商,不同類(lèi)型設備之間的互操作。如果沒(méi)有這些標準的操作模式(操作命令),那么要打開(kāi)A廠(chǎng)商的空調,是Open命令,要打開(kāi)B廠(chǎng)商的空調,則可能是Turn On命令,這樣就無(wú)法實(shí)現相互操作了。
上述協(xié)同功能和基本服務(wù),都是建立在網(wǎng)絡(luò )通信基礎之上的,協(xié)同框架還必須實(shí)現或者選擇一種合適的網(wǎng)絡(luò )通信協(xié)議。物聯(lián)網(wǎng)的特征,要求這種通信協(xié)議盡可能的低功耗和高效率。一些常用的標準協(xié)議,比如CoAP或者M(jìn)QTT,可以承擔這個(gè)功能。大部分物聯(lián)網(wǎng)協(xié)同框架,比如IoTivity,就是基于CoAP協(xié)議的。
下圖示意了物聯(lián)網(wǎng)協(xié)同框架的主要組成:
下面通過(guò)一個(gè)智慧商場(chǎng)的例子,進(jìn)一步說(shuō)明物聯(lián)網(wǎng)協(xié)同框架的作用。智慧商場(chǎng)解決方案中,一般都會(huì )包括火警探測器與智慧門(mén)禁系統。這兩類(lèi)物聯(lián)網(wǎng)設備在被安裝在商場(chǎng)之前,必須經(jīng)過(guò)安全的初始配置,以確保不會(huì )被惡意控制。初始配置完成之后,這兩類(lèi)設備會(huì )連接到統一的協(xié)同框架云端系統,并實(shí)時(shí)更新其狀態(tài)。與此同時(shí),火警探測器也會(huì )通過(guò)物聯(lián)網(wǎng)協(xié)同框架的設備發(fā)現機制,與門(mén)禁系統建立聯(lián)系,并相互知道自己的存在。一旦火警探測器探測到火警發(fā)生,則會(huì )直接告訴門(mén)禁系統打開(kāi)門(mén)禁,以便方便人們盡快逃生。這種情況下,如果沒(méi)有物聯(lián)網(wǎng)設備之間的直接通信功能,所有的通信都需要經(jīng)過(guò)后臺系統轉接,那么不但響應時(shí)間會(huì )增加,更致命的是,一旦與后臺之間的物理網(wǎng)絡(luò )中斷,則終端之間將無(wú)法實(shí)現自動(dòng)聯(lián)動(dòng)。這種網(wǎng)絡(luò )故障,在諸如火警等災難發(fā)生時(shí),是最常見(jiàn)的。
為支撐上述機制的有效運行,物聯(lián)網(wǎng)協(xié)同框架還必須提供一致的通信協(xié)議和通信技術(shù),物聯(lián)網(wǎng)設備只要遵循這套協(xié)議,就能夠相互識別對方的消息。同時(shí),物聯(lián)網(wǎng)協(xié)同框架還必須提供一套唯一的命名規范,確保任何一個(gè)物聯(lián)網(wǎng)終端設備,都能獲取到唯一的名字,其它設備能夠通過(guò)這個(gè)唯一的名字與之交互。同時(shí),這套唯一的命名規范,最好能夠把物聯(lián)網(wǎng)終端設備的功能,也體現出來(lái)。這樣物聯(lián)網(wǎng)設備之間通過(guò)設備名字,就可以確定其提供的功能,從而做出有針對性的動(dòng)作。比如上述例子,火警探測器可以命名為“Fire alert detector”,而門(mén)禁系統可以命名為“Entrance access control”,這樣這兩者可以通過(guò)名字,就知道對方的功能角色。當然,這只是個(gè)例子,在實(shí)際的命名系統中,還是應該有一套計算機能夠識別的編碼體系。
目前物聯(lián)網(wǎng)行業(yè)內的一些協(xié)同框架,基本都是與物聯(lián)網(wǎng)操作系統內核獨立的,即這些協(xié)同框架可以被應用在基于任何操作系統的物聯(lián)網(wǎng)解決方案中,只要這些操作系統能夠提供必要的接口即可。但采取這種方式,顯然有其明顯的弊端。那就是無(wú)法采用一套統一的代碼,來(lái)適應所有的操作系統。比如Google的Waeve,針對Linux和Android等復雜的操作系統,采用C++語(yǔ)言開(kāi)發(fā)了LibWeave組件。而針對資源受限的嵌入式應用場(chǎng)景,則又采用C語(yǔ)言開(kāi)發(fā)了uWeave。這樣對物聯(lián)網(wǎng)設備的開(kāi)發(fā)者來(lái)說(shuō),就不得不掌握兩套完全迥異的API,了解兩套機理完全不同的物聯(lián)網(wǎng)協(xié)同框架,顯然無(wú)法降低成本。
理想的實(shí)現方式是,物聯(lián)網(wǎng)協(xié)同框架能夠與物聯(lián)網(wǎng)操作系統內核緊密綁定,只提供一套API給開(kāi)發(fā)者。通過(guò)物聯(lián)網(wǎng)操作系統內核本身的伸縮機制,來(lái)適應不同的應用場(chǎng)景。比如在沒(méi)有WiFi支持的嵌入式場(chǎng)景,物聯(lián)網(wǎng)操作系統內核會(huì )裁剪掉TCP/IP等組件,而采用低功耗藍牙技術(shù)實(shí)現數據通信。而如果目標硬件配置了WiFi或者Ethernet等網(wǎng)絡(luò )接口設備,則會(huì )保留TCP/IP協(xié)議棧。不論是哪種形態(tài),物聯(lián)網(wǎng)操作系統內核都會(huì )提供統一的一套API,給物聯(lián)網(wǎng)協(xié)同框架使用,即底層的通信機制,對物聯(lián)網(wǎng)協(xié)同框架是透明的?;谶@樣的設計原則,類(lèi)似Google Weave這樣的物聯(lián)網(wǎng)協(xié)同框架就無(wú)需針對不同的目標硬件設計多套解決方案了,而只需要一套就可解決問(wèn)題。
d) 公共智能引擎概述
通過(guò)物聯(lián)網(wǎng)協(xié)同框架,可以使得物聯(lián)網(wǎng)設備之間建立關(guān)聯(lián),充分協(xié)作,完成單一物聯(lián)網(wǎng)設備無(wú)法完成的功能。但是這種協(xié)同的功能,還是局限于事先定義好的邏輯上。比如上述智慧商場(chǎng)中火警探測器和門(mén)禁系統的例子,必須在領(lǐng)域應用中編寫(xiě)代碼,告訴火警探測器,一旦發(fā)生火警,則告訴門(mén)禁系統打開(kāi)門(mén)禁。如果沒(méi)有這樣的程序邏輯,火警探測系統是不會(huì )通知門(mén)禁系統的。
如果希望物聯(lián)網(wǎng)系統超出預定義的范圍,能夠達到一種自學(xué)習的程度,比如最開(kāi)始火警探測器并不知道在發(fā)生火警時(shí)通知門(mén)禁系統,而是隨著(zhù)運行時(shí)間的增加,逐漸的“學(xué)習”到這種能力。這樣只有物聯(lián)網(wǎng)協(xié)同框架就無(wú)法做到了,必須引入智能引擎的支持。
物聯(lián)網(wǎng)智能引擎,就是指包含了諸如語(yǔ)音與語(yǔ)義識別,機器學(xué)習等等功能模塊,以使得物聯(lián)網(wǎng)能夠超出“事先定義好”的活動(dòng)規則,能夠具備像人一樣具備“智慧”的能力。在物聯(lián)網(wǎng)智能引擎內的功能模塊,都是基礎能力,可以供各種物聯(lián)網(wǎng)應用所調用。比較典型的例子就是,在物聯(lián)網(wǎng)設備中加入語(yǔ)音識別功能,人們通過(guò)自然語(yǔ)言,與物聯(lián)網(wǎng)設備直接對話(huà),來(lái)達到下達指令的目的。
另外一個(gè)公共智能引擎中的重要模塊,是DSL語(yǔ)言與其對應的處理引擎。DSL(DomainSpecific Language,領(lǐng)域特定語(yǔ)言)是針對某一種特定的應用領(lǐng)域開(kāi)發(fā)的編程或操作語(yǔ)言,專(zhuān)門(mén)應用于一個(gè)相對獨立的領(lǐng)域。這與計算機編程語(yǔ)言不一樣,計算機編程語(yǔ)言大部分都比較通用,可以為多種應用領(lǐng)域編寫(xiě)程序。正是因為它的通用性,無(wú)法照顧到某一個(gè)具體的領(lǐng)域,因此采用通用計算機語(yǔ)言來(lái)實(shí)現某一個(gè)具體領(lǐng)域的應用時(shí),就非常麻煩,需要專(zhuān)業(yè)的程序員,經(jīng)過(guò)復雜的編程工作。而DSL語(yǔ)言,則是針對某一個(gè)很細的功能領(lǐng)域開(kāi)發(fā),專(zhuān)門(mén)應用于這個(gè)特定的領(lǐng)域。這樣就可以針對這個(gè)特定的領(lǐng)域建立一些內置對象,定義領(lǐng)域特定的動(dòng)作,并根據領(lǐng)域的習慣,定義領(lǐng)域特有語(yǔ)法。采用DSL語(yǔ)言來(lái)編寫(xiě)領(lǐng)域應用,就非常簡(jiǎn)單。
現在有很多軟件工具,可以用于定義DSL,并提供執行解釋引擎。物聯(lián)網(wǎng)操作系統的公共智能引擎模塊中,也應該提供DSL語(yǔ)言開(kāi)發(fā)及解釋的功能,以方便物聯(lián)網(wǎng)特定場(chǎng)景的調用。
e) 集成開(kāi)發(fā)環(huán)境概述
集成開(kāi)發(fā)環(huán)境是任何一個(gè)完備的操作系統所必需提供的功能組件,程序員通過(guò)集成開(kāi)發(fā)環(huán)境的輔助,完成具體應用的開(kāi)發(fā),這些應用最終運行在目標操作系統上。比如針對Linux操作系統的GCC開(kāi)發(fā)工具套件,面向Windows操作系統的Microsoft Visual Studio集成開(kāi)發(fā)環(huán)境,以及跨平臺的Eclipse集成開(kāi)發(fā)環(huán)境,等等。
開(kāi)發(fā)環(huán)境是豐富壯大操作系統生態(tài)圈的最核心組件,同時(shí)也是形成“二級開(kāi)發(fā)模式”的基礎。所謂二級開(kāi)發(fā)模式,指的是包含操作系統平臺本身功能開(kāi)發(fā)的第一級開(kāi)發(fā),以及基于操作系統平臺,進(jìn)行應用程序開(kāi)發(fā)或操作系統內核定制的二次開(kāi)發(fā)。其中第一級開(kāi)發(fā),是由操作系統廠(chǎng)商或者開(kāi)源社區完成。而第二級的二次開(kāi)發(fā),則是由具體的應用廠(chǎng)商開(kāi)發(fā)完成。這兩個(gè)層次的開(kāi)發(fā),所用的工具是不同的。在第一級開(kāi)發(fā)中,一般采用系統級的開(kāi)發(fā)工具,大部分都是命令行模式,采用的開(kāi)發(fā)語(yǔ)言,也是以C/C++,甚至匯編語(yǔ)言為主。而第二級開(kāi)發(fā)的時(shí)候,操作系統基礎架構已構筑起來(lái),對應的編程開(kāi)發(fā)環(huán)境也已經(jīng)完善,因此大部分是采用圖形化的開(kāi)發(fā)環(huán)境。相對來(lái)說(shuō),第二級開(kāi)發(fā)所需要的系統級的開(kāi)發(fā)技能也相對較低。注意,這里說(shuō)的是“系統級”的開(kāi)發(fā)技能,主要是指對計算機CPU和硬件,操作系統內核等的理解和技能,并不是說(shuō)面向應用的開(kāi)發(fā)技能。實(shí)際上,不論是哪個(gè)層級的開(kāi)發(fā),只要深入進(jìn)去,真正解決問(wèn)題了,都不會(huì )太簡(jiǎn)單。
物聯(lián)網(wǎng)領(lǐng)域也是如此。在物聯(lián)網(wǎng)操作系統本身的開(kāi)發(fā)中,會(huì )采用不同的相對專(zhuān)業(yè)的開(kāi)發(fā)工具。在操作系統發(fā)布之后,也要提供一套完整的開(kāi)發(fā)工具,方便物聯(lián)網(wǎng)領(lǐng)域的程序員開(kāi)發(fā)物聯(lián)網(wǎng)應用。
一般的集成開(kāi)發(fā)環(huán)境是由一系列工具組合而成的,即使是Microsoft的Visual Studio集成開(kāi)發(fā)環(huán)境,雖然開(kāi)起來(lái)是一個(gè)類(lèi)似Office Word一樣的獨立應用程序,程序員可以在其中完成程序的編寫(xiě),編譯,調試,運行,發(fā)布等等全軟件聲明周期的所有活動(dòng),但是它也是由若干個(gè)獨立工具組合在一起形成的集成軟件工作臺,比如編譯工具,連接工具,調試工具,軟件代碼一致性檢查工具等等。
面向物聯(lián)網(wǎng)操作系統的集成開(kāi)發(fā)環(huán)境也不例外,它是由一系列相互獨立但又相互依賴(lài)的獨立工具組成的。最基本也是最核心的部分,是開(kāi)發(fā)語(yǔ)言。目前來(lái)說(shuō),是沒(méi)有一套專(zhuān)門(mén)面向物聯(lián)網(wǎng)應用開(kāi)發(fā)的語(yǔ)言的,這不利于推動(dòng)物聯(lián)網(wǎng)的大發(fā)展,因此,必須要選擇一種適合物聯(lián)網(wǎng)特點(diǎn)的開(kāi)發(fā)語(yǔ)言。根據物聯(lián)網(wǎng)本身的特征,適合物聯(lián)網(wǎng)應用開(kāi)發(fā)的語(yǔ)言,必須具備下列特征:
- 開(kāi)發(fā)語(yǔ)言必須是能夠跨硬件平臺的??缬布脚_的好處是,針對某一類(lèi)功能相同或類(lèi)似的物聯(lián)網(wǎng)設備編寫(xiě)的應用程序,可以在這一類(lèi)物聯(lián)網(wǎng)設備上通用,而不管這類(lèi)設備是不是同一個(gè)廠(chǎng)家的。比如針對智能攝像頭而言,A廠(chǎng)商的攝像頭個(gè)的配置,可能是ARM的CPU,USB接口,分辨率是1024*768等,而B(niǎo)廠(chǎng)商的攝像頭可能是基于x86的CPU,SPI接口?;跀z像頭編寫(xiě)一個(gè)人臉識別程序,如果采用跨平臺的編程語(yǔ)言,則針對A廠(chǎng)商設備編寫(xiě)的應用程序,可以直接在B廠(chǎng)家的設備上使用。但是如果編程語(yǔ)言不是跨硬件平臺的,比如C/C++語(yǔ)言,則針對A廠(chǎng)家的攝像頭編寫(xiě)的應用程序,必須經(jīng)過(guò)重新編譯(甚至還需要大量的修改)之后,才能在B廠(chǎng)家的攝像頭上運行。物聯(lián)網(wǎng)設備的碎片化特征,決定了開(kāi)發(fā)語(yǔ)言必須是跨硬件平臺的;
- 開(kāi)發(fā)語(yǔ)言最好是面向對象的開(kāi)發(fā)語(yǔ)言。面向對象編程方法,可以讓程序員以更接近實(shí)際世界的方式來(lái)理解應用場(chǎng)景,建立程序開(kāi)發(fā)模型,同時(shí)也可以大大加快開(kāi)發(fā)速度。對于大型的軟件,面向對象思想可以簡(jiǎn)化開(kāi)發(fā)維護過(guò)程,降低開(kāi)發(fā)成本。在物聯(lián)網(wǎng)領(lǐng)域,面向對象編程思想更有價(jià)值。因為我們面對的是一個(gè)一個(gè)的“物”,每個(gè)物體都可以抽象為程序開(kāi)發(fā)領(lǐng)域的一個(gè)對象,通過(guò)不同對象(物)之間的消息交互,可以快速完成復雜應用系統的開(kāi)發(fā)。要支持面向對象的編程思想,面向對象的編程語(yǔ)言是必須的;
- 開(kāi)發(fā)語(yǔ)言最好能支持完善的“事件驅動(dòng)”機制。與以人為中心的傳統軟件開(kāi)發(fā)模式不同,物聯(lián)網(wǎng)時(shí)代的軟件,都是受“事件”驅動(dòng)的。面向物聯(lián)網(wǎng)的程序,大多數情況下處理的是一個(gè)一個(gè)的外部事件,根據外部事件做出響應。比如一個(gè)火警探測設備,會(huì )針對“探測到起火”等異步事件,做出對應的動(dòng)作。物聯(lián)網(wǎng)軟件開(kāi)發(fā),很多情況下就是編寫(xiě)一個(gè)一個(gè)的時(shí)間處理程序,并與事先定義好的事件關(guān)聯(lián)在一起。這樣一旦外部事件發(fā)生,則處理程序就會(huì )被調用。這種以“事件”為中心的物聯(lián)網(wǎng)編程方法,必須配以能夠支持完善事件驅動(dòng)機制的開(kāi)發(fā)語(yǔ)言。
分析目前常見(jiàn)的開(kāi)發(fā)語(yǔ)言,我們認為JavaScript語(yǔ)言是最合適的。更詳細的分析過(guò)程,在后面部分中會(huì )詳細描述。
除了編程語(yǔ)言之外,另外一個(gè)集成開(kāi)發(fā)環(huán)境的核心部件,是“物聯(lián)網(wǎng)運行庫”(物聯(lián)網(wǎng)Runtime)。任何一種開(kāi)發(fā)語(yǔ)言,都有一個(gè)與之對應的運行庫,比如針對C語(yǔ)言的libc,針對Java語(yǔ)言的J2SE/J2EE/J2ME等等配套庫。這些運行庫提供了開(kāi)發(fā)過(guò)程中最常用的功能或函數,比如字符串操作,數字操作,I/O,數據庫訪(fǎng)問(wèn),等等。物聯(lián)網(wǎng)開(kāi)發(fā)領(lǐng)域也一樣,必須有一套物聯(lián)網(wǎng)運行庫,來(lái)提供最常見(jiàn)的物聯(lián)網(wǎng)開(kāi)發(fā)功能支持。下列與物聯(lián)網(wǎng)應用開(kāi)發(fā)相關(guān)的功能,應該在物聯(lián)網(wǎng)運行庫中實(shí)現:
- 支持物聯(lián)網(wǎng)應用開(kāi)發(fā)的最基本操作,比如字符串操作,文件I/O,網(wǎng)絡(luò )功能,任務(wù)管理,內存管理,數據庫訪(fǎng)問(wèn)等;
- 常見(jiàn)傳感器的訪(fǎng)問(wèn)接口,比如針對溫度,濕度,重力,加速度,光照等等常見(jiàn)傳感器設計一套標準的訪(fǎng)問(wèn)接口,然后把這一套訪(fǎng)問(wèn)接口,作為物聯(lián)網(wǎng)運行庫的一部分進(jìn)行實(shí)現。對應用程序來(lái)說(shuō),只需要調用這些接口即可訪(fǎng)問(wèn)對應的傳感器,而不用關(guān)心傳感器的物理參數(廠(chǎng)商,接口類(lèi)型,等等);
- 支撐物聯(lián)網(wǎng)軟件開(kāi)發(fā)的基本編程機制,比如事件驅動(dòng)機制的框架,面向對象機制的對象管理,等等。這些基本的機制,也需要在物聯(lián)網(wǎng)運行庫中實(shí)現,應用程序直接調用即可;
- 公共安全服務(wù)。比如用戶(hù)或設備認證,訪(fǎng)問(wèn)鑒權,數據通信加密/解密等。這些基本的安全服務(wù),在幾乎每個(gè)物聯(lián)網(wǎng)應用場(chǎng)景中都會(huì )涉及到,因此作為公共服務(wù),納入物聯(lián)網(wǎng)運行庫中進(jìn)行實(shí)現;
- 物聯(lián)網(wǎng)協(xié)同框架提供的基本服務(wù),也可以納入到物聯(lián)網(wǎng)運行庫中,暴露給應用程序。比如IoTivity協(xié)同框架的API,CoAP協(xié)議的API,都可以作為物聯(lián)網(wǎng)運行庫的一部分功能來(lái)實(shí)現;
- 其它與具體領(lǐng)域相關(guān)的公共服務(wù),比如物聯(lián)網(wǎng)后臺連接服務(wù)等,都可以作為領(lǐng)域特定物聯(lián)網(wǎng)運行庫的一部分來(lái)實(shí)現。
物聯(lián)網(wǎng)運行庫必須與物聯(lián)網(wǎng)開(kāi)發(fā)語(yǔ)言強相關(guān),且物聯(lián)網(wǎng)運行庫的大部分代碼,都是由物聯(lián)網(wǎng)開(kāi)發(fā)語(yǔ)言實(shí)現的。如果以JavaScript作為物聯(lián)網(wǎng)開(kāi)發(fā)語(yǔ)言,那么與之對應的物聯(lián)網(wǎng)運行庫,大部分會(huì )以JavaScript語(yǔ)言實(shí)現。物聯(lián)網(wǎng)運行庫有兩種存在方式,一種是作為集成開(kāi)發(fā)環(huán)境的一部分,在代碼編譯鏈接階段,編譯連接器從物聯(lián)網(wǎng)運行庫中選擇與應用程序有關(guān)的代碼片段,與應用程序編譯在一起,形成一個(gè)可運行的程序包。這種模式下,不需要加載全部物聯(lián)網(wǎng)運行庫,而只需要加載應用程序需要的一部分即可。另外一種存在方式,是在物聯(lián)網(wǎng)操作系統的內核中。這種情況下,物聯(lián)網(wǎng)應用程序與物聯(lián)網(wǎng)運行庫是獨立存在的,物聯(lián)網(wǎng)應用程序在運行時(shí),操作系統會(huì )根據需要,臨時(shí)加載物聯(lián)網(wǎng)運行庫(或其中的一部分相關(guān)內容),支持物聯(lián)網(wǎng)應用程序的運行。
除此物聯(lián)網(wǎng)編程語(yǔ)言和物聯(lián)網(wǎng)運行庫之外,物聯(lián)網(wǎng)集成開(kāi)發(fā)環(huán)境還包括代碼編輯工具,編譯工具,連接工具,調試工具等等,這是任何一個(gè)軟件開(kāi)發(fā)環(huán)境都需要具備的。需要注意的是,JavaScript語(yǔ)言是解釋型語(yǔ)言,即代碼可以被語(yǔ)言解釋器直接加載并分析運行,不需要事先編譯和鏈接。在這種情況下,就不需要編譯鏈接等工具。但是調試工具是必須的。
物聯(lián)網(wǎng)應用開(kāi)發(fā)語(yǔ)言,物聯(lián)網(wǎng)運行庫,以及對應的編輯,編譯,連接,調試等工具,組成了物聯(lián)網(wǎng)開(kāi)發(fā)環(huán)境的核心部分。除此之外,為了方便開(kāi)發(fā),分享,交流的目的,一個(gè)完善的開(kāi)發(fā)社區,也是必須的。開(kāi)發(fā)者可以在這個(gè)社區上共享代碼,討論技術(shù)問(wèn)題等。更重要的是,物聯(lián)網(wǎng)集成開(kāi)發(fā)環(huán)境可以與開(kāi)發(fā)社區緊密結合,可以把成功的代碼或有價(jià)值的模塊,發(fā)布到社區中。物聯(lián)網(wǎng)開(kāi)發(fā)環(huán)境可以直接根據程序員的需要,從社區中下載代碼,并納入到項目中。
f) 物聯(lián)網(wǎng)領(lǐng)域應用概述
領(lǐng)域應用是面向不同物聯(lián)網(wǎng)領(lǐng)域,通過(guò)綜合利用物聯(lián)網(wǎng)操作系統的各層功能模塊,借助物聯(lián)網(wǎng)操作系統集成開(kāi)發(fā)環(huán)境,開(kāi)發(fā)出來(lái)的可以完成一項或多項具體功能的應用程序。應用領(lǐng)域可以根據需要,調用一個(gè)或全部物聯(lián)網(wǎng)操作系統的功能。比如,如果是實(shí)現一個(gè)提供簡(jiǎn)單網(wǎng)絡(luò )連接的實(shí)時(shí)溫度計應用,則只需要利用物聯(lián)網(wǎng)操作系統的內核和TCP/IP協(xié)議棧等外圍組件即可。但如果這個(gè)溫度計應用在智慧農業(yè)解決方案中,根據不同的溫度,來(lái)實(shí)時(shí)調節通風(fēng)系統,則必須要集成物聯(lián)網(wǎng)系統框架,以使得溫度計與通風(fēng)系統能夠建立聯(lián)系并有效協(xié)同。更進(jìn)一步,如果希望溫度計具備某些“智慧”的功能,比如能夠識別人們的語(yǔ)音指令,能夠根據周?chē)h(huán)境的溫度和濕度等信息,判斷出是否下雨,并采取適當動(dòng)作等,則必須要有公共智能引擎的支持。
總之,領(lǐng)域應用是物聯(lián)網(wǎng)操作系統的直接服務(wù)目標,它利用物聯(lián)網(wǎng)操作系統這個(gè)基礎軟件平臺,并根據具體領(lǐng)域的特征,來(lái)完成某項具體的功能。由于領(lǐng)域應用是與特定領(lǐng)域強相關(guān)的,不屬于公共的平臺軟件,因此我們不把它作為物聯(lián)網(wǎng)操作系統的組成部分。但是為了說(shuō)明領(lǐng)域應用與物聯(lián)網(wǎng)操作系統的關(guān)系,也一起把它體現在了物聯(lián)網(wǎng)操作系統的架構圖中。
g) 物聯(lián)網(wǎng)操作系統整體架構總結
綜合上面的說(shuō)明,可以把物聯(lián)網(wǎng)操作系統的框架做進(jìn)一步細化,如下圖所示:
前面講到,物聯(lián)網(wǎng)的三個(gè)主要特征分別是連接,協(xié)同和智能。物聯(lián)網(wǎng)的這個(gè)整體框架,是與這三個(gè)特征分別對應的,如下圖所示:
如果物聯(lián)網(wǎng)應用只希望實(shí)現基本的連接功能,那么只要保留物聯(lián)網(wǎng)操作系統的內核,以及一兩個(gè)基本的外圍組件,比如TCP/IP協(xié)議棧,就足夠了。
- 如果物聯(lián)網(wǎng)應用需要實(shí)現協(xié)同功能,則必須包含物聯(lián)網(wǎng)協(xié)同框架這個(gè)功能模塊。通過(guò)引入物聯(lián)網(wǎng)協(xié)同框架,可以實(shí)現包括物聯(lián)網(wǎng)應用終端設備之間的交互和協(xié)同,物聯(lián)網(wǎng)設備與物聯(lián)網(wǎng)運平臺之間的交互和協(xié)同,甚至包括物聯(lián)網(wǎng)終端設備與智能手機之間的協(xié)同等功能。
- 如果僅僅提供連接和協(xié)同,并不能滿(mǎn)足物聯(lián)網(wǎng)的應用需求,那么物聯(lián)網(wǎng)的領(lǐng)域應用可以把物聯(lián)網(wǎng)操作系統的智能引擎利用起來(lái)。一個(gè)典型的場(chǎng)景就是,用戶(hù)可以通過(guò)語(yǔ)音控制物聯(lián)網(wǎng)設備,可以與物聯(lián)網(wǎng)設備進(jìn)行對話(huà)。物聯(lián)網(wǎng)系統可以通過(guò)學(xué)習,來(lái)理解用戶(hù)的行為,并對用戶(hù)的行為進(jìn)行預測和反饋。
可以看出,物聯(lián)網(wǎng)操作系統完整的解決了物聯(lián)網(wǎng)的三個(gè)功能性需求。
最后需要說(shuō)明的是,雖然我們把物聯(lián)網(wǎng)操作系統分為了內核,外圍組件等四個(gè)層次,但是這些層次之間,并不是嚴格的涇渭分明,而是具備一些依賴(lài)關(guān)系的。比如外圍功能組件要依賴(lài)物聯(lián)網(wǎng)操作系統內核機制,而協(xié)同框架又依賴(lài)于某些外圍功能組件。同時(shí),公共智能引擎也需要依賴(lài)于內核,外圍組件等來(lái)作為基礎支撐。這些不同的功能層次之間,通過(guò)預先定義好的接口,既能夠水乳交融的集成在一起,形成完成的解決方案,又可以根據應用場(chǎng)景的需求,只保留其中的一個(gè)或幾個(gè)部分,而仍然可以整齊劃一。同時(shí),集成開(kāi)發(fā)環(huán)境提供統一的API,使整個(gè)系統表現出一致的風(fēng)格。
i) 常見(jiàn)物聯(lián)網(wǎng)操作系統架構分析
i. Google Brillo物聯(lián)網(wǎng)操作系統分析
下面列舉幾個(gè)比較典型的物聯(lián)網(wǎng)操作系統,來(lái)進(jìn)一步說(shuō)明物聯(lián)網(wǎng)操作系統的功能和架構。首先看一下業(yè)界比較有影響力的Brillo操作系統,這是Google發(fā)布的專(zhuān)門(mén)面向物聯(lián)網(wǎng)應用的操作系統。Brillo的架構如下:
可見(jiàn),Brillo與Android一樣,仍然使用Linux內核作為其操作系統內核。這樣Linux在物聯(lián)網(wǎng)領(lǐng)域應用的一些弊端,就被完整的繼承到了Brillo中。比如,Linux內核對運行內存的要求較高,同時(shí)Linux還需要CPU硬件支持MMU(內存管理單元)功能,等等。這樣就間接導致Brillo的運行內存要求較高,按照官方說(shuō)法,要至少32M內存。同時(shí)要求CPU支持MMU功能。這樣大量的低端CPU或MCU,比如STM32系列,就無(wú)法運行Brillo,因為這些CPU的片上內存一般不超過(guò)1M,同時(shí)一般不提供MMU功能。由于這些原因,大大限制了Brillo的應用范圍。
在Linux內核之上,Brillo保留了Android操作系統里面的一個(gè)硬件訪(fǎng)問(wèn)層(HAL,Hardware Access Layer)。這個(gè)層次的主要功能,就是對底層的硬件進(jìn)行統一的抽象,以更加友好一致的方式,提供給應用程序訪(fǎng)問(wèn)。從功能上說(shuō),這一層軟件并無(wú)明顯的價(jià)值,但是其簡(jiǎn)化了對硬件的操作,給程序開(kāi)發(fā)帶來(lái)較大的便利。按照一般的軟件分層規則,這一層軟件應該還是屬于操作系統內核的一部分,因為它并沒(méi)有提供額外的附加功能,在代碼量上,與內核相比,也非常少,在某些情況下甚至可以忽略掉。因此,在展示上,應該與操作系統內核放在一起。但是Google為了區分這一層軟件是來(lái)源于A(yíng)ndroid系統,而不是Linux,因此把它單獨列出來(lái)了。
再往上,就是支撐操作系統運行的一些輔助功能組件了。主要有在線(xiàn)更新(OTA Updates),安全相關(guān)的一些組件和機制,以及在線(xiàn)數據分析和性能測量等。在線(xiàn)更新機制,可以使運行Brillo操作系統的物聯(lián)網(wǎng)設備,在運行過(guò)程中就可以更新軟件,而不用中斷運行。這個(gè)特性是非常有價(jià)值的,Brillo是一個(gè)復雜的系統,其版本更迭和補丁發(fā)布必定非常頻繁。如果不提供在線(xiàn)更新功能,沒(méi)發(fā)布一個(gè)新的版本和補丁,都需要現場(chǎng)更新物聯(lián)網(wǎng)設備,顯然是不可操作的。因此Google設計了這個(gè)特性來(lái)支撐在線(xiàn)實(shí)時(shí)軟件更新功能。只要與Brillo的后臺服務(wù)器連接上,Brillo會(huì )自動(dòng)檢查更新,并安排更新,而不會(huì )影響設備的正常運行。而安全機制則提供了設備認證,數據加密等功能,這是任何網(wǎng)絡(luò )流解決方案必須要提供的機制,在后面部分會(huì )詳細介紹。而在線(xiàn)性能統計和分析功能,則可以幫助用戶(hù)實(shí)時(shí)查看和分析設備狀態(tài),性能,消息數量等數據,為設備維護人員提供一個(gè)基礎的管理平臺。開(kāi)發(fā)者可以根據需要,選擇啟用或關(guān)閉這些外圍輔助功能。
再上面,就是Weave框架了。Brillo操作系統內嵌了對Weave的支持,把Weave作為支撐物聯(lián)網(wǎng)應用的主要功能模塊。但是具有諷刺意味的是,Weave并沒(méi)有把Brillo作為唯一的底層操作系統,反而一直強調“跨平臺,可移植”等特性??梢?jiàn),在Google內部,Weave要更強勢一些,Brillo的定位或者價(jià)值,仍然存疑。
從架構上看,Brillo是完全符合我們前面提到的物聯(lián)網(wǎng)操作系統參考架構的。比如Linux內核和Android HAL組合到一起,就對應物聯(lián)網(wǎng)操作系統內核這一層。在線(xiàn)升級,安全機制,性能測量和數據分析等這些輔助功能組件,對應于外圍功能組件這一層。Weave則對應于物聯(lián)網(wǎng)協(xié)同框架這一層。如下圖所示:
需要說(shuō)明的是,在Google提供的官方架構圖中,Weave模塊是與OTAUpdates等外圍輔助模塊位于同一個(gè)層次的。這樣無(wú)法反映出Weave和Brillo之間的關(guān)系。Weave是依賴(lài)于Brillo操作系統而運行的,Weave又不屬于Brillo操作系統的范疇。因此正確的表示方法應該是把Weave放在Brillo上面,既體現了依賴(lài)邏輯,又體現了這兩者相互獨立的關(guān)系。不論哪種處理方式,都不會(huì )帶來(lái)理解上的偏差。
ii. Ostro物聯(lián)網(wǎng)操作系統分析
Ostro項目是由Intel主導創(chuàng )建的一個(gè)開(kāi)源物聯(lián)網(wǎng)操作系統項目,它的目的是開(kāi)發(fā)一個(gè)針對物聯(lián)網(wǎng)應用的專(zhuān)門(mén)操作系統,這個(gè)操作系統的名字也叫做Ostro。它是基于Linux內核進(jìn)行裁剪,并針對物聯(lián)網(wǎng)領(lǐng)域的智能設備進(jìn)行定制,專(zhuān)門(mén)應用于物聯(lián)網(wǎng)的操作系統。
它可以被安裝在USB存儲桿或者SD卡上,可以直接啟動(dòng)物聯(lián)網(wǎng)硬件設備。當然,物聯(lián)網(wǎng)應用開(kāi)發(fā)者也可以根據自己的需要,對Ostro進(jìn)行二次裁剪,自定義一個(gè)符合自身應用場(chǎng)景的全新內核。這個(gè)特征完全符合物聯(lián)網(wǎng)操作系統的要求。
它所宣稱(chēng)的最主要特征,包括可裁剪,安全,豐富的開(kāi)發(fā)環(huán)境,以及面向物聯(lián)網(wǎng)的豐富組件和服務(wù)支持等。主要特點(diǎn)如下:
- 基于Linux操作系統進(jìn)行裁剪,專(zhuān)門(mén)用于IoT領(lǐng)域;
- 支持Intel的Quark和Intel Atom處理器;
- 支持Node.js,Python,Java和C/C++等語(yǔ)言進(jìn)行應用程序開(kāi)發(fā);
- 程序員可通過(guò)RestFUL API,對設備狀態(tài)進(jìn)行查詢(xún)。支持符合OCF標準的設備發(fā)現機制;
- 支持符合OCF標準的JavaScript API;
- 安全特性,比如可信啟動(dòng),應用程序內存隔離,權限管理,OS鏡像完整性驗證等機制;
- 豐富的通信技術(shù)支持,包括Bluetooth*/BLE, WiFi, 6LowPAN, 以及CAN bus等;
- 支持VirtualBox虛擬機;
- 可以基于Yocto工具鏈進(jìn)行編譯開(kāi)發(fā)和裁剪。
下圖示意了Ostro物聯(lián)網(wǎng)操作系統的整體架構:
下面按照從上往下的順序,對Ostro的各個(gè)層次做簡(jiǎn)要介紹。
IoT應用程序:這個(gè)層次包含了所有使用Ostro編程接口所開(kāi)發(fā)的物聯(lián)網(wǎng)應用程序。當前的Ostro版本并沒(méi)有開(kāi)發(fā)任何特定的應用程序實(shí)例,僅僅提供了如何開(kāi)發(fā)應用程序的指導以及一些簡(jiǎn)單的代碼片段。隨著(zhù)Ostro的發(fā)展,或許會(huì )有針對特定典型場(chǎng)景的物聯(lián)網(wǎng)應用程序,比如智慧家庭應用程序,被納入到這個(gè)層次中發(fā)布。
編程接口:編程接口是Ostro提供給應用程序開(kāi)發(fā)者使用的,用于開(kāi)發(fā)各種各樣的物聯(lián)網(wǎng)應用程序。當前來(lái)說(shuō),Ostro提供了多種多樣的編程接口供程序員根據自己的喜好和特定應用場(chǎng)景調用。主要有:
- Java和Python編程接口,物聯(lián)網(wǎng)應用程序開(kāi)發(fā)者可以采用Python和Java語(yǔ)言,開(kāi)發(fā)特定的應用程序。Ostro提供了常用的支持類(lèi)庫;
- Node.JS編程接口。Ostro提供了Node.JS的運行期支持,以及特定的一些JavaScript API(以Node.JS模塊方式提供)。這些Java Script API涵蓋了相對廣泛的物聯(lián)網(wǎng)應用場(chǎng)景,比如包含了開(kāi)放連接基金會(huì )(OCF)定義的API接口。這樣就非常便于物聯(lián)網(wǎng)應用程序開(kāi)發(fā)者直接使用這些API,調用IoTivity等協(xié)同框架的功能;
- Soletta編程接口。Soletta是一個(gè)開(kāi)源的物聯(lián)網(wǎng)應用程序開(kāi)發(fā)框架,它提供了一些常用的物聯(lián)網(wǎng)應用開(kāi)發(fā)庫,便于程序員方便快速的開(kāi)發(fā)物聯(lián)網(wǎng)應用程序。Soletta是一種編程框架,可以采用傳統的C語(yǔ)言進(jìn)行應用程序開(kāi)發(fā),也可以采用一種叫做“基于流的編程語(yǔ)言”(Flow-based Programming)來(lái)進(jìn)行物聯(lián)網(wǎng)應用的開(kāi)發(fā)。
總之,Ostra提供了相對豐富的變成框架,供應用開(kāi)發(fā)者選擇。
物聯(lián)網(wǎng)協(xié)同框架:Ostro內置了對IoTivity的支持。IoTivity 是一個(gè)開(kāi)源的軟件框架,用于無(wú)縫的支持設備到設備的互聯(lián),以及人與設備的簡(jiǎn)便互聯(lián)。其主要是為了滿(mǎn)足物聯(lián)網(wǎng)開(kāi)發(fā)的需要,構建物聯(lián)網(wǎng)的生態(tài)系統,使得設備和設備之間可以安全可靠的連接。而IoTivity 通過(guò)提供一系列框架和服務(wù)來(lái)加速設備的互聯(lián)應用開(kāi)發(fā)。該項目由 Open Interconnect Consortium (OIC) 組織贊助,相當于是 OIC 標準的一個(gè)參考實(shí)現。在本書(shū)的第二部分中,有詳細的描述。
Ostro服務(wù):Ostro服務(wù)主要是指系統級的一些進(jìn)程或線(xiàn)程,這些進(jìn)程或線(xiàn)程負責管理網(wǎng)絡(luò )連接,加載必要的支撐服務(wù),以及提供進(jìn)程間通信(IPC)支持等。在Ostro操作系統中,保留了大部分Linux操作系統所支持的systemd,D-Bus等。
除此之外,在線(xiàn)軟件更新也是Ostro提供的基本服務(wù)之一。這是專(zhuān)門(mén)為物聯(lián)網(wǎng)應用所提供的一個(gè)基本服務(wù),可以快速的完成物聯(lián)網(wǎng)設備的軟件更新,而且只需要最小的軟件下載量,只需要重新啟動(dòng)必要的物聯(lián)網(wǎng)設備即可,而不需要重新啟動(dòng)所有的物聯(lián)網(wǎng)設備。
在線(xiàn)軟件更新是確保物聯(lián)網(wǎng)可管理可維護的核心機制,通過(guò)物聯(lián)網(wǎng)操作系統與后端云平臺的協(xié)同,使得物聯(lián)網(wǎng)設備的軟件始終保持在最新和最安全的狀態(tài)。
Ostro基本庫:Ostro基本庫包括隨Linux內核一起發(fā)行的最基本運行庫,比如最常用的C運行庫等。當然,Ostro可以根據需要,動(dòng)態(tài)的擴展基本庫的范圍。
Linux內核:Ostro的內核就是通用的Linux內核,它包括了最基本的驅動(dòng)程序支持,硬件適配支持,網(wǎng)絡(luò )支持,文件系統以及設備管理機制等。為了適應物聯(lián)網(wǎng)的應用,Ostro對Linux內核做了一些微調,使得內核可以支持更多的傳感器(Sensor),能夠支持更多的連接類(lèi)型,比如藍牙/WiFi/Zigbee等等。
但是由于Linux內核本身的復雜性和不可分割性,使得Ostro物聯(lián)網(wǎng)操作系統很難具備物聯(lián)網(wǎng)操作系統所應該具備的高度伸縮性要求。
從上面的分析中可以看出,Ostro物聯(lián)網(wǎng)操作系統與我們定義的物聯(lián)網(wǎng)操作系統分層模型基本上是對應的,下圖示意了這種對應關(guān)系:
iii. HelloX物聯(lián)網(wǎng)操作系統分析
HelloX是由國內操作系統愛(ài)好者開(kāi)發(fā)的完全開(kāi)源物聯(lián)網(wǎng)操作系統,下圖示意了HelloX的整體架構:
從整體結構上可以看出,HelloX操作系統也符合物聯(lián)網(wǎng)操作系統的分層結構。最下方是驅動(dòng)程序層,實(shí)現了大多數常見(jiàn)硬件的驅動(dòng)支持,包括USB,以太網(wǎng),SPI/UART等等。嚴格來(lái)說(shuō),驅動(dòng)程序層應該屬于內核的一部分。在HelloX的實(shí)現中,為了突出HelloX豐富的驅動(dòng)支持的特點(diǎn),把驅動(dòng)程序單獨拿出來(lái),作為一個(gè)層次展示。
在驅動(dòng)層之上,是內核層。內存管理,任務(wù)調度等機制,都是在內核中實(shí)現的。與其它物聯(lián)網(wǎng)操作系統基于Linux內核定制的思路不同,HelloX的內核是根據物聯(lián)網(wǎng)的特征,完全全新開(kāi)發(fā)的。內核中各模塊之間是松耦合的,可以根據需要,靈活的裁剪或者增加任何內核模塊,這樣就確保了內核的可伸縮性,能夠滿(mǎn)足多種多樣的碎片化硬件需求。也可以根據需要,替換內核中的缺省模塊或者算法,比如可以采用自定義的任務(wù)調度算法,替換內核中缺省的基于優(yōu)先級輪詢(xún)的調度算法。也可以采用更加實(shí)時(shí)的內存分配算法(比如固定尺寸鏈表法),來(lái)替換內核中缺省的空閑鏈表內存分配算法,等等。對于MMU的支持,HelloX也是作為可選模塊來(lái)實(shí)現,裁剪掉MMU功能,不會(huì )對系統中的其它模塊產(chǎn)生任何功能上的影響(但是內存保護,虛擬內存等機制就不能用了)。
在內核層之上,是外圍組件層。HelloX提供了包括網(wǎng)絡(luò ),文件系統,系統調用等在內的多種多樣的外圍組件,供物聯(lián)網(wǎng)應用程序開(kāi)發(fā)調用。
目前的HelloX,移植IoTivity物聯(lián)網(wǎng)協(xié)同框架,作為自己的協(xié)同框架。未來(lái)根據需要,HelloX會(huì )開(kāi)發(fā)更加靈活的物聯(lián)網(wǎng)協(xié)同框架,與HelloX捆綁使用。
基于這些基本組件和功能,可以基于HelloX操作系統實(shí)現廣泛的物聯(lián)網(wǎng)應用,比如家庭網(wǎng)關(guān),智能攝像頭,智慧家庭中的家電設備,抄表,e-Health等。目前HelloX已經(jīng)實(shí)現了同多個(gè)物聯(lián)網(wǎng)云平臺的對接和集成。
推薦閱讀: