引言 現在Java技術十分流行,發展勢頭強勁,而且在SUN公司推出了J2ME平臺后,眾多移動式系統都紛紛支持Java應用程序。由于Java已經成為了業界公認的通用網絡語言,具有超強的跨平臺性,所以Java這種write once,Run anywhere的特性被目前幾乎所有的手機系統開發商所承認并運用。無一例外,當今的智能手機操作系統都支持KJava技術。為了保證手機操作系統支持運行Java程序,需要將Java虛擬機移植到手機操作系統上。由于手機這種移動式信息設備都采用小容量的F1ash和RAM,所以就要求虛擬機體積更小,實時效率更高,故這種Java虛擬機被稱為KVM(K Vinual Machine)。 由于J2ME是以消費性產品為目標而設計的 Java運行環境,專門針對移動電話、數字機頂盒和汽車導航系統,因而影響力巨大。本文將研究在MTK手機操作系統上實現嵌入式Java。整個J2ME運行平臺包括Java應用的下載、安裝、運行及觸摸屏支持等一系列功能。1 相關技術研究 1.1 J2ME平臺 現在的 Java系統是一個全方位的開發、運行平臺,可以在任何計算環境中實現。在嵌入式系統,suN公司推出了J2ME(Java 2 platform Micro Edition)。 J2ME是Java 2標準版本的微型版本,支持各種各樣的消費類產品和嵌入式設備,如移動電話、PDA、互聯網可視電話、數字機頂盒、車載娛樂和導航系統、網絡交換設備以及信息家電等。J2ME是為了那些使用有限的能源、有限的網絡連接(通常是無線連接)以及有限圖形用戶界面能力的設備開發的。 J2ME體系結構如圖1所示。其中簡表層、配置層和Java虛擬機是J2ME的組成部分。J2ME是一個簡化的Java,是針對各種不同的低端設備而設計的。為了滿足各種環境,J2ME設計了簡表一配置規范。配置是一個語言特性和核心類的配置規范,針對不同的環境(內存、顯示、網絡連接和處理能力)給定不同的配置。也就是定義了該環境的Java語言子集和核心類庫,虛擬機開發者遵照此配置來開發虛擬機。最著名的兩個配置是連接設備配置(CDC)和連接有限設備配置 (cLDC)。 ![]() CLDC包括K虛擬機(KVM)和一組核心類庫,主要是針對用戶接口簡單、內存較小、網絡運行時連時斷以及帶寬較窄的小型無線設備。其中KVM是JVM的一個實現,特別用于移動電話、PDA等設備。 簡表是針對相同配置的不同特性而開發的擴展類庫,它提供給開發者在特定類型設備上開發的類庫。例如,移動信息設備子集MIDP(Mobile Information Device Pro—file)綜合考慮了移動設備的屏幕和內存限制,定義了J2ME適用的硬件和軟件框架,并提供了這個框架要實現的基本功能及標準接口;應用開發者可以基于這個框架開發出各種應用。MIDP 2.O定義了一系列軟件接口,包括基本輸入輸出、圖形用戶接口、網絡、事件機制、文件系統、應用管理系統、游戲接口、聲音輸出接口和安全機制。 由于CLDC的設備資源受到限制,所以SUN公司專門開發了一個新的虛擬機KVM。 Sun公司于2000年公布了KVM的參考實現,采用解釋執行字節碼的Java虛擬機。與編譯執行相比,解釋執行的Java虛擬機在移動通信設備上具有顯著的優點:虛擬機占用移動通信設備非易失性存儲空間比較小;虛擬機運行時占用RAM空間比較小;解釋執行核心代碼量小;字節碼占用RAM空間比較小;實現難度低,可移植性好。現有的具有KVM支持的移動通信設備大多是基于該參考實現的。 1.2 MTK系統 MTK 方案是臺灣聯發科技公司提供的手機解決方案。近70%的國產手機采用MTK的芯片和平臺。有資料顯示,2007年MTK手機芯片出貨量高達1.5億片,全球市場占有率近14%,僅次于德州儀器及高通公司。若只計算MTK進入全球GSM手機芯片的市場規模,大約省7億~8億部手機,市場占有率已高達20%以上,排名僅次于德州儀器公司。 在目前MTK市場上,MTK6225平臺占據主導地位。該系統的主要功能如下: ①任務管理。系統任務采用靜態創建方式,靜態配置任務優先級、棧大小、任務全局唯一ID等;不提供動態創建Task的方式;任務內部以及任務之間的通信通過內部事件隊列和外部事件隊列完成。 ②內存管理。平臺不提供動態分配內存的方式;應用程序需要使用動態分配內存時,可以采用以下幾種方式:與系統其他模塊共享內存,典型的是使用MED模塊的內存;定義一個靜態數組,交給系統adm托管,然后調用kal_adm_alloc、 kal_adm_free等內存操作函數實現動態內存分配;定義一個靜態數組,應用自己實現基于此數組的分配和管理,也就是實現自己的內存管理模塊。 ③ 事件機制。平臺事件機制采用“注冊-回調”機制,把需要處理的各個按鍵、觸摸屏等通過系統函數注冊,當有事件發生時系統調用所注冊的監聽者。 ④UI。系統MMI層提供了豐富的UI元素,如各種消息框、列表、圖標等。 ⑤系統局限性。MTK6225平臺只有一種中文字體,字體大小固定。 2 平臺設計 2.1平臺功能分析 在MTK平臺上實現J2ME運行環境,需要實現的功能如下: ①應用程序管理。Java擁有豐富的應用程序,平臺需要管理這些應用程序,因此要實現應用程序管理系統。應用程序管理系統功能包括程序的安裝、刪除、運行、下載等。 ②虛擬機的實現平臺。嵌入式Java虛擬機的實現平臺有多種方式。它可以直接嵌入到裸機上,也可以加載于其他嵌入式操作系統之上,成為一臺抽象的計算機。它的平臺無關性給它帶來了巨大的發展前景。經過研究,在MTK平臺上,采用SUN公司公布的KVM作為核心,結合虛擬機所需要實現的功能和MTK平臺,設計和實現移植接口,最后在MTK平臺上運行KVM,在KVM之上運行Java應用程序。 2.2 平臺框架設計 系統平臺由應用程序管理系統(Application ManagementSystem,AMS)、KVM核心(KvM core)、KVM移植接口層、MTK系統平臺構成。平臺框圖如圖2所示。 ![]() 應用程序管理系統是整個系統和用戶的交互層,負責對J2ME應用程序的下載、列表顯示、安裝、刪除、運行等;KVM核心是整個J2ME運行系統的核心,包含MIDP2.0十CLDCl.1的實現;KVM移植接口層是KVM在系統平臺上移植需要的接口層,負責提供KVM核心運行所需要的所有與操作系統相關的功能調用;MTK系統平臺負責提供KVM移植接口層所需要實現的所有函數的操作系統調用。 2.3 Java虛擬機移植設計 KVM核心在運行的時候需要向MTK平臺獲取內存資源、獲取外部事件、文件操作等。將所有與系統相關的調用抽象出來,形成抽象接口層,如圖3所示。 ![]() 移植接口層包含以下部分: ①文件系統部分,對文件操作,實現創建、打開、關閉、讀、寫等功能。KVM在運行的時候需要通過這部分接口使用本地文件,如打開jar、jad文件等。 ②網絡部分,提供 Socket訪問功能。 ③外部事件,獲取用戶輸入,包括按鍵輸入和觸摸屏④圖形顯示部分,負責KVM圖形及文字顯示。 ⑤ 系統時間部分,提供給KVM精確的系統時間。 ⑥輸入法,Java程序運行時可能要求用戶輸入,此接口實現調用系統輸入法功能。 ⑦ 其他接口,內存訪問、交互性事件通知以及擴充的JSR實現所需要的接口,如JSRl20、JSRl35等。 2.4 應用程序管理系統設計 應用程序管理系統管理整個Java運行環境,實現如下功能: ①顯示應用程序列表,展示給用戶當前手機系統的所有可用的應用程序。 ②應用管理功能選擇菜單,菜單應包括兩種類型,分別是程序已經安裝好的菜單項和程序還未下載,只有jad文件在本地,需要向服務器請求下載應用安裝后才能運行的菜單項。 ③下載應用,與服務器通信下載用戶選擇的應用。用戶啟動Java應用流程如圖4所示。 ![]() 根據UI和engine的劃分,可以把應用程序管理系統分為應用程序管理界面和應用管理系統核心:應用程序管理界面提供給用戶交互式界面,包括管理系統主界面、程序下載界面、程序運行界面、管理功能菜單以及各級子界面;應用管理系統核心由實現功能的一系列API組成,提供給上層界面調用,實現程序的下載、安裝、刪除、運行等功能。 3 平臺的實現 3.1 Java虛擬機移植的實現 在實現內存管理模塊時,由于平臺不提供動態分配內存方式,而虛擬機需要一塊比較大的內存,不能從MED模塊分配,且根據需要會對內存進行壓縮整理,不適合采用系統托管方式。所以,采用虛擬機自己管理內存的方式,實現內存管理模塊。 KVM就像一個軟處理器一樣控制解釋Java字節碼和它的執行狀況,每一個創建的Java線程在Java堆中都會有各自的線程執行棧,并且由KVM運行來調度管理。為了使KVM能盡量正確地劃分時間片,需要給一個時間標準作為KVM的內部時鐘,由時間接口實現。系統提供void kal_get_time(kal_uint32*ticks_ptr)函數,可精確到1個ticks(4.615 ms)。 系統只提供一種大小字體,而Java應用需要使用3種大小字體。可以采用以下方式實現: ①設計實現虛擬機自身的文字模塊,采用3種大小的ASCII 和GB2312字體點陣字庫,從中提取文字點陣信息,由虛擬機圖形顯示模塊顯示。 ②只提供一種大小的字體,這樣應用會受限制。 由于系統平臺可用內存小,文字點陣字庫相對比較大,不適合在這個平臺使用,因此選擇采用第2種方式。 如今在移動多媒體領域,Java應用大多要求聯網,所以實現網絡通信,即要實現TcP/IP,支持套接字,是KVM一個非常重要的功能。系統“SOC_api.h”文件中定義了套接字接口 API,使用此接口實現虛擬機網絡方面移植非常方便。 Java應用要求支持多媒體音頻和事件處理,提供用戶最好的交互功能。在多媒體音頻方面,MTK系統提供了非常全面的支持——支持MID、MP3等格式的音頻播放。 根據Java應用的需求,一些基于MIDP2.O擴展包的實現成為必要。本系統實現了JSRl20的短信功能以及JSRl35的部分功能。 3.2 應用程序管理系統的實現 實現了應用程序管理核心API,包括對jar、jad文件的安裝、刪除、信息獲取等等。系統MMI層提供了豐富的UI元素,因此比較容易地實現了應用程序管理界面。 實現了應用下載模塊,與服務器通信下載應用。由于平臺未提供HTTP協議的實現,因此在基于所設計的虛擬機Socket接口之上,實現了HTTP協議,連接服務器下載用戶選擇的相關應用。 結語 J2ME運行平臺在MTK系統上的設計和實現,充分考慮了系統空間的局限性和運行效率這兩大要素,以及Java運行時與系統的交互事件處理問題,實現了在MTK平臺上下載、安裝、運行Java應用一體化平臺,并在MIDP2.0基礎上擴充實現了JSRl20、JSRl35部分功能。 該平臺已經在多款MTK6225平臺手機上運行。 參考文獻 1. CLDC Reference Implementation version 1.1 2004 2. MIDP Reference Implementation version 2.0 FCS 2004 3. Venners Bill.曹曉鋼.蔣靖 深入Java虛擬機 2003 4. 探矽工作室 深入嵌入式Java虛擬機 2003 5. 李允.羅蕾.雷昊峰.熊光澤 嵌入式 Java虛擬機的性能優化技術 [期刊論文] -計算機工程2004(18) 6. 曹軍.羅蕾 MIDP2.0 及其移植技術分析 [期刊論文] -單片機與嵌入式系統應用2004(1) 作者:電子科技大學 馮東 羅蕾 來源:單片機與嵌入式系統應用 2009 (4) |