<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM移植OSGi框架

          ARM移植OSGi框架

          作者: 時間:2016-11-11 來源:網(wǎng)絡 收藏
          目前,嵌入式計算應用已經(jīng)廣泛運行在各種平臺,普遍應用于各個領(lǐng)域。如何實現(xiàn)運行在動態(tài)環(huán)境,或不同平臺的這些應用之間的相互發(fā)現(xiàn)和交互,或這些應用程序如何根據(jù)設備和服務環(huán)境的變化自動靈活的動態(tài)配置和擴充是近年來研究的一個熱點。OSGI規(guī)范是嵌入式應用“智能化”發(fā)展所需求的一個開放、通用的解決方案。
            1 OSGI介紹
            OSGI是Open Servicc Gateway Initiative的簡稱,該組織建立于1999年,是一個非贏利機構(gòu),旨在建立一個開放的服務規(guī)范,為通過網(wǎng)絡向設備提供服務建立開放的標準。OSGI規(guī)范為網(wǎng)絡服務定義了一個標準的、面向組件的計算環(huán)境。軟件組件可以從運行中被安裝、升級或者移除而不需要中斷設備的操作。軟件組件可以動態(tài)地發(fā)現(xiàn)和使用其他庫或者應用程序。下面具體講解一下OSGI的運行機制[1-2]。
            OSGI[3]框架是一個微核結(jié)構(gòu)的容器,所有的模塊都需要運行在容器范圍內(nèi),在OSGI中所有模塊的部署都必須以Bundle的方式來進行部署。所謂Bundle其實就是一個jar文件,這個jar文件和普通的jar文件唯一不同的地方就是Meta-inf目錄下的MANIFEST.MF文件的內(nèi)容,關(guān)于Bundle的所有信息都在MANIFEST.MF中進行描述,可以稱它為bundle的元數(shù)據(jù),這些信息中包含有象Bundle的名稱、描述、開發(fā)商、classpath、需要導入的包以及輸出的包等。
            Bundle通過實現(xiàn)BundleActivator接口去控制其生命周期,在Activator中編寫B(tài)undle[4]啟動、停止時所需要進行的工作,同時也可以在Activator中發(fā)布或者監(jiān)聽框架的事件狀態(tài)信息,以根據(jù)框架的運行狀態(tài)做出相應的調(diào)節(jié)。
            2 選擇合適的虛擬機
            選擇一種合適的虛擬機是很重要的,選擇的虛擬機要滿足OSGI架構(gòu)最基本的運行條件,虛擬機的種類比較多,有kaff,j9,wonka,cvm,kvm,jre等,當中有運行在X86上的,也有運行在嵌入式設備上的,根據(jù)OsgiAllance說法,OSGI架構(gòu)運行的最小環(huán)境是(KVM+CLDC+DIDP,CDC+CVM+FP)。一開始選擇了KVM作為運行OSGI的虛擬機,由于KVM的資源有限,就連一個JAR文件也運行不了,后來更換了CVM作為虛擬機,經(jīng)過一些簡單的配置后,成功編譯,OSGI架構(gòu)也成功地運行了。
            3 編譯CVM虛擬機
            SUN的JVM開源后,作為JAVA開發(fā)社區(qū)的一個項目,為避免版權(quán)問題,J2ME改名為phoneME。CLDC對應phoneME Feature,虛擬機則稱為KVM;而CDC對應phoneMEAdvance,虛擬機則稱為CVM。這里選擇了phoneme_advanced-mr2-dev-src-b34-04_oct_2007.zip
            unzip phoneme_advanced-mr2-dev-src-b34-04_oct_2007.zip
            cd cdc
            cd build
            cd linux-arm
            vi defs.mk
            將ifneq ($(CVM_FORCE_HARD_FLOAT), true)
            ifeq ($(USE_GCC2), true)
            CC_ARCH_FLAGS += -msoft-float
            ASM_ARCH_FLAGS+= -msoft-float
            LINK_ARCH_FLAGS += -msoft-float
            LINK_ARCH_LIBS+= -lfloat
            CVM_TARGETOBJS_OTHER += _fixunsdfsi.o
            endif
            endif
            改為:
            將ifneq ($(CVM_FORCE_HARD_FLOAT), true)
            ifeq ($(USE_GCC2), true)
             LINK_ARCH_FLAGS +=
             LINK_ARCH_LIBS+= -lm
            endif
            endif
            cd ../linux-arm-familiar
            make J2ME_CLASSLIB=foundation CVM_TARGET_TOOLS_PREFIX=/usr/local/arm/3.3.2/bin/arm-linux- CVM_HOST_TOOLS_PREFIX =/usr/bin/ CVM_CLASSLOADING=true CVM_JAVA_TOOLS_PREFIX=/home/wmz/kvm/j2sdk1.4.2_18/bin/ JDK_HOME=/home/wmz/kvm/j2sdk1.4.2.18/bin/ CC_ARCH_FLAGS=-mcpu=arm920t
            如果編譯沒有什么錯誤的話,就在linux-arm-familiar的bin目錄下生成CVM,在linux-arm-familiar目錄也同時生成:testclasses.zip,democlasses.jar等測試文件,以及btclasses.zip和lib文件夾等庫文件(lib文件夾里有foundation.jar,content-types.properties,以及security,zi等兩個文件夾)。當在開發(fā)的時候,需要把btclasses.zip放到lib文件夾里,作為一個基礎(chǔ)類庫。
            在編譯CVM的時候,同時也將CDC自帶的測試程序編譯出來了,testclasses.zip,democlasses.jar就是測試文件。把btclasses.zip放到lib文件夾里,將lib,bin文件夾,以及 testclasses.zip,democlasses.jar下載到開發(fā)板里,接下來就是運行測試程序了[5]。如果是直接下載cvm到開發(fā)板的話,一定要建立一個bin文件夾,將cvm放到bin文件夾中,這樣才能完成運行。
            執(zhí)行bin/cvm –version如果能得到如下輸出的話證明你的CVM能運行。
            接下來測試個HelloWorld.
            bin/cvm-cp testclasses.zip HelloWorld
            應該得到下面的結(jié)果:
            最后做一次全面的測試:
            bin/cvm-cp testclasses.zip Test
            如果是和下面的結(jié)果一樣的話,就說明移植的cvm完全沒有問題。
            安裝OSGI架構(gòu)到開發(fā)板中,在開源界中實現(xiàn)OSGI的框架比較知名的有:Equinox、Knopflerfish、Oscar。
            1)Equinox
            Equinox是Eclipse中的項目之一,Equinox是作為OSGI R4 RI而知名的,同時由于Equinox有Eclipse IDE這么個成功案例,反應出了Equinox作為OSGI框架的優(yōu)勢。Equinox開發(fā)小組由IBM的Jeff領(lǐng)銜,開發(fā)狀態(tài)非常的活躍,從它的開發(fā)者maillist可以看出,討論非常的熱烈。
            2)Oscar
            Oscar是一個遵循OSGI R3框架的實現(xiàn),目前它的開發(fā)狀態(tài)不怎么的活躍,最新的新聞都是2005年的了。 Oscar的優(yōu)勢在于提供了大量OSGI R3標準之外的Bundle,為開發(fā)基于OSGI的系統(tǒng)提供了方便。
            3)Knopflerfish
            Knopflerfish是一個知名的OSGI框架,目前提供的最新版本也已經(jīng)完整的實現(xiàn)了OSGI R4,Knopflerfish的開發(fā)狀態(tài)非常的活躍,同時它也提供了為方便開發(fā)基于OSGI系統(tǒng)的大量的Bundle。
            安裝OSGI架構(gòu)只須將X架構(gòu)下載到開發(fā)板中就可以,然后通過指令:cvm –jar X..jar啟動架構(gòu)。
            下面是安裝equinox的實例,運行:bin/cvm –jar equinox.jar -console
            接下來就是安裝一些運用bundle了,至此已經(jīng)完成了將OSGI架構(gòu)安裝到開發(fā)板上的全部過程。
            4 結(jié)束語
            本文通過選擇合適的虛擬機到編譯CVM虛擬機,直到完成并安裝OSGI架構(gòu)到開發(fā)板中,這一系列的操作說明在嵌入式系統(tǒng)上運行OSGI架構(gòu)是可行的,而且也取得了不錯的運行測試效果,這為后期的實際應用打下了基礎(chǔ)。


          關(guān)鍵詞: ARM移植OSGi框

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();