基于Android平臺(tái)的車(chē)載信息娛樂(lè)系統(tǒng)架構(gòu)研究
每個(gè)程序運(yùn)行在自身的進(jìn)程里,但開(kāi)發(fā)者能夠?qū)懸粋€(gè)服務(wù)運(yùn)行在不同的進(jìn)程中,一些對(duì)象在進(jìn)程間傳遞也是允許的。在Android平臺(tái)上,一個(gè)進(jìn)程通常不能進(jìn)入其他進(jìn)程內(nèi)存。因此,兩個(gè)進(jìn)程間如果相互通信,需要把他們的對(duì)象分解成操作系統(tǒng)可以識(shí)別的基礎(chǔ)類(lèi)型,并且通過(guò)進(jìn)程的邊界來(lái)控制對(duì)象。附帶SDK的AIDL工具自動(dòng)生成控制代碼段,AIDL是用來(lái)生成在兩個(gè)進(jìn)程之間通信代碼的一種接口描述語(yǔ)言。AIDL IPC機(jī)制就是使用代理類(lèi)在客戶端和實(shí)現(xiàn)端傳遞參數(shù)。
3 Android應(yīng)用在車(chē)載電子的一種架構(gòu)
Android擴(kuò)展了汽車(chē)的總體結(jié)構(gòu),基本架構(gòu)如圖1所示,自定義的Android平臺(tái)應(yīng)用在汽車(chē)功能模塊和支持組件的一邊。這種擴(kuò)展的目的是提供一種允許可信任的應(yīng)用程序訪問(wèn)汽車(chē)功能模塊(車(chē)輛制動(dòng)、轉(zhuǎn)向或電力傳動(dòng)分配)的安全機(jī)制,而不可信任的程序被隔離并且不可以訪問(wèn)。應(yīng)用程序之間的這種強(qiáng)制性的安全策略是源于可靠性要求的IVI系統(tǒng)。通過(guò)汽車(chē)管理類(lèi)可信任應(yīng)用程序有機(jī)會(huì)訪問(wèn)一些特性(CAN總線),但處理不當(dāng)也可能危及車(chē)輛安全(例如通過(guò)連續(xù)發(fā)送無(wú)效的數(shù)據(jù)幀使得CAN總線帶寬飽和)。這種方案的主要特點(diǎn)是使上層邏輯去耦合,那樣就可以方便上層應(yīng)用獲取并處理來(lái)自底層數(shù)據(jù)。
3.1 汽車(chē)管理模塊
從上圖可知,汽車(chē)管理模塊可以看成是負(fù)責(zé)車(chē)載應(yīng)用程序與Android底層交互的一個(gè)中間類(lèi)庫(kù),只有通過(guò)它,車(chē)載應(yīng)用程序才可以獲取相應(yīng)底層數(shù)據(jù)。
它有兩個(gè)接口:一個(gè)是對(duì)應(yīng)于應(yīng)用程序而另一個(gè)是對(duì)應(yīng)平臺(tái)的組件,它是在Android SDK上面開(kāi)發(fā)的并且擁有平臺(tái)認(rèn)證的一款應(yīng)用程序。因?yàn)檫@個(gè)管理類(lèi)不屬于平臺(tái)本身,所以用戶在沒(méi)有專(zhuān)業(yè)人員幫助時(shí)不能自行更新。
3.2 與應(yīng)用程序之間的交互
Android是基于不透明的IPC之間的通信模型。應(yīng)用程序?qū)⑵涔δ芙唤o操作系統(tǒng),在運(yùn)行時(shí),其他的應(yīng)用程序可以獲得他們的功能?;旧希脚_(tái)提供了后期管理和維護(hù)代碼的能力,這種模型也可以用于在第三方應(yīng)用程序和汽車(chē)管理類(lèi)之間的交互。
汽車(chē)管理類(lèi)處理汽車(chē)功能模塊通過(guò)屬性android.permission.car.speed.read和android.permission.car.speed.write。對(duì)于每一個(gè)屬性(例如汽車(chē)總線發(fā)送實(shí)時(shí)速度),Android提供兩種權(quán)限,創(chuàng)建并且指派給管理類(lèi)。
利用預(yù)先定義的安全級(jí)別,它可以指定不同安全級(jí)別擁有以下的權(quán)限:
①所有的。任何人可以訪問(wèn)應(yīng)用程序
②通常情況。訪問(wèn)是有權(quán)限決定的,但是一些應(yīng)用程序的權(quán)限沒(méi)有具體指出權(quán)限人;在程序安裝后,權(quán)限會(huì)被手動(dòng)設(shè)置。
③危險(xiǎn)。訪問(wèn)時(shí)有權(quán)限限制的,用戶在安裝時(shí)必須有詳盡的安全許可。
④簽名。訪問(wèn)是有權(quán)限限制的,只要應(yīng)用程序獲得平臺(tái)的認(rèn)證,那么權(quán)限就會(huì)自動(dòng)同意。
平臺(tái)認(rèn)證就是車(chē)載設(shè)計(jì)商在開(kāi)發(fā)設(shè)計(jì)過(guò)程中使用的簽署平臺(tái)。它也用于簽署汽車(chē)管理類(lèi)。如果一個(gè)第三方申請(qǐng)了此證書(shū),它就具有完整的控制汽車(chē)擴(kuò)展(事實(shí)上汽車(chē)管理類(lèi)只是一個(gè)簽署應(yīng)用平臺(tái)證書(shū)的應(yīng)用程序)。通過(guò)以下屬性定義的汽車(chē)功能,能夠通過(guò)高級(jí)別的AIDL接口去訪問(wèn):
這種讀/寫(xiě)的方式允許通過(guò)輸入/輸出來(lái)訪問(wèn)屬性的值。通過(guò)增加或者刪除監(jiān)聽(tīng)器的方法來(lái)允許注冊(cè)或者取消相關(guān)的回調(diào)函數(shù),該通知的屬性值是可以改變的。汽車(chē)管理類(lèi)繼承了此接口。個(gè)人的電話是要被Android權(quán)限相關(guān)的屬性核實(shí)的,如果來(lái)電者是被允許執(zhí)行的,那么汽車(chē)管理類(lèi)進(jìn)程會(huì)自動(dòng)處理,否則就會(huì)拋出一個(gè)異常。
在開(kāi)發(fā)應(yīng)用時(shí),開(kāi)發(fā)者需要知道其屬性名稱(chēng)以及數(shù)據(jù)的類(lèi)型才能夠開(kāi)發(fā)第三方應(yīng)用程序。而且所有的交互發(fā)生在先前的AIDL接口。這就意味著,多虧Android系統(tǒng)的架構(gòu),開(kāi)發(fā)者并不需要了解整個(gè)SDK而是只要知道AIDL文件定義的電話屬性和AIDL文件描述的回調(diào)函數(shù)。而且,如果不同的IVI來(lái)自不同的生產(chǎn)商,但有著相同的屬性功能,那么第三方應(yīng)用程序使用這樣的屬性能夠無(wú)縫隙地運(yùn)行在IVI上。
為了證實(shí)以上架構(gòu)的實(shí)用性,開(kāi)發(fā)了一塊實(shí)現(xiàn)完整功能的工作模塊,由自定義的Android發(fā)布版的概念驗(yàn)證組成。該模塊已經(jīng)通過(guò)Andr-oid模擬器的測(cè)試,基于ARM處理器,自定制模式的典型功能和IVI上面的用戶界面,并在有英特爾Atom處理器的上網(wǎng)本上運(yùn)行。
結(jié)語(yǔ)
本文概述了車(chē)載電子系統(tǒng)的相關(guān)知識(shí),并介紹了Google Android系統(tǒng)背景知識(shí);設(shè)計(jì)了一個(gè)基于Android架構(gòu)的車(chē)載電子可擴(kuò)展平臺(tái),以適應(yīng)個(gè)性化汽車(chē)發(fā)展的需要。下一步的工作是引導(dǎo)該系統(tǒng)運(yùn)行在自定義硬件上,并獲取實(shí)時(shí)的汽車(chē)數(shù)據(jù)。
評(píng)論