?

基于Android車載終端的設備管理框架設計

2016-10-14 06:44李培明孫甲松
電子設計工程 2016年12期
關鍵詞:內核調用應用程序

李培明,孫甲松

(1.清華大學電子工程系北京100084;2.廈門雅迅網絡股份有限公司福建廈門361008)

基于Android車載終端的設備管理框架設計

李培明1,2,孫甲松1

(1.清華大學電子工程系北京100084;2.廈門雅迅網絡股份有限公司福建廈門361008)

為了實現對Android車載終端平臺新增的許多非Android原生系統中的外圍設備進行統一管理,本文提出了一種基于Android LocalSocket和Service的設備管理框架。該設備管理框架的整體層次結構包括應用程序、設備管理服務、守護進程、設備功能動態庫、內核設備驅動,以及設備硬件等多個層次。實際應用表明,該設備管理框架邏輯結構清晰,能夠較好地支持上層和底層的數據互通,有效地將Android系統中非Android原生的設備進行統一控制和管理,顯著提升了設備系統的穩定性,達到了設計要求。

Android;車載終端;設備管理框架;LocalSocket;Service

近幾年來,隨著移動互聯網時代的到來,Android操作系統已經從最初的智能手機領域逐漸進入教育、醫療、軍事、汽車、家居等重要領域,并已經成為移動平臺領域當之無愧的王者。2011年1月至3月,Android占領了全球大部分的手機市場,市場份額首次超過了塞班系統上升到全球第一[1];2012年第一季度數據顯示,Android占領了中國68.4%的智能手機操作系統市場,在全球市場占有率為52.5%[2]。Android在國內的發展不僅僅局限于作為智能手機操作系統,現在已經開始向作為其他移動終端操作系統的方向發展,例如移動互聯網設備、數字機頂盒、車載移動終端等領域。

Android平臺是一個標準的通用平臺,而在多媒體車載終端項目中增加了許多Android原生系統中沒有的設備,例如DVD、GPIO、音頻管理設備等。針對這些設備的控制,在Android原生系統中最常用的做法就是使用JNI方式進行控制。

JNI是Java Native Interface的縮寫,即“Java本地接口”。在Android系統代碼層次結構中,JNI處于Java代碼層與C/ C++本地代碼層之間的位置。在Android系統中提供JNI機制,使得在Java虛擬機內部運行的Java代碼能夠調用C/C++本地層的應用程序和庫,從而將Java代碼和C/C++本地層代碼緊密聯系在一起[3]。但是,在Android車載終端平臺上使用常規JNI方式進行設備管理的缺點在于:

使用JNI方式進行應用程序開發需要同時實現Java、JNI、C/C++3個層次的代碼,開發工作量大,開發難度也較大;應用程序如果要移植到其它平臺上,C/C++本地層代碼需要重新編寫,移植的工作量較大;從邏輯結構方面考慮,一個JNI動態庫一般只適合管理一個外圍設備,隨著外圍設備的不斷增加,難以對這些設備進行統一管理;而且系統使用過程中存在多個應用程序同時訪問一個設備的可能,易造成設備訪問不可控,系統穩定性差。此外,Java虛擬機為Java代碼提供了完善的安全機制使得Java代碼不會導致程序崩潰、濫用數據等,而一旦使用了JNI機制,這種安全機制就無能為力了[4]。

可見,在包含較多非Android原始設備的Android車載終端平臺上,對這些設備進行統一管理變得非常重要。為了實現對這些設備的統一管理,本文提出并設計了一種基于Android LocalSocket和Service的方式,實現專門針對Android車載終端平臺的設備管理框架。該框架能夠實現對系統中非Android原生的眾多設備進行統一控制和管理。

1 設備管理框架的邏輯結構圖

基于Android車載終端平臺的設備管理框架的邏輯結構,如圖1所示。

圖1 設備管理框架的邏輯結構圖

設備管理框架包括下述層次:應用程序、設備管理服務、守護進程、設備功能動態庫、內核設備驅動,以及設備硬件。

2 設備管理框架的實現原理

按照從上到下的調用層次關系,整個設備管理框架的設計實現原理如下。

2.1應用程序層

系統中對設備管理框架的調用操作均由應用程序發起。Android應用程序通過服務綁定接口綁定設備管理服務,綁定之后應用程序可獲得設備管理服務中的DVD、GPIO、音頻管理等所有設備的AIDL(Android Interface Definition Language,即Android接口描述語言)接口。這些接口就是DVD、GPIO、音頻管理等所有設備,通過設備管理服務的AIDL接口提供給應用程序調用的功能接口。

2.2設備管理服務層

設備管理服務位于Android系統中的Java框架層,介于Android應用程序和設備管理守護進程之間,并通過提供AIDL接口為應用程序提供接口調用。設備管理服務向上層應用程序提供AIDL調用接口,與下層的設備管理守護進程通過Socket通信方式進行數據通信,作用至關重要。通過對整個設備管理框架的功能劃分,設備管理服務需要實現如下功能:

1)設備管理服務感知應用程序的調用操作,并將應用程序的調用轉化為命令格式,并將這個命令通過Android LocalSocket(本質上即為Socket套接字)通信傳送給設備管理守護進程進行處理。

2)建立和維護與設備管理守護進程之間的數據通信,確定一套合理規范的通信協議。由于傳輸命令的內容較為簡單,設備管理服務向設備管理守護進程傳輸的命令格式定義為:“Device Name@Function#parameter1#parameter2#...# parameterN”,其中“DeviceName”表示設備名稱,“Function”表示功能接口名稱,“parameter1#parameter2#...#parameterN”則表示傳遞的參數,參數之間使用符號'#'分隔。以命令“GPIO@GPIO_UP#fmpowon”為例,其中“GPIO”表示設備名稱,“GPIO_UP”表示功能接口名稱,“fmpowon”表示功能接口的參數。

3)為DVD、GPIO、音頻管理等每個設備各創建(即手動編輯生成)一個AIDL接口文件,以供應用程序調用。這里的AIDL文件只是接口聲明,需要在設備管理服務的其它Java文件中完成這些AIDL接口的代碼實現,實現的主要內容是生成命令格式并向守護進程發送該命令。

由于設備管理服務對應用程序提供了設備管理框架內管理的所有設備的功能接口,設備管理服務的主要功能之一就是生成命令格式,命令格式中的“DeviceName”字段即包含了要調用的外圍設備模塊,設備管理服務通過這個字段就可以將AIDL接口與外圍設備聯系起來。

4)能穩定地為Android應用程序提供服務,數據處理及時,協調應用程序之間的執行和數據同步。

2.3設備管理守護進程層

設備管理守護進程位于Android系統中的HAL層(即硬件抽象層),介于設備管理服務和設備功能動態庫之間,通過Android LocalSocket與上層的設備管理服務進行數據通信,向下層則調用相應設備功能動態庫提供的接口,起著信息樞紐的作用。通過對整個設備管理框架的功能劃分,設備管理守護進程需要實現如下功能:

1)通過LocalSocket與上層的設備管理服務層進行Socket數據通信,通過發送心跳包檢測鏈路機制監測和更新上層客戶端的連接情況,準確接收設備管理服務層發送的命令包并解析命令格式。

2)根據設備管理服務中規定的命令格式,從接收到的命令中解析得到調用的目標設備名稱,這里假設是“GPIO”設備,如果是第一次調用該設備,則首先加載該設備的功能動態庫,然后調用設備功能動態庫中的初始化接口XXX_init(其中“XXX”是從命令中解析得到的設備名稱),例如GPIO_init,進行初始化工作,否則直接調用該設備功能動態庫的命令處理接口XXX_processCmd,例如GPIO_process Cmd,進行處理。

3)由于有些功能接口存在獲取響應數據的需求,這要求設備管理守護進程能夠接收來自設備功能動態庫的響應數據并向設備管理服務層進行傳遞,傳遞的數據封裝格式定義為:設備名稱+'@'+功能接口名稱+'#'+有效數據。以“AUDIO@GetMainVolume#80”為例,“AUDIO”表示音頻管理設備名稱,“GetMainVolume”表示功能接口名稱,即獲取系統主音量,“80”表示有效數據,即音量值。

4)能穩定地為設備管理服務層提供Socket連接的服務端,數據處理及時、可靠。

2.4設備功能動態庫層

在Linux系統中,Linux內核提供了用戶空間與內核空間進行交互的一組接口,即系統調用。這些系統調用接口允許應用程序受限地訪問硬件設備。系統調用是應用程序訪問內核空間的唯一手段;除了異常和陷入以外,它們是訪問內核唯一的合法入口[5]。

設備管理框架中采用設備功能動態庫和設備管理守護進程分離的設計思想。設備功能動態庫主要封裝與內核設備驅動進行交互的接口,應用程序向硬件模塊傳遞的命令也將到達設備功能動態庫。即設備功能動態庫向上層提供接口給設備管理守護進程調用,通過Linux系統調用向下層調用內核設備驅動。

設備功能動態庫層向下層調用內核設備驅動的基本過程如下:

1)在設備命令處理函數(即XXX_processCmd,其中XXX代表設備名稱)實現中,獲取守護進程傳遞下來的功能接口名稱和參數;

2)根據功能接口名稱查找設備動態庫中的功能接口名稱與功能接口函數指針映射表;

3)根據查找到的功能接口函數指針調用對應的功能接口函數;

4)在功能接口函數實現中,調用Linux操作系統提供的系統調用接口,實現對內核設備驅動的調用。同時,接收內核設備驅動返回的數據,并將數據返回給守護進程。數據上報給守護進程的格式定義為:“功能接口名稱+'#'+有效數據”。

2.5內核設備驅動層

內核設備驅動直接與底層硬件打交道,并按照硬件設備的具體工作方式,驅動硬件設備進行工作。內核設備驅動作為應用空間和硬件之間的紐帶,使得應用空間只需通過調用系統調用接口就可以讓硬件完成要求的工作[6]。

Linux內核通過系統調用接口,如open、read、write、ioctl、close等接口,與上層的設備功能動態庫進行通信[7],并通過設備驅動代碼操作下層的設備硬件,完成硬件操作功能。

2.6設備硬件層

設備硬件接收來自內核設備驅動的操作命令[8],執行硬件功能實現,并在必要時返回響應數據給應用程序。

3 設備管理框架的基本操作流程

設備管理框架的基本操作流程為:

1)Android應用程序通過綁定服務接口綁定設備管理服務,綁定之后,通過設備管理服務的AIDL接口文件,即可獲得設備管理服務中DVD、GPIO、音頻管理等所有設備提供的功能接口。

2)應用程序調用設備管理服務AIDL接口文件中提供的功能接口。

3)設備管理服務感知應用程序的調用操作,將應用程序的調用轉化為命令格式[9],并將該命令通過Android Local Socket方式發送給設備管理守護進程。

4)設備管理守護進程接收到調用命令,根據已定義的命令格式,對接收到的命令進行解析,得到調用的設備名稱。如果是第一次調用該設備[10],則首先加載該設備的功能動態庫,并調用動態庫中的初始化接口XXX_init進行初始化工作,否則直接調用該設備功能動態庫的命令處理接口XXX_processCmd進行命令處理。

5)設備功能動態庫接收守護進程傳遞下來的功能接口名稱和參數,并通過Linux操作系統提供的系統調用接口調用設備內核驅動。

6)設備內核驅動通過操作設備硬件寄存器等方式實現向下層調用硬件操作功能。

7)設備硬件接收內核設備驅動的硬件操作命令,執行硬件功能實現并在必要時返回響應數據。

4 結論

根據Android車載終端設備的特點,本文提出了設備管理框架的概念,設計并實現了專門針對Android車載終端的設備管理框架,將系統中非Android原生的設備進行統一控制和管理。

通過設計、實現及使用該設備管理框架,為應用程序開發提供了統一的接口,降低了應用程序開發的難度,提高了應用程序的代碼復用和可移植性;通過對設備的統一控制和管理,避免了多個應用同時對同一硬件進行操作存在的安全等隱患,有效地提高了系統的安全性。設備管理框架采用標準而又靈活的體系結構設計,非常易于后續擴展,同時易于在Android平臺的不同項目之間推廣和復用,給設備系統帶來了多方面的顯著有益效果,達到了設計要求。

[1]宋滟泓.Android獨大引二次開發潮中國廠商少積累難有作為[J].IT時代周刊,2012(6):51-52.

[2]百度百科.Android[EB/OL].[2015-01-25].http://baike.baidu.com/subview/1241829/9322617.htm.

[3]韓超,梁泉.Android系統原理及開發要點詳解[M].北京:電子工業出版社,2010.

[4]阿耀.JNI:使用Java調用本地C代碼[EB/OL].(2011-09-16)[2015-01-25].http://www.zdyc.net/html/diary/newWrite/ showlog_vm/sid=1/cat_id=1/log_id=214?sid=1&cat_id= 1&log_id=213.

[5](美)拉芙(Love,R)著;陳莉君,康華譯.Linux內核設計與實現[M].3版.北京:機械工業出版社,2011.

[6]宋寶華.Linux設備驅動開發詳解[M].2版.北京:人民郵電出版社,2010.

[7]李先妹.數字化變電站網絡通信技術的研究[J].陜西電力,2011(6):37-40.

[8]徐進,徐榮森,梅正茂.基于1394b總線仿真設備的WDM驅動開發[J].電子設計工程,2015(2):63-66.

[9]李剛.基于SOA的Web GIS系統框架設計分析[J].陜西電力,2011(2):38-41.

[10]張銀勇,吳劍,李向黨.某推進系統氣路啟動特性研究[J].火箭推進,2012(6):20-23,51.

Design of device management framework based on Android in vehicle terminal

LI Pei-ming1,2,SUN Jia-song1
(1.Department of Electronic Engineering,Tsinghua University,Beijing 100084,China;2.Yaxon Network Co.Ltd.,Xiamen 361008,China)

In order to manage the devices which are not in the primary system of Android,a framework for management of devices which based on LocalSocket and Service is proposed.The framework of the overall hierarchical structure consists of the application,the service for management of peripheral devices,the guardian process,the dynamic library for devices,the kernel device drivers,the device hardware,and so on.Practical application shows that the framework for management of peripheral devices have many advantages,including the clear framework of logic structure,better to support the data interoperability between upper layer and bottom layer,effectively control and manage the peripheral devices which are not in the primary system of Android.The stability of the system is significantly improved,and the design requirement is achieved.

Android;vehicle terminal;management of peripheral devices;LocalSocket;Service

TN92

A

1674-6236(2016)12-0097-03

2015-07-02稿件編號:201507028

李培明(1983—),男,福建泉州人,工程師。研究方向:嵌入式系統。

猜你喜歡
內核調用應用程序
多內核操作系統綜述①
強化『高新』內核 打造農業『硅谷』
活化非遺文化 承啟設計內核
核電項目物項調用管理的應用研究
刪除Win10中自帶的應用程序
Linux內核mmap保護機制研究
谷歌禁止加密貨幣應用程序
基于系統調用的惡意軟件檢測技術研究
利用RFC技術實現SAP系統接口通信
三星電子將開設應用程序下載商店
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合