<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于虛擬處理器嵌入式中間件

基于虛擬處理器嵌入式中間件

作者: 時(shí)間:2004-12-11 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要:是使應用獨立于具體軟硬件平臺的核心軟件環(huán)境。本文介紹可以被完全移植的;討論基本的嵌入式移植模型以及移植實(shí)現;給出采用技術(shù)的嵌入式中間件Intent在PowerPC/PSOS平臺上的應用實(shí)例。

關(guān)鍵詞:嵌入式 中間件 虛擬處理器 Intent

引言

嵌入式中間是在嵌入式應用程序和操作系統、硬件平臺之間嵌入的一個(gè)中間層,通常定義成一組較為完整的、標準的應用程序接口。它主要為嵌入式應用軟件的開(kāi)發(fā)提供跨操作系統和跨硬件平臺,層次化、模塊化和可擴展的接口,同時(shí),根據嵌入式應用的編程特點(diǎn)提供必要的編程工具。

借助嵌入式中間件,應用程序可以獨立于操作系統和硬件平臺,使產(chǎn)品的開(kāi)放性和可移植性更強。有了中間件以后,應用程序不僅可以運行于不同硬件平臺,也可以在不同的操作系統上運行,從而在提高開(kāi)發(fā)效率、減少開(kāi)發(fā)成本的同時(shí)能夠跟上技術(shù)的發(fā)展,使應用的開(kāi)發(fā)變得更加簡(jiǎn)捷。

1 虛擬處理器的嵌入式中間件

1.1 虛擬處理器

可移植性通常指將某一個(gè)操作系統的應用程序移植到新的平臺或處理器上。嵌入式中間件的功能是使應用獨立于操作系統,獨立于硬件平臺,所以要求能夠建立在不同的操作系統和硬件平臺上,與支持具體的應用與平臺無(wú)關(guān)。因此,嵌入式中間件自身必須具有高度的可移植性,使它能夠被完全地移植到不同的軟硬件平臺上,包括庫以及所有其它部分。虛擬處理器(Virtual processor)的嵌入式中間件,通常將所的代碼編譯到一個(gè)虛擬處理器而不關(guān)心具體的目標硬件平臺來(lái)實(shí)現這一特性。嵌入式中間件被設計成運行在一個(gè)虛擬的處理器上,一個(gè)理想的32位RISC(精簡(jiǎn)指令集計算機)小端(little-endian)系統?;谶@種系統編寫(xiě)代碼時(shí),就像在真正的處理器上編寫(xiě)一樣。當將應用代碼轉換成準備在目標處理器上執行的本地代碼時(shí),只需要一個(gè)翻譯器;因而,無(wú)論是將嵌入式中間件移植到一個(gè)新的處理器、一個(gè)新的平臺還是兼而有之,都只需要編寫(xiě)不同的界面接口即可實(shí)現其完全的移植。

1.2 移植模型

基于虛擬處理器的嵌入式中間件自身具有完全的可移植性,能夠提供通用的驅動(dòng),支持在不同的平臺上運行。影響基于虛擬處理器的嵌入式中間件可移植性的因素可抽象為三個(gè)組件,即翻譯器、CPU隔離接口和平臺隔離接口。利用翻譯器(translator),應用代碼可以被轉換為相應的本地代碼而運行。翻譯器將應用代碼映射為對等的本地代碼,包括指令選擇、寄存器分配和指令調度。由于嵌入式處理器的模式可能不同,所以嵌入式中間件應能提供基于小端(little-endians)處理器和大端(big-endians)處理器的翻譯器,以使所有代碼和數據,包括文件和網(wǎng)絡(luò )通信數據,都可以在不做任何修改的情況下,從一個(gè)小端處理器的系統搬移到其它大端處理器的系統中;同時(shí),翻譯操作可根據靜態(tài)或動(dòng)態(tài)地執行。

此外,基于虛擬處理器的嵌入式中間件的可移植性還依賴(lài)于另外兩個(gè)組件。其一是CPU隔離接口CII(CPU Isolation Interface),它將操作系統與處理器的細節隔離。CII包含了實(shí)現FIXUP(定位)操作的函數及其它與CPU相關(guān)的操作。另一個(gè)組件是平臺隔離接口PII(Platform Isolation Interface)。通過(guò)提供一個(gè)抽象的中間層,PII將操作系統和設備驅動(dòng)程序與Platform的細節隔離。PII提供一套函數,可以“虛擬地”訪(fǎng)問(wèn)中斷、異常、內存管理、時(shí)鐘等等。由此抽象出來(lái)的基于虛擬處理器的嵌入式中間件結構如圖1所示。

最值得注意的就是,基于虛擬處理器的嵌入式中間件這一抽象模型的建立,可以通過(guò)PII和CII提供一種十分有效的機制,可以使中間件在“Hosted Mode(宿主模式)”下運行于操作系統上。運行于宿主模式的嵌入式中間件,其平臺隔離接口(PII)中部分函數的實(shí)現,包括用于設置或訪(fǎng)問(wèn)中斷、異常、時(shí)鐘等函數,均須借助“宿主操作系統”提供的接口實(shí)現。

1.3 移植實(shí)現

嵌入式中間件環(huán)境的建立過(guò)程是將一個(gè)系統(中間件)移植到另一個(gè)系統――硬件平臺+實(shí)時(shí)操作系統的過(guò)程?;谔摂M處理器的嵌入式中間件的移植實(shí)現可分為兩步:①移植到一個(gè)新的處理器,需要編寫(xiě)翻譯器以及CPU隔離接口CII;②移植到一個(gè)新的平臺,需要重新實(shí)現平臺隔離層PIL(Platform Isolation Layer)。平臺隔離層指所有的使中間件適合一個(gè)具體平臺而編寫(xiě)的代碼。這一層由平臺隔離接口PII和平臺具體的設備驅動(dòng)程序所組成。

1.3.1 處理器移植

處理器的移植涉及到對翻譯器、CPU隔離接口的代碼重新實(shí)現。

(1)翻譯器

在進(jìn)行處理移植時(shí),真正需要實(shí)質(zhì)改變的代碼是翻譯器。不同的處理器有著(zhù)特定的翻譯器。一個(gè)翻譯器可以為任一類(lèi)型處理器而創(chuàng )建?;蛘呤且粋€(gè)數字信號處理器(DSP),一個(gè)微處理器或者一個(gè)微控制器。

(2)CPU隔離接口

CII是一個(gè)集合名詞。它包含在內核和處理器之間提供接口的代碼以及搜集中間件在其上運行的處理器信息的代碼。中間件內核自身不需重新編寫(xiě)。

CII的接口包括獨立處理器指令集的接口、任務(wù)切換期間調度程序和處理器之間起中介調停作用的接口以及用于棧操作的接口等。

1.3.2 平臺移植

平臺移植需要重新實(shí)現平臺隔離層,包括平臺隔離接口和具體的設備驅動(dòng)程序。如果支持Java語(yǔ)言,還須實(shí)現Java原始接口中。

(1)平臺隔離接口

PII是一個(gè)函數集合,允許內核和設備驅動(dòng)程序訪(fǎng)問(wèn)硬件和軟件所提供的功能。對于內核,PII提供了一系列函數,用于系統啟動(dòng)和關(guān)閉、分配和翻譯內存、鎖定和解鎖內存以及建立異常處理程序。設備驅動(dòng)程序可以訪(fǎng)問(wèn)的PII函數有:用于安裝和卸載中斷處理程序、物理地址空間和進(jìn)程地址空間的映射和解除映射、獲得邏輯地址的物理址以及調用一個(gè)宿主操作系統的系統調用等一系列函數。

(2)設備驅動(dòng)程序

設備驅動(dòng)程序提供廣泛的用于和硬件接服務(wù)(比如I/O端口)以及軟件服務(wù)(比如與宿主操作系統的運行時(shí)接口)。設備驅動(dòng)程序為每個(gè)設備系列提供了應用程序接口(API)。對于那一系列的每個(gè)設備API保持相,但是每個(gè)設備驅動(dòng)程序包含了具體平臺和處理器的代碼。這樣,任何一個(gè)設備驅動(dòng)程序的實(shí)現對應用程序是透明的,應用程序不用知道設備驅動(dòng)程序如何提供它的服務(wù)。應用程序要使用某個(gè)設備驅動(dòng)器,必須首先安裝它。所有的應用程序將一個(gè)設備驅動(dòng)程序的用加入到一個(gè)叫作裝配表的查找表u34920表中,同時(shí)有一個(gè)字與這個(gè)引用相關(guān)聯(lián)。這樣,可以編寫(xiě)一個(gè)新的設備驅動(dòng)程序,代替裝配表中原來(lái)的版本。只要賦予它和原來(lái)設備驅動(dòng)器相同的名字,應用程序就可以訪(fǎng)問(wèn)它,而意思到這一變化。

(3)Java原始接口

Java原始接口JNI(Java Native Interface)是一個(gè)標準的編程接口,用來(lái)編寫(xiě)Java方法以及Java應用程序中使用Java虛擬機實(shí)現的原始方法庫的二進(jìn)制兼容性。JNI的實(shí)現首先需建立兩個(gè).h文件:host-md.h和host-hlp.h。它們?yōu)镴NI機制提供了宿主平臺的關(guān)信息。第一個(gè)文件定義了原始的類(lèi)型,比如8、16、32、64位整數;第二個(gè)文件定義了一系列與OS無(wú)關(guān)的函數,用來(lái)分配內存,啟動(dòng)進(jìn)程和使用互斥變量等,然后為宿主主平臺重新編譯實(shí)現jni.c文件。

2 Intent中間件系統及其移植實(shí)現

2.1 Intent系統

Intent系統是一個(gè)典型的基于虛擬處理器的嵌入式中間件。它是一個(gè)專(zhuān)為連接家庭、可移動(dòng)和專(zhuān)業(yè)網(wǎng)絡(luò )的數字裝置設計的多媒體內容平臺;具有功能強大、二進(jìn)制可移植的特性,可廣泛運行于從低功耗裝置到工作站等各種設備。Intent內部各系統組伯按照可移植程度分為兩大類(lèi)――可移植性強的組件和可移植性弱的組件。Java組件和多全庫等可移植組件組成完全可移植的Intent媒體平臺;而其它與硬件和下層宿主操作系統直接相關(guān)的組件,如翻譯器(translator)、設備驅動(dòng)程序等,與Intern的OS核心(kernel)一起組成Intent系統的底層操作系統――elate。Intent系統的體系結構如圖2所示。

Elate是一個(gè)具有可移植性的實(shí)時(shí)操作系統,它的移植通過(guò)將所有的代碼編譯到一個(gè)虛擬處理器來(lái)實(shí)現,而不關(guān)心具體的具體硬件平臺。Elate的核心就是這個(gè)虛擬處理器VP(Virtual Processor)。它被定義為一個(gè)32位字長(cháng),RISC(精簡(jiǎn)指令集計算機)結構的小端系統?;谶@種系統編寫(xiě)代碼時(shí),就像在真正的處理器上編寫(xiě)一樣。當將可移植的代碼轉換成準備在鞭上執行的目標處理器的本代碼時(shí),只需一個(gè)翻譯器tool。Tool是elate中的概念,是用定義的虛擬處理器語(yǔ)言VP Code所編寫(xiě)的程序,與函數或方法相類(lèi)似。

與大多數操作系統不同,elate的絕大多數代碼了基于VP編寫(xiě)的,這些代碼以靜態(tài)或運動(dòng)的方式被轉換為真實(shí)處理器的本地代碼。里的“真實(shí)處理器”指令在運行elate的處理器。這便利大段的代碼在系統平臺間轉移成可能。Elate向Intent內核及其它應用提供了與CPU、外圍設備等硬件的資源接口,是Intent系統軟硬件的界面。

Intent系統可廣泛運行于數字電視機頂盒、智能手機、PDA以及其它嵌入式數字設備。以下將以數字電視機頂盒為例,介紹Intent的具體實(shí)現。

2.2 Intent系統的移植實(shí)現

數字電視機頂盒是一種能夠讓用戶(hù)在同有模擬電視上觀(guān)看數字電視節目,進(jìn)行交互式數字化娛樂(lè )、教育和商業(yè)化活動(dòng)的消費類(lèi)電子產(chǎn)品。其基本功能是接收數字電視廣播節目,時(shí)具有所有廣泛和交互式多媒體應用的功能。機頂盒系統由硬件平臺和軟件系統組成,可將其分為4層,從底向上分別為底層硬件、實(shí)時(shí)操作系統平臺、中間件、應用軟件。底層硬件提供機頂盒的硬件平臺;實(shí)時(shí)操作系統平臺提供操作系統內核以及各種硬件驅動(dòng)程序;中間件(middleware)將應用軟件與依賴(lài)于具體的硬件平臺;應用軟件包括本機存儲的應用和可不載的應用。

圖2

這里,所研發(fā)的機頂盒系統以PowerPC為微處理器,PSOS為實(shí)時(shí)操作系統平臺,Intent系統作為中間件層。系統中,PSOS操作系統作宿主操作系統;Intent系統以寄生模式建立,通過(guò)其高效的Java虛擬機以及媒體平臺,實(shí)現機頂盒的交互功能。Intent的移植實(shí)現同樣分成兩個(gè)步驟;移植到新的處理器和移植到新的平臺。

2.2.1 移植到PowerPC

由于Intent提供了廣泛的翻譯器,用來(lái)將一個(gè)VP代碼的tool轉換成一個(gè)本地tool,因此對于系統翻譯器只需選擇針對PowerPC的翻譯器,同時(shí)根據PowerPC的特點(diǎn),作部分修改。對Intent系統CII部分的移植主要包括;對獨立處理器指令集的接口tool、任務(wù)切換期間調度tool、處理器之間起中介調停作用的tool以及用于棧操作的tool進(jìn)行針對PowerPC的重新編寫(xiě),這一層的代碼涉及到指令級調用。

2.2.2 移植到具體平臺

在宿主平臺(PSOS+設備)上,Intent的PII層將和PSOS接口。宿主模式下,VP代碼編寫(xiě)的tool需要調用宿主端的函數,以訪(fǎng)問(wèn)宿主的庫函數和系統調用,包括系統內存的管理、中斷的條開(kāi)關(guān)閉操作,安裝時(shí)鐘中斷等操作,均需要調用宿主操作系統的函數。Intent中提供的一個(gè)跨系統調用的機制叫作Opentool。Opentool提供了一種機制,它使Intent端的tool在不考慮calling invention等環(huán)境因素的前提下,可以調用宿主端的函數,并正確地傳遞參數。反之亦然。使用這種機制。VP代碼只要像調用普通tool一樣,調用類(lèi)似以下的tool:

!platform>/function name>!in>!(out)

其中platform可以是任意的名字,不過(guò)一般都取為平臺的名字;function name與宿主系統端函數一一對應,對應關(guān)系可改動(dòng);in、out為函數的輸入、輸出,即可實(shí)現Intent與PSOS的接口。不過(guò)須重新實(shí)現opentool.c,編寫(xiě)main.c或boot.c以及重新編寫(xiě)用于系統啟動(dòng)和關(guān)閉、分配和釋放內存、鎖定和解鎖內存、建立異常處理程序以及用于設備驅動(dòng)程序的一些接口函數;同時(shí),還須實(shí)現Java原始接口(JNI)。

Intent提供了通用設備驅動(dòng)程序(如鍵盤(pán)、鼠標、圖形顯示等),用于和硬件接口。因此須為每個(gè)設備選擇具體的設備驅動(dòng)程序,時(shí)安裝它。對于特殊的不在Intent所提供的設備驅動(dòng)程序之列的設備(如OSD),須用VP代碼實(shí)現其驅動(dòng)程序。由于elate操作系統支持基于對象的編程模式,所以設備驅動(dòng)程序的編寫(xiě)就顯得相對容易,可以將設備驅動(dòng)器作為一個(gè)對象來(lái)進(jìn)行編程。

2.2.3 生成系統映像

為了生成可引導的系統映像,還需建立平臺系統配置文件。平臺系統配置文件可以分成以下幾個(gè)部分:

SETUP――設置指定平臺所需的配置,包括對一些AVE(Audio Video Environment)參數的設置,或者為鍵盤(pán)等定義串行口的配置;

DEPENDS――設置依賴(lài)于應用程序和其它區域的平臺配置的可選部分;

MEMORY――定義平臺的內存設置,包括平臺的Boot Tools、內存區域等。

平臺系統配置文件信息還包含devices.sys。它定義了平臺支持的設備。這個(gè)文件的列表由依賴(lài)于平臺的設備驅動(dòng)程序和通用的elate設備驅動(dòng)程序組成??梢栽贗ntent的Shell命令行中輸入sysbuild,以調用sysbuild程序來(lái)生成一個(gè)可引導的系統映像。它的命令格式如下:

sysbuildplatform>appsysfile>。

platform>指定建立映像的運行平臺,這里為PSOS;appsysfile>指定應用程序的sysbuild文件,也就是所生成映像的.sys文件。所應用程序的sys文件都應為.sys作為擴展名,但是在命令行中,擴展名不必指出。

2.3 Intent系統的運行

Intent系統實(shí)際上是宿主系統的一個(gè)進(jìn)程,它不會(huì )取代宿主系統的地位。宿主系統會(huì )像對待普通進(jìn)程一樣,為Intent系統分配必要資源,包括進(jìn)程優(yōu)先級、系統需要的內存空間等等。Intent系統作為宿主系統的進(jìn)程,將依照自己優(yōu)先,參與宿主系統的進(jìn)程調度。Intent系統與其它進(jìn)程一起,共享享處理器資源在內的系統資源。

移植到PSOS上以后,Intent系統通過(guò)OSOS環(huán)境中所建立的進(jìn)程引入系統映像文件。一個(gè)映像文件是一個(gè)可以被下載到目標硬件上可引導的Intent映像。它描述了應用程序所需的Tool和數據,同時(shí)也描述了程序如何運行。當映像文件成功引入后,將切換到iintent系統的運行環(huán)境。

結語(yǔ)

以上介紹了基于虛擬處理器的嵌入式中間件基本概念以及其抽象模型,給出了Intent的移植實(shí)現,對基于虛擬處理器的嵌入式中間件作為初步探討。通過(guò)虛擬處理器,使不同處理器之間的代碼快速移植成為可能。使用虛擬處理器技術(shù),進(jìn)行組件化開(kāi)發(fā),使得嵌入式中間悠揚可以很方便地實(shí)現完全移植?;谔摂M處理器的嵌入式中間件可以適用于同軟硬件平臺;通過(guò)翻譯器、CPU隔離層和平臺隔離層,使其能夠獨立于平臺和處理器能主可移植于不同操作系統與不同微處理器體系結構,從而使中間件環(huán)境的建立變得更加容易,可移植性更強。我們相信,嵌入式中間件的廣泛使用將使嵌入式應用也能像Java語(yǔ)言一樣,可在各式各樣機器、操作平臺的環(huán)境中開(kāi)發(fā)應用軟件――“一次編譯,到處運行”。

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


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>