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