『转!』如何在嵌入式系统上运行OSGI架构

来源:互联网 发布:软件项目研发计划 编辑:程序博客网 时间:2024/05/29 18:21

http://jinsuo2007.blog.163.com/blog/static/192279952010106113845634/

目前,嵌入式计算应用已经广泛运行在各种平台,普遍应用于各个领域。如何实现运行在动态环境,或不同平台的这些应用之间的相互发现和交互,或这些应用程序如何根据设备和服务环境的变化自动灵活的动态配置和扩充是近年来研究的一个热点。OSGI规范是嵌入式应用“智能化”发展所需求的一个开放、通用的解决方案。
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架构是可行的,而且也取得了不错的运行测试效果,这为后期的实际应用打下了基础。

原创粉丝点击