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