a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 基于ST20嵌入式系統的Java虛擬機研究與移植

基于ST20嵌入式系統的Java虛擬機研究與移植

作者: 時間:2007-08-22 來源:網絡 收藏

摘要:分析了開放源碼的機Kaffe的結構、運行機制,并針對DVB(DigitalVideoBroadcast)數字機頂盒軟件架構中對機的MHP(MultimediaHomePlatform)中間件研發的需求,了將Kaffe到Sti5516處理器和其專用OS20操作的關鍵技術,給出了相應的方案。對深入了解MHP在數字機頂盒中的應用給出了方向和基本思路。
關鍵詞機;DVB;中間件

1 引言

隨著現代信息技術的迅猛發展,電視數字化步伐加快了。從一開始的模擬電視到現在的數字電視,不僅大大提高了電視節目的質量,也推動了電視數字化的進一步發展。在各種數字視頻廣播標準中,歐洲的DVB(Digital Video Broadcast)標準使用比較廣泛,它為在同一信道中傳輸視頻、音頻、數據提供了一種靈活、高效的方式,可以通過衛星、電纜和地面信道傳輸高質量的電視節目。同時DVB的數據廣播標準也能滿足人們對于寬帶數據業務的要求,如證券信息服務、電子節目、MP3音樂下載、電子郵件、網頁瀏覽等,在現代信息技術領域應用極為廣泛。

圖一 數字機頂盒架構

從圖一我們可以看到, 一個完整的數字機頂盒由硬件平臺和軟件組成,可以將其分為4層,從底向上分別為硬件、底層軟件、中間件、應用軟件。硬件提供機頂盒的硬件平臺;底層軟件提供操作系統內核以及各種硬件驅動程序;應用軟件包括本機存儲的應用和可下載的應用;中間件是一種將應用程序與底層的操作系統、硬件細節隔離開來,使應用不依賴于具體的硬件平臺的軟件環境。這樣用戶可以在任何廠家的硬件平臺上進行應用軟件開發,和應用軟件下載。而不必介意任何底層的有關信息,保證了機頂盒的開發專業化。這種分層的思想在現代系統設計中十分常見,如大名鼎鼎的TCP/IP協議。中間件通常由各種虛擬機來構成,如HTML虛擬機、JavaScript虛擬機、Java虛擬機[1]等。

現在廣電行業傾向于DVB-MHP(多媒體家庭平臺)中間件標準。DVB-MHP開放性的Java程序語言,具有軟硬件兼容性好、可成本低、二次再開發功能強等優點,是一種很有發展前途的中間件技術標準。可以相信,Java在數字視頻廣播中的應用將越來越多,我們有必要Java技術核心―虛擬機,包括其結構、運行機制及虛擬機移植到數字機頂盒平臺的關鍵技術。本文面向采用ST(意法半導體公司)Sti5516芯片的數字機頂盒平臺,將基于數字電視播放(Digital Video Broadcast,DVB)的多媒體家庭平臺(Multimedia Home Platform,MHP)規范[2]進行中間件平臺分析,重點研究開放源碼的Java虛擬機---Kaffe在其中的作用和相關的移植技術。

2 平臺介紹

2.1 硬件平臺

數字機頂盒硬件平臺基于ST公司的芯片Sti5516[3],Sti5516芯片集成了CPU內核-C2、音/視頻MPEG-2解碼器、PAL/NTSC/SECAM編碼器等。開發板上有8MB的共享內存和16MB的外部內存,4MB的Flash,并采用實時處理的操作系統OS20。

2.2 軟件平臺

一個典型的適用于的Java運行環境包括以下組件:

1.一個Java虛擬機。用來將獨立于平臺的Java字節碼解釋成目標機本地機器碼,并執行動態類加載。這可以采取解釋執行或實時編譯執行(JIT)的形式。兩者的不同點就在于字節碼的執行速度;因為JIT避免了重復解釋以前執行過的程序塊。

2.一個標準Java類庫集,以字節碼的形式存在。如果應用程序并不引用任何類庫,那這些類庫就并不一定要求存在。

3.任何類庫或虛擬機所需的本地方法(JNI)。這些函數是由其它高級語言所寫,并和Java虛擬機一起預編譯,鏈接。這些函數被用來執行處理器相關或Java無法直接實現的功能。

4.一個多任務操作系統,用來提供Java線程及線程同步機制的底層實現。

5.一個垃圾回收線程。垃圾回收周期運行或當動態內存池不能滿足分配請求時運行,用來申明那些已經被分配但不再被應用程序所使用的內存。

圖二 Kaffe架構

如圖二虛線所示,Kaffe是一個完整的Java實現,它由3部分組成:遵從 Personal Java1.1規范的 Java類庫[4],Java1.1虛擬機和本地動態或靜態鏈接庫。Kaffe虛擬機源碼按以下子目錄組織:

kaffe---包括了解釋器與JIT平臺無關部分,以及垃圾回收,動態類加載和Java runtime environment其它模塊的源代碼。

config---包括了解釋器與JIT平臺相關部分。它按所支持的處理器來劃分子目錄,里面存放系統相關代碼。

package---Java類庫以及任何它所依賴的本地方法。

include---在子目錄中提供的本地方法的接口定義。這些接口被平臺獨立文件所需要。

3 Kaffe移植的關鍵技術及方案

經過對Kaffe深入分析和研究,筆者已在Sti5516平臺上成功地移植了Kaffe[5],并依據DVB-MHP規范,結合機頂盒特定軟硬件環境要求,建立了能運行Kaffe虛擬機的Java應用程序運行平臺。下面將移植工作及相應步驟總結如下:

3.1字節碼解釋器

由于Kaffe源碼中沒有映射Java字節碼到處理器相關的匯編代碼塊,而是使用C實現了每個字節碼。這樣就導致字節碼解釋器的源代碼沒有一行是處理器相關的。這意味著移植最簡虛擬機(無JIT)將非常簡單:只需要使用交叉編譯器來編譯kaffe/kaffevm子目錄下的文件即可。

3.2內部線程

Kaffe有它自己的內部線程包。換句話說,它維護自己的線程數據結構,并在適當的時候執行線程調度及上下文切換。為了使內部線程包能運行在處理器架構上, 需要在config/os20子目錄中創建一個threads.h文件。這個文件定義了兩個常量和四個宏。這些常量和宏被內部線程包里處理器無關的部分代碼所使用。

Ø USE_INTERNAL_THREADS定義為ENABLE。

Ø THREADSTACKSIZE是一個常量,定義為每個線程堆棧的大小,單位bytes。

Ø THREADINIT(ctx * pContex, void (*func)())執行新線程的上下文初始化。該線程的入口點被func指針所提供。

Ø THREADSWITCH(ctx * pNewContext, ctx * pOldContext)執行實際的上下文切換。

Ø THREADINFO(ctx * pContext)在Kaffe初始化期間重置整個任務控制塊。

Ø THREADFRAMES(thread * taskId, int count)返回活動的堆棧楨個數。

3.3支持軟件

和其它大多數用C寫的程序一樣,Kaffe依賴于標準C庫里的例程。由于ST采用符合GNU規范的GCC編譯器,如strcmp(),atoi(),sin()等標準C庫函數被支持。除此之外OS20提供以下支持:

Ø 動態內存分配malloc()。盡管Java程序員不會直接調用malloc(),但Kaffe虛擬機需要從底層調用內存分配例程來請求大的內存池。

Ø 信號。Kaffe依賴于與POSIX兼容的信號實現機制來執行相應的軟件中斷。而這可以用來喚醒休眠線程和異常句柄。

Ø 非阻塞I/O接口。和select()相似。

3.4動態類加載器

為了在OS20操作系統中使用,須修改源代碼中平臺無關的部分---動態類加載器。它是Java運行時環境的一部分,被用來負責加載被調用的方法(methods)。在桌面環境中,與方法相關的字節碼被放在類文件中,動態類加載器使用給定的方法名在類路徑下的子目錄和文件里搜索。但由于OS20操作系統沒有文件系統,所以類加載器必須被修改成在內存(RAM或ROM)中搜索類文件。為此我們完全重寫動態類加載器。

我們采用了靜態查找表裝載機制,建立了一個查找表。這個查找表的結構定義如下:

typedef struct

{

int index;

int size;

char name;

}classIndexTable;

這個查找表用來映射類名或方法名到它們在內存中的起始地址。這樣就可以用查找表來替代類加載器。即將類型和路徑組合為一個唯一的標識, 比如“java string”,組合起來就是“java_string”,然后再利用這個組合的結果檢索查找表。

利用組合的結果與查找表中每一項的name字段進行字符串比較,直到完全匹配為止。如果沒有任何匹配則說明系統不支持這個類型。匹配上name 后,類裝載器將獲得index和size的值。index是一張存放所有.class文件起始地址表的索引,根據這個索引就可以找到具體的.class文件的二進制映像的起始地址,而size則是該.class文件的大小。這樣根據.class文件存儲位置的地址和大小就可以成功地完成類的裝載。

3.5虛擬機啟動

由于OS20操作系統是被GCC編譯到主程序中,我們需要將kaffe虛擬機的初始化函數做為主應用程序中的某個任務來運行。kaffe虛擬機的初始化與啟動是通過在主程序中運行initializeKaffe()函數來完成的。

測試與結果

在主程序中,調用OS20操作系統中的系統調用task_create()來將Kaffe虛擬機初始化為系統的一個進程。并為它分配必要資源,包括進程優先級、系統需要的內存空間等。依照分配的優先級,參與系統的進程調度。最后,將整個修改好的源代碼在新的編譯環境下編譯連接成可執行代碼,通過JTAG口下載到機頂盒開發板中運行。

  Kaffe虛擬機的“輸入”是“hello.java”,經過編譯后生成類文件“hello.class”。運行下載到Flash的主程序,在調試終端可以看到“hello world”字樣,這是Kaffe虛擬機解釋字節碼的結果。說明基于Sti5516芯片的Kaffe虛擬機移植成功。

結束語

以上介紹了Java虛擬機Kaffe的軟件架構,從中我們可以看出,Kaffe虛擬機具有較好的可擴展結構模型,是遵循Java規范的優良的開放源碼虛擬機,可以適應多種嵌入式應用環境。本文按照歐洲DVB-MHP規范,給出了Kaffe虛擬機在Sti5516機頂盒環境下的移植方案,使其可以應用于要求較高的嵌入式系統中,為機頂盒在證券信息服務、電子節目、MP3音樂下載、電子郵件、網頁瀏覽等新型服務領域的開發應用奠定堅實的基礎。我們相信,隨著基于Java技術的DVB-MHP中間件技術的廣泛使用,將使嵌入式系統的應用開發更加簡捷方便。

參考文獻

[1] 李F楓. Jeode讓Java在嵌入式系統中運轉如飛[J].微計算機信息, 2002,18(4):45-46.
[2] Digital Video broadcasting (DVB): Multimedia home Platform(MHP) Specification 1.1[S]. tm2485, tam668r12.
[3] Sti5516 Data sheet, STMicroelectronics. [DB/OL]. www.st.com.
[4] Sun Document. The JavaTM Virtual Machine Specification. 1999.
[5] 嚴東華,張凱,Java虛擬機及其移植. 北京理工大學學報,2002;2:64-67.

本文作者創新點:本文作者給出了Kaffe虛擬機在Sti5516機頂盒環境下的移植方案,使其可以作用于被廣泛使用在數字機頂盒系統中的ST芯片上,為機頂盒在證券信息服務、電子節目、MP3音樂下載、電子郵件、網頁瀏覽等新型服務領域的開發應用奠定堅實的基礎。這一移植方案為在意法半導體Sti5516芯片上移植Java中間件提供了一種思路,也對在其它嵌入式系統上移植Java虛擬機有一定的參考價值。

linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


評論


相關推薦

技術專區

關閉