基于數(shù)字電視機(jī)頂盒的Java虛擬機(jī)的移植
姚 莉,張 萍,于鴻洋
(電子科技大學(xué) 電子工程學(xué)院, 成都610054)
摘 要:為了增強(qiáng)數(shù)字電視機(jī)頂盒的網(wǎng)絡(luò)交互能力,介紹了嵌入式中間件Java虛擬機(jī)以及它在數(shù)字電視機(jī)頂盒上的移植與實(shí)現(xiàn)。簡(jiǎn)要敘述了普通DVB-C有線數(shù)字電視機(jī)頂盒技術(shù),介紹了嵌入式中間件的概念、背景以及JavaVM的層次結(jié)構(gòu)。重點(diǎn)介紹了JavaVM在數(shù)字電視機(jī)頂盒上的移植過程。運(yùn)行結(jié)果表明JVM在機(jī)頂盒上移植成功。
關(guān)鍵詞:數(shù)字電視 機(jī)頂盒 嵌入式中間件 Java虛擬機(jī)
數(shù)字電視是當(dāng)前IT產(chǎn)業(yè)的熱點(diǎn),作為一項(xiàng)即將在全國(guó)范圍內(nèi)開播的信息服務(wù),它融合了計(jì)算機(jī)、多媒體、通信網(wǎng)絡(luò)等眾多技術(shù)。隨著數(shù)字電視近幾年的發(fā)展,交互式電視越來越受重視。交互式電視可以為用戶提供豐富的互動(dòng)功能,包括電子節(jié)目指南、視頻點(diǎn)播、股票信息、互動(dòng)游戲等。目前,數(shù)字電視機(jī)頂盒是基于有線電視網(wǎng)絡(luò)傳輸?shù)哪M電視機(jī)接收數(shù)字電視節(jié)目和數(shù)字信息的主要接入平臺(tái)。要實(shí)現(xiàn)交互式電視的功能,數(shù)字電視中間件技術(shù)是必不可少的條件,它已成為交互式電視的核心技術(shù)。我國(guó)已制定了數(shù)字電視中間件標(biāo)準(zhǔn),利用該標(biāo)準(zhǔn)開發(fā)具有自主知識(shí)產(chǎn)權(quán)的中間件系統(tǒng)是非常必要的。
本文以目前較為成熟的數(shù)字電視機(jī)頂盒技術(shù)為參考背景,提出了一種將中間件JavaVM移植到數(shù)字電視機(jī)頂盒上的方案,詳細(xì)介紹了整個(gè)方案的原理以及具體實(shí)現(xiàn)過程。
1 有線數(shù)字電視機(jī)頂盒技術(shù)
有線數(shù)字電視機(jī)頂盒結(jié)構(gòu)如圖1所示。
圖1有線數(shù)字電視機(jī)頂盒結(jié)構(gòu)圖
普通(民用)有線數(shù)字機(jī)頂盒是傳統(tǒng)HFC網(wǎng)絡(luò)與傳統(tǒng)模擬電視之間的數(shù)字橋梁。在HFC網(wǎng)絡(luò)的前端,數(shù)字復(fù)接器將各種已編碼的數(shù)字電視節(jié)目信號(hào)與數(shù)據(jù)廣播信號(hào)復(fù)接,經(jīng)過組幀、QAM調(diào)制和載波調(diào)制成DVB-C信號(hào)流,通過HFC網(wǎng)絡(luò)向用戶廣播。用戶則通過數(shù)字機(jī)頂盒鎖定電視節(jié)目頻道,經(jīng)過QAM解調(diào)、解復(fù)用、解壓縮、解密和收費(fèi)控制等過程完成節(jié)目接收。機(jī)頂盒的核心模塊(如STi5512)是數(shù)字電視解碼器,它是一個(gè)嵌入式系統(tǒng),一般有以下硬件模塊:MIPS CPU、解調(diào)器、解復(fù)用器、A/V解碼器、模擬A/V編碼器等。
本方案中選用ST公司的Sti5516芯片,該芯片的CPU為ST20-C2。
2 中間件技術(shù)
從硬件技術(shù)看,CPU速度越來越高,處理能力越來越強(qiáng);從軟件技術(shù)看,應(yīng)用程序的規(guī)模不斷擴(kuò)大,特別是因特網(wǎng)的出現(xiàn),使計(jì)算機(jī)的應(yīng)用范圍更為廣闊,許多應(yīng)用程序需在網(wǎng)絡(luò)環(huán)境的異構(gòu)平臺(tái)上運(yùn)行。這一切對(duì)新一代軟件的開發(fā)提出了新的需求。在這種分布異構(gòu)環(huán)境中,通常存在多種硬件系統(tǒng)平臺(tái)(如PC、工作站、小型機(jī)等),在這些硬件平臺(tái)上又存在各種各樣的系統(tǒng)軟件(如不同的操作系統(tǒng)、數(shù)據(jù)庫、語言編譯器等),以及多種風(fēng)格各異的用戶界面,這些硬件系統(tǒng)平臺(tái)還可能采用不同的網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)體系結(jié)構(gòu)連接。如何把這些系統(tǒng)集成并開發(fā)新的應(yīng)用是一個(gè)非常現(xiàn)實(shí)而困難的問題。
為解決分布異構(gòu)問題,提出了中間件(middleware)的概念。
中間件是在應(yīng)用程序與操作系統(tǒng)、硬件平臺(tái)之間嵌入的一個(gè)中間層,通常定義成一組較為完整的、標(biāo)準(zhǔn)的應(yīng)用程序接口。它主要為應(yīng)用軟件的開發(fā)提供跨操作系統(tǒng)、跨硬件的平臺(tái)及層次化、模塊化和可擴(kuò)展的接口,同時(shí),根據(jù)嵌入式應(yīng)用的編程特點(diǎn)提供必要的編程工具。
借助中間件,應(yīng)用程序可以獨(dú)立于操作系統(tǒng)和硬件平臺(tái),使產(chǎn)品的開放性和可移植性更強(qiáng)。有了中間件,應(yīng)用程序不僅可以運(yùn)行于不同硬件平臺(tái),也可以在不同的操作系統(tǒng)上運(yùn)行,從而在提高開發(fā)效率、減少開發(fā)成本的同時(shí)能夠跟上技術(shù)的發(fā)展,使應(yīng)用的開發(fā)變得更加簡(jiǎn)捷,也為應(yīng)用程序提供了一個(gè)相對(duì)穩(wěn)定的高層應(yīng)用環(huán)境。
對(duì)于數(shù)字電視機(jī)頂盒,數(shù)字電視中間件是指位于數(shù)字電視機(jī)頂盒內(nèi)部實(shí)時(shí)操作系統(tǒng)與應(yīng)用程序之間的軟件部分,它將應(yīng)用程序與底層的操作系統(tǒng)、硬件細(xì)節(jié)隔離,使應(yīng)用不依賴具體的硬件平臺(tái)。它在數(shù)字電視中的位置如圖2所示。
圖2 中間件在數(shù)字電視中的位置
3 Java與Java虛擬機(jī)
3.1 Java簡(jiǎn)介
對(duì)于大多數(shù)開發(fā)語言,需要編譯或解釋。但是Java語言與那些需要編譯或解釋的語言比起來較特殊。通過編譯器, 首先程序被翻譯為一種稱為Java bytecode的中間語言,一種在Java平臺(tái)上被解釋器解釋的平臺(tái)獨(dú)立代碼。解釋器解釋計(jì)算機(jī)上所有的Java bytecode指令。一旦編譯完成,在程序每次執(zhí)行時(shí),系統(tǒng)都會(huì)發(fā)生一次解釋過程。圖3演示了該過程。
圖3 Java程序的執(zhí)行過程
每個(gè)Java解釋器,不管是一個(gè)開發(fā)工具或者是一個(gè)運(yùn)行applet小程序的web瀏覽器,都是Java虛擬機(jī)的實(shí)現(xiàn)形式。Java bytecodes 使得“一次編寫,隨處運(yùn)行”這種時(shí)髦觀點(diǎn)成為可能。bytecodes 能夠運(yùn)行在任何一種Java虛擬機(jī)形式上,這就意味著只要計(jì)算機(jī)上安裝有Java虛擬機(jī), 那么同樣的一個(gè)Java程序可以運(yùn)行在 Windows 2000系統(tǒng)、 Solaris 工作站或者一個(gè)Mac系統(tǒng)上。
3.2 Java平臺(tái)
一個(gè)平臺(tái)是程序運(yùn)行的硬件或者軟件環(huán)境。剛才已經(jīng)提到了一些比較流行的平臺(tái),如Windows 2000、 Linux、Solaris和Mac OS。大多數(shù)平臺(tái)可以認(rèn)為是硬件和操作系統(tǒng)的聯(lián)合體。 Java與其他平臺(tái)不同,因?yàn)樗皇且粋€(gè)運(yùn)行在其他硬件平臺(tái)基礎(chǔ)上的軟件平臺(tái)。Java平臺(tái)有兩個(gè)組件:JavaVM和JavaAPI。圖4為Java平臺(tái)結(jié)構(gòu)圖。
圖4 Java平臺(tái)結(jié)構(gòu)圖
3.3 J2ME平臺(tái)
Java發(fā)展至今已推廣到各種平臺(tái),針對(duì)不同應(yīng)用平臺(tái)SUN公司開發(fā)了四個(gè)版本的Java運(yùn)行環(huán)境,其中如PDA、STB這樣的硬件運(yùn)算能力不高且存儲(chǔ)有限的各式消費(fèi)性電子產(chǎn)品專門提出了J2ME版本。
J2ME定義了一套Java的運(yùn)行環(huán)境和開發(fā)環(huán)境,它包含安裝在各類消費(fèi)性電子設(shè)備中的Java虛擬機(jī)和特別為了各類消費(fèi)性電子設(shè)備中的核心類庫。而J2ME的主要應(yīng)用則可以分為兩大類:個(gè)人移動(dòng)設(shè)備和共享固定設(shè)備。前者在Configuration層使用CLDC,其所應(yīng)用的終端設(shè)備包括移動(dòng)電話等,在人機(jī)接口上比較精簡(jiǎn)且內(nèi)存需求較小。后者在Configuration層使用CDC,如車用導(dǎo)航、娛樂設(shè)備、數(shù)字電視機(jī)頂盒等。圖 5為J2ME平臺(tái)結(jié)構(gòu)。
圖5 J2ME平臺(tái)結(jié)構(gòu)
4 移植與實(shí)現(xiàn)過程
筆者所做的工作就是將JavaVM的CDC&Foundation移植到前述框圖所描述的數(shù)字電視機(jī)頂盒上,見圖6。
圖6 移植方案
4.1方案
我國(guó)的數(shù)字電視中間件標(biāo)準(zhǔn)明確指出中間件系統(tǒng)要采用Java虛擬機(jī),提供Java應(yīng)用程序標(biāo)準(zhǔn)接口,使用Java語言編寫交互式應(yīng)用程序。根據(jù)該標(biāo)準(zhǔn),結(jié)合有線電視機(jī)頂盒的硬件環(huán)境和操作系統(tǒng)等特征,提出了基于有線電視機(jī)頂盒的數(shù)字電視中間件的實(shí)現(xiàn)方案。
4.2 方案的實(shí)現(xiàn)
采用SUN公司在其主頁上公布的免費(fèi)的Java虛擬機(jī)軟件實(shí)現(xiàn)代碼,經(jīng)過各方面的修改移植到現(xiàn)有的數(shù)字電視機(jī)頂盒上。
4.2.1 環(huán)境搭建
(1)通過修改源碼中的build目錄下的相關(guān)make文件,使得虛擬機(jī)源代碼的運(yùn)行環(huán)境得以正確搭建在機(jī)頂盒上,為下一步的代碼調(diào)試奠定基礎(chǔ)。主要表現(xiàn)在編譯器名稱以及路徑、文件后綴名和JDK工具包路徑。為了減少初期移植工作的難度,相應(yīng)地簡(jiǎn)化修改了一些生成Java虛擬機(jī)可執(zhí)行代碼的選項(xiàng)。
(2)根據(jù)現(xiàn)有數(shù)字電視機(jī)頂盒具體的硬件配置,主要根據(jù)flash的大小修改了相應(yīng)的硬件配置文件。
4.2.2 代碼調(diào)試
在正確搭建了編譯調(diào)試環(huán)境后,做代碼的調(diào)試。主要有以下幾個(gè)方面的修改和代碼重寫:
(1)與操作系統(tǒng)相關(guān)的修改。數(shù)字電視機(jī)頂盒采用ST公司提供的嵌入式實(shí)時(shí)操作系統(tǒng)OS20,而源代碼中是基于Linux操作系統(tǒng)。修改關(guān)于task結(jié)構(gòu)的定義和使用。另外在OS20操作系統(tǒng)內(nèi)核代碼中的關(guān)于支持可變參數(shù)的定義也與Linux中的不同,也要做相應(yīng)修改。
(2)與CPU有關(guān)的修改。主要是將源代碼中用X86匯編指令寫的匯編文件CVMjniInvokeNative.S用自行設(shè)計(jì)的C2匯編指令實(shí)現(xiàn)。由于ST20-C2提供的寄存器較少,在實(shí)現(xiàn)中采用了局部變量完成數(shù)據(jù)的存儲(chǔ)和傳遞。
(3)調(diào)試中的簡(jiǎn)化修改。屏蔽了多線程,給調(diào)試帶來了莫大的方便。去掉動(dòng)態(tài)加載功能,使需要使用的類都是預(yù)先編譯并被本地化成romjava.c。
4.2.3 測(cè)試與運(yùn)行結(jié)果
JavaVM實(shí)際上是系統(tǒng)的一個(gè)進(jìn)程,系統(tǒng)會(huì)像對(duì)待普通進(jìn)程一樣,為它分配必要資源,包括進(jìn)程優(yōu)先級(jí)、系統(tǒng)需要的內(nèi)存空間等。JavaVM作為系統(tǒng)的進(jìn)程,將依照自己優(yōu)先級(jí),參與系統(tǒng)的進(jìn)程調(diào)度。JavaVM系統(tǒng)與其它進(jìn)程一起,共享包括處理器資源在內(nèi)的系統(tǒng)資源。為此,筆者在main()函數(shù)中創(chuàng)建一個(gè)任務(wù)來啟動(dòng)javavm這個(gè)任務(wù)。將整個(gè)修改好的源代碼在新的編譯環(huán)境下編譯連接成可執(zhí)行代碼,通過JTAG口下載到機(jī)頂盒目標(biāo)板中運(yùn)行。
Java虛擬機(jī)的“輸入”是“hello.java”,經(jīng)過Javac編譯后生成類文件“hello.class”。如果代碼調(diào)試成功就應(yīng)該在顯示終端打出“hello world”字樣,這是Java虛擬機(jī)解釋字節(jié)碼的結(jié)果。說明基于CDC&Foudation配置的Java虛擬機(jī)移植成功。
本論文提出的在有線數(shù)字電視機(jī)頂盒環(huán)境中實(shí)現(xiàn)數(shù)字電視中間件的方案采用Java技術(shù)作為核心,充分體現(xiàn)了Java技術(shù)的優(yōu)點(diǎn),使交互式電視的應(yīng)用開發(fā)更加簡(jiǎn)捷方便。該方案實(shí)現(xiàn)了Java平臺(tái)(CDC)的基本功能,為進(jìn)一步研究和實(shí)現(xiàn)Java應(yīng)用程序標(biāo)準(zhǔn)接口提供了軟件平臺(tái)。
當(dāng)然目前的這個(gè)CDC實(shí)現(xiàn)還存在部分問題,需要進(jìn)一步改進(jìn)以提高其穩(wěn)定性,在此基礎(chǔ)上,可以增加個(gè)人簡(jiǎn)表和Java TV API為Java應(yīng)用程序的開發(fā)提供完整的環(huán)境。
以上介紹了嵌入式中間件JavaVM的基本概念及其抽象模型,給出了它在數(shù)字電視機(jī)頂盒的移植與實(shí)現(xiàn)。通過嵌入式中間件JavaVM,使不同平臺(tái)之間的應(yīng)用程序代碼快速移植成為可能。嵌入式中間件可以適用于不同軟硬件平臺(tái);能夠獨(dú)立于平臺(tái)和處理器,能移植于不同操作系統(tǒng)與不同微處理器體系結(jié)構(gòu),從而使上層的應(yīng)用程序移植性更強(qiáng)。我們相信,嵌入式中間件的廣泛使用將使嵌入式應(yīng)用也能像Java語言一樣,可在各式各樣機(jī)器、操作平臺(tái)的環(huán)境中開發(fā)應(yīng)用軟件——“一次編譯,到處運(yùn)行”。
參考文獻(xiàn)
1 探矽工作室.深入嵌入式Java虛擬機(jī).北京:中國(guó)鐵道出版社,2003
2 Connected Device Configuration and Foundation Profile. Ver-sion 1.0.1 Java(tm) 2 Platform.
Micro Edition,2003
3 CDC: An Application Framework for Personal Mobile Devi-ces. JavaTM 2 Platform. Micro
Edition,2003
評(píng)論