車載電子行業有著巨大的市場潛力,因為車主們期望將用在手機上面的某些應用軟件直接運行在自己的私家車上。但同時也面臨諸多挑戰,車載電子廠商需要滿足不同汽車型號的要求,而且即便是同一品牌的不同車型往往也需要不同的定制。如今的車主們都希望能夠像使用智能手機一樣隨心所欲地安裝或者刪除應用軟件。要將手機上使用的軟件移植到車載電子系統中,開發者必須面對一個嚴峻的挑戰,即第三方應用程序必須在一個隔離的環境中運行,以此來阻止對其他車載功能模塊的干擾,以及可能使車主信息泄露等威脅。同時,第三方應用軟件必須跟車載其他系統有效地結合起來,以便給用戶帶來更加完美的用戶體驗。最后,第三方軟件開發者必須針對車載系統的共同特征,開發一套公用平臺,以方便不同的汽車制造商進行移植,而且可以使同一個應用程序無縫隙地在不同的品牌的轎車上使用。 本文是對谷歌Android系統應用的一種創新擴展,它可以對第三方應用程序進行隔離,并使可信任的第三方應用程序有訪問汽車功能軟件層的權限,加強了對汽車安全的防范! 1 背景知識 人們直觀上感覺汽車內部的消費電子似乎只是提供同智能手機、PDA以及MP3類似的功能,但是由于其在使用時不可避免地要與汽車其他功能模塊接觸,所以車載娛樂電子比其他消費電子要更加復雜。一般情況下,汽車上面的大多數應用軟件都是廠商在汽車生產的時候已經固化好,它們一般會隨著汽車的報廢而報廢,所以其生命周期一般是手機或者MP3的5~10倍。這就要求車載電子設計公司支持對其出廠后的應用程序進行長期升級。但由于電子產品更新換代很快,僅靠軟件升級很大程度上提高了成本。 GENIVI聯盟去年同一些汽車巨頭、芯片設計巨頭、軟件開發公司等召開了一次大會,主要討論的是怎樣為車載電子產品建立一個標準公開的開發平臺。GENIVI提出開發一個可擴展的架構,可能會應用到下一代車載電子上面,它需要在以下方面進行努力: ①通過從開源社區以及專業軟件開發聯盟獲取無縫隙的軟件補丁以及插件,使其可以增加更多的內容和特點,并始終要考慮系統的安全性以及可靠性! ②增加車主和乘客的切身享受,并且盡量使其性價比更高,努力降低設備成本! GENIVI的軟件架構利用英特爾的Moblin平臺作為框架,通過增加或者刪除組件來滿足特定汽車需求和使用。支持用戶自定義安裝應用程序正在討論,同時,許多可供選擇的平臺正在磋商中,谷歌的Android系統便是其中之一! 要強調的是,目前被GENIVI和Moblin重點強調支持的汽車電子硬件設備(CAN總線上網絡特定的設備),當前在Android上卻未能實現。但由于Android對開源的大力支持,允許用戶對終端程序安裝并卸載,目前Moblin對這些功能尚未許可! 2 谷歌Android 2007年底,在谷歌主持召開的開放手機聯盟大會上,一個完全免費開放的手機平臺誕生了,其目標是要延伸到更為廣泛的硬件設備當中。谷歌Android基本的特點是其開放性,免費的SDK源碼開發者可以很容易下載得到,Google的號召力以及Android的開源性迅速促使開發者社區的形成。 Android是一個主要為手機設備提供的開發平臺,它包含一個系統內核、中間層和底層驅動以及一些綁定的應用程序。整個項目有Apache許可證版本2授權,因此移動運營商、軟件企業、任何開發人員可以添加或刪除功能。按照2.0范例協議,即使不是內容提供商,共享應用程序都是可能的。該平臺允許一些二次開發商根據自己的需要添加新的功能或者應用,所以可以很容易開發出豐富的端對端應用程序! 2.1 結構概述 Android系統架構由5部分組成:Linux內核、庫函數、Android運行態、應用程序框架、應用程序。 在線性架構的底層是Linux內核,基本上是Linux2.6.27版本。通過Linux內核為Android更新補丁,內核負責管理系統服務程序以及驅動模塊、內存管理、任務調度。根文件系統使用rootfs,而數據及文件使用YAFFS,它是專門為NAND和NOR存儲器設計驅動的文件系統。 應用程序框架和Android運行時態主要通過C/C++庫,這部分庫包括標準的C庫、多媒體庫、圖形界面庫、瀏覽器、字體庫以及數據庫。 Android運行態包括核心庫以及Java Dalvik虛擬機,Dalvik是一種允許在有限的內存上運行多進程的虛擬機,每一個程序運行在一個獨立的Linux進程里! 應用程序框架由許多類、接口、包組成。它的目的是提供一種簡單、連續的方式去管理圖形化用戶接口,訪問資源內存,收到通知,或者處理來電,主要的組成部分有可視系統、activity類管理、共享管理、資源管理、通知管理、電話管理! 2.2 安全性 Android內部進程通信以及安全性主要指在安裝第三方應用的情況下,盡可能保證系統的穩定性。底層的許可機制是由Linux內核以及文件系統提供的,基本上可以滿足基于Linux內核的其他系統。由于Android設備針對的是單用戶,因此多用戶服務的設備靠分配唯一的標識才能應用。 此外,Android是靜態的安全許可系統,它在程序安裝時被強制使用! 2.3 進程間的通信 Android有兩種進程間通信的模型:intent和code綁定。intent類框架提供上層的進程間通信,這是最好的方式,可以動態地利用SDK包進行開發,并與上層應用程式綁定。intent類包含了幾個用來描述調用者真正意圖的域,調用者發送intent給Android的intent解析器,And-roid系統將通過intent過濾器從所有的應用程序中選擇最適合處理該intent的activity類。intent域包含了期望的處理方式、類以及數據字符、數據的MIME類型! intent能夠被用來觸發activities,發送數據給廣播并啟動相應的服務。安全性方面的限制主要通過Android系統提供的權限框架類來實現。 每個程序運行在自身的進程里,但開發者能夠寫一個服務運行在不同的進程中,一些對象在進程間傳遞也是允許的。在Android平臺上,一個進程通常不能進入其他進程內存。因此,兩個進程間如果相互通信,需要把他們的對象分解成操作系統可以識別的基礎類型,并且通過進程的邊界來控制對象。附帶SDK的AIDL工具自動生成控制代碼段,AIDL是用來生成在兩個進程之間通信代碼的一種接口描述語言。AIDL IPC機制就是使用代理類在客戶端和實現端傳遞參數! 3 Android應用在車載電子的一種架構 Android擴展了汽車的總體結構,基本架構如圖1所示,自定義的Android平臺應用在汽車功能模塊和支持組件的一邊。這種擴展的目的是提供一種允許可信任的應用程序訪問汽車功能模塊(車輛制動、轉向或電力傳動分配)的安全機制,而不可信任的程序被隔離并且不可以訪問。應用程序之間的這種強制性的安全策略是源于可靠性要求的IVI系統。通過汽車管理類可信任應用程序有機會訪問一些特性(CAN總線),但處理不當也可能危及車輛安全(例如通過連續發送無效的數據幀使得CAN總線帶寬飽和)。這種方案的主要特點是使上層邏輯去耦合,那樣就可以方便上層應用獲取并處理來自底層數據! 3.1 汽車管理模塊 從上圖可知,汽車管理模塊可以看成是負責車載應用程序與Android底層交互的一個中間類庫,只有通過它,車載應用程序才可以獲取相應底層數據! 它有兩個接口:一個是對應于應用程序而另一個是對應平臺的組件,它是在Android SDK上面開發的并且擁有平臺認證的一款應用程序。因為這個管理類不屬于平臺本身,所以用戶在沒有專業人員幫助時不能自行更新! 3.2 與應用程序之間的交互 Android是基于不透明的IPC之間的通信模型。應用程序將其功能交給操作系統,在運行時,其他的應用程序可以獲得他們的功能;旧,平臺提供了后期管理和維護代碼的能力,這種模型也可以用于在第三方應用程序和汽車管理類之間的交互! 汽車管理類處理汽車功能模塊通過屬性android.permission.car.speed.read和android.permission.car.speed.write。對于每一個屬性(例如汽車總線發送實時速度),Android提供兩種權限,創建并且指派給管理類。 利用預先定義的安全級別,它可以指定不同安全級別擁有以下的權限: ①所有的。任何人可以訪問應用程序 ②通常情況。訪問是有權限決定的,但是一些應用程序的權限沒有具體指出權限人;在程序安裝后,權限會被手動設置! ③危險。訪問時有權限限制的,用戶在安裝時必須有詳盡的安全許可! ④簽名。訪問是有權限限制的,只要應用程序獲得平臺的認證,那么權限就會自動同意。 平臺認證就是車載設計商在開發設計過程中使用的簽署平臺。它也用于簽署汽車管理類。如果一個第三方申請了此證書,它就具有完整的控制汽車擴展(事實上汽車管理類只是一個簽署應用平臺證書的應用程序)。通過以下屬性定義的汽車功能,能夠通過高級別的AIDL接口去訪問: 這種讀/寫的方式允許通過輸入/輸出來訪問屬性的值。通過增加或者刪除監聽器的方法來允許注冊或者取消相關的回調函數,該通知的屬性值是可以改變的。汽車管理類繼承了此接口。個人的電話是要被Android權限相關的屬性核實的,如果來電者是被允許執行的,那么汽車管理類進程會自動處理,否則就會拋出一個異常! 在開發應用時,開發者需要知道其屬性名稱以及數據的類型才能夠開發第三方應用程序。而且所有的交互發生在先前的AIDL接口。這就意味著,多虧Android系統的架構,開發者并不需要了解整個SDK而是只要知道AIDL文件定義的電話屬性和AIDL文件描述的回調函數。而且,如果不同的IVI來自不同的生產商,但有著相同的屬性功能,那么第三方應用程序使用這樣的屬性能夠無縫隙地運行在IVI上。 為了證實以上架構的實用性,開發了一塊實現完整功能的工作模塊,由自定義的Android發布版的概念驗證組成。該模塊已經通過Andr-oid模擬器的測試,基于ARM處理器,自定制模式的典型功能和IVI上面的用戶界面,并在有英特爾Atom處理器的上網本上運行! 結語 本文概述了車載電子系統的相關知識,并介紹了Google Android系統背景知識;設計了一個基于Android架構的車載電子可擴展平臺,以適應個性化汽車發展的需要。下一步的工作是引導該系統運行在自定義硬件上,并獲取實時的汽車數據。 |