1 OSGI介绍
OSGI是Open Servicc Gateway Initiative的简称,该组织建立于1999年,是一个非赢利机构,旨在建立一个开放的服务规范,为通过网络向设备提供服务建立开放的标准。OSGI规范为网络服务定义了一个标准的、面向组件的计算环境。软件组件可以从运行中被安装、升级或者移除而不需要中断设备的操作。软件组件可以动态地发现和使用其他库或者应用程序。下面具体讲解一下OSGI的运行机制[1-2]。
OSGI[3]框架是一个微核结构的容器,所有的模块都需要运行在容器范围内,在OSGI中所有模块的部署都必须以Bundle的方式来进行部署。所谓Bundle其实就是一个jar文件,这个jar文件和普通的jar文件唯一不同的地方就是Meta-inf目录下的MANIFEST.MF文件的内容,关于Bundle的所有信息都在MANIFEST.MF中进行描述,可以称它为bundle的元数据,这些信息中包含有象Bundle的名称、描述、开发商、classpath、需要导入的包以及输出的包等。
Bundle通过实现BundleActivator接口去控制其生命周期,在Activator中编写Bundle[4]启动、停止时所需要进行的工作,同时也可以在Activator中发布或者监听框架的事件状态信息,以根据框架的运行状态做出相应的调节。
2 选择合适的虚拟机
选择一种合适的虚拟机是很重要的,选择的虚拟机要满足OSGI架构最基本的运行条件,虚拟机的种类比较多,有kaff,j9,wonka,cvm,kvm,jre等,当中有运行在X86上的,也有运行在嵌入式设备上的,根据OsgiAllance说法,OSGI架构运行的最小环境是(KVM+CLDC+DIDP,CDC+CVM+FP)。一开始选择了KVM作为运行OSGI的虚拟机,由于KVM的资源有限,就连一个JAR文件也运行不了,后来更换了CVM作为虚拟机,经过一些简单的配置后,成功编译,OSGI架构也成功地运行了。
3 编译CVM虚拟机
SUN的JVM开源后,作为JAVA开发社区的一个项目,为避免版权问题,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等两个文件夹)。当在开发的时候,需要把btclasses.zip放到lib文件夹里,作为一个基础类库。
在编译CVM的时候,同时也将CDC自带的测试程序编译出来了,testclasses.zip,democlasses.jar就是测试文件。把btclasses.zip放到lib文件夹里,将lib,bin文件夹,以及 testclasses.zip,democlasses.jar下载到开发板里,接下来就是运行测试程序了[5]。如果是直接下载cvm到开发板的话,一定要建立一个bin文件夹,将cvm放到bin文件夹中,这样才能完成运行。
执行bin/cvm –version如果能得到如下输出的话证明你的CVM能运行。
接下来测试个HelloWorld.
bin/cvm-cp testclasses.zip HelloWorld
应该得到下面的结果:
最后做一次全面的测试:
bin/cvm-cp testclasses.zip Test
如果是和下面的结果一样的话,就说明移植的cvm完全没有问题。
安装OSGI架构到开发板中,在开源界中实现OSGI的框架比较知名的有:Equinox、Knopflerfish、Oscar。
1)Equinox
Equinox是Eclipse中的项目之一,Equinox是作为OSGI R4 RI而知名的,同时由于Equinox有Eclipse IDE这么个成功案例,反应出了Equinox作为OSGI框架的优势。Equinox开发小组由IBM的Jeff领衔,开发状态非常的活跃,从它的开发者maillist可以看出,讨论非常的热烈。
2)Oscar
Oscar是一个遵循OSGI R3框架的实现,目前它的开发状态不怎么的活跃,最新的新闻都是2005年的了。 Oscar的优势在于提供了大量OSGI R3标准之外的Bundle,为开发基于OSGI的系统提供了方便。
3)Knopflerfish
Knopflerfish是一个知名的OSGI框架,目前提供的最新版本也已经完整的实现了OSGI R4,Knopflerfish的开发状态非常的活跃,同时它也提供了为方便开发基于OSGI系统的大量的Bundle。
安装OSGI架构只须将X架构下载到开发板中就可以,然后通过指令:cvm –jar X..jar启动架构。
下面是安装equinox的实例,运行:bin/cvm –jar equinox.jar -console
接下来就是安装一些运用bundle了,至此已经完成了将OSGI架构安装到开发板上的全部过程。
4 结束语
本文通过选择合适的虚拟机到编译CVM虚拟机,直到完成并安装OSGI架构到开发板中,这一系列的操作说明在嵌入式系统上运行OSGI架构是可行的,而且也取得了不错的运行测试效果,这为后期的实际应用打下了基础。
上一篇:ARM-Linux GPIO操作事宜
下一篇:ARM学习笔记(三)时钟分频器设置
推荐阅读最新更新时间:2024-03-16 15:04