微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM移植OSGi框架

ARM移植OSGi框架

时间:11-11 来源:互联网 点击:
目前,嵌入式计算应用已经广泛运行在各种平台,普遍应用于各个领域。如何实现运行在动态环境,或不同平台的这些应用之间的相互发现和交互,或这些应用程序如何根据设备和服务环境的变化自动灵活的动态配置和扩充是近年来研究的一个热点。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
  如果是和下面的结果一样的话,就说明

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top