Java 程序语言在其产生之初,是为嵌入式设备--机顶盒设备设计的。现在Java又凭借J2MEE和Java
Card Platform回到嵌入式系统开发领域。
Java卡
(1)Java卡简介
Java卡是Java平台中最小的子集,也是一种特殊的智能卡。智能卡是一种嵌入计算机芯片的卡片,广泛应用于通信、交通、金融、证券和保险等领域。智能卡分为两大类:一类是存储器卡,另一类是微处理器卡。存储器卡仅仅被用于存储器数据。微处理器卡有数据处理的功能:它有自己的CPU、I/O端口、存储器和操作系统,可以被看作是一台微型电脑;可以安装并运行小的应用程序,通过串行通信接口与外部通信。ISO(国际标准组织)制定了智能卡的国际标准ISO
7816。
影响智能卡推广的主要因素是其不够开放,不同的卡片制造商生产的卡片的应用程序开发没有统一的标准。为了解决这个问题,工业界提出了能运行Java程序的智能卡--Java卡,并且制定了Java卡的技术规范,包括Java
Card VM(Java卡虚拟机)和API的详细信息。
Java Card VM位于智能卡的操作系统之一,用通用的编程语言和系统接口屏蔽了不同智能卡硬件和操作系统的区别。Java卡的框架定义了供应用程序开发者使用的API。Java卡的应用程序称为Applet,每个Applet由唯一的AID(应用程序标识符)来识别。
(2)Java卡对硬件的最低要求
512 B RAM:主要用于存储应用程序运行时的栈以及I/O缓冲区。
24 KB ROM:主要用于存储程序代码和系统的运行时系统。
8 KB EEPROM:主要用于存储Java卡的Applet和堆。
8位处理器:8位处理器是Java卡的最低要求。
(3)Java卡软件体系结构
Java卡软件体系结构如图1所示。
最底层的Card OS(操作系统)和Native Functions(基本函数),负责低层的处理工作。Java
Card VM位于Card OS和Native Functions之上,隐蔽了底层智能卡的不同技术,实现了卡接口的统一和编程语言的统一。
Java Card Framework(Java卡框架)为开发人员定义了一整套API,主要负责运行Java卡Applet以及为Applet运行提供所需要的环境。Card
OS、Java Card VM和Java Card Framework共同组成了JCRE(Java卡运行时环境)。Industry
Specific Extensions是服务方所提供的类,使企业与公司能够提供属于自己的服务程序。例如,如果这张卡是GSM网络的SIM(用户识别模块)卡,那么这一层就是SIM卡所需的接口类。
(4)Java Card API
Java Card的2.1版包括四个包:Javacard.lang package、Javacard.frame
work package、Javacard.security package和Javacardx.cryp to
package。Javacard.lang package提供Java程序语言中重要的类,例如所有Java类的根类Object类。Javacard.frame
work package是Java Card API的核心包,提供了实现Java Card Applet基本类和工具。其中ISO7816抽象接口提供了ISO7816所使用的常数值。PIN(个人识别号码)抽象接口使其子类能够验证PIN是否合法。Shareable抽象接口使得不同的Applet能够互相通信。AID类使得JCRE能够通过一个AID表来识别Applet。APDU类通过管理一个缓冲区来接收与传送终端的指令以及回传Applet运行结果与状态。Applet类是所有Java
Card Applet的根类,管理Java Card Applet的生命周期。JCSystem类管理Applet与Java
Card的系统资源,如AID与事务。OwnerPIN类管理卡片持有者的PIN,并提供相关验证与更新等方法。Util类提供了开发中的常用工具。
Javacard.security package负责提供安全机制,包括Key抽象接口、KeyBuilde类和MessageDisest类。Javacardx.cryp
to package包含了关于加密与安全的抽象接口和类。
(5)Java卡应用的开发
Java卡的生命周期从操作系统、JVM、API库和可选的Applet被写入Java卡的ROM开始。在正式使用之前,Java卡要经过初始化(在卡上写入制造商和发行商名称等通用信息)和个人化(在卡上写入密钥等个人信息)。然后用户就可以购买并使用Java卡了,当然还要与读卡器相配合。Applet的生命周期从被安装并注册到Java卡系统开始,在被从系统注册表中删除时结束,在被选择时激活。
Java卡的应用程序可以用一般的Java编译器来编译。但是由于智能卡只有有限的存储器资源和计算功能,Java卡上的应用开发与普通的Java程序开发有很大的不同,很多Java语言的特性在Java卡应用的开发中都不能使用。Java卡的应用开发(在Windows系统下)过程如下:
①安装JDK和Java Card 2.1.1 Development Kit;
②设置有关环境变量;
③编辑Java源代码,可以使用任何Java代码编辑工具;
④编译Java源代码,用Java编译器编译Java源代码,生成class文件;
⑤生成Cap文件,在Java卡上不能直接运行class文件,必须用Java卡转换器(converter)、把class文件转换为Cap文件;
⑥安装Applet,用PC机和与之相连的读卡器把Cap文件安装到Java卡上。
图2为Java卡应用开发过程示意图。
(6)Java卡在移动通信领域的应用
SIM(用户识别模块)作为一张内含大规模集成电路的智能卡,目前主要用于GSM手机。最初SIM卡主要用来存储一些个人身份认证和识别信息,例如IMSI、鉴权密钥等。SIM卡不能向手机发出命令。1998年ETSI(欧洲电信标准化委员会)制定了STK卡(SIM应用工具箱技术)的技术规范,大大增强了SIM卡的能力。STK卡上可以安装运行应用程序,可以向手机发出命令,例如在手机上建立新的菜单。SIM卡还可以收发短消息甚至发起呼叫。这样就可以在SIM卡上运行客户端的软件,通过短消息与服务器交互,同时通过菜单为用户提供友好的界面。
尽管STK对SIM卡的使用方法进行了标准化,但是各个制造商仍旧使用自己的开发工具为自选的芯片掩膜,因此引入开放的SIM卡开放平台成为必要。ETSI已在其协议中增加了有关Java
Card的内容。GSM SIM卡采用Java Card API在保证安全的同时提供开放的SIM开发,使得STK应用在不同制造商的SIM卡上运行。在开发过程中,软件开发商可采用开放的开发工具,开发出与Java兼容的SIM卡应用程序。
ETSI的协议GSM 03.19是STK Java卡的技术标准,规定了STK Java卡的体系结构。最底层是JCRE和GSM文件系统。之上是GSM框架,提供了一些供Applet接入GSM文件系统的API。在GSM框架之上是SIM
Toolkit框架,负责Applet的触发、注册、安装和卸载,主动式命令的处理,Applet的安全性管理。
J2ME简介
J2ME是Sun公司为资源有限的设备上使用Java编程语言而设计的,使用在各种各样的消费电子产品上,例如智能卡、手机、PDA、电视机顶盒等。J2ME平台是建立在Java编程语言上的,可为资源有限的设备提供最大的功能。
J2ME目前有两种配置层。一种是"面向连接的设备配置"CDC(Connected Device
Configuration),它采用典型的Java虚拟机技术。这种全功能的虚拟机包含了基于台式机系统上的虚拟机的所有功能,适用于拥有至少几兆字节内存的设备。它的目标是高档的消费类电子产品和嵌入式设备,例如智能通信器、高级"智能"寻呼机、智能个人数字助理(PDA)以及交互式数字电视机顶盒。对于无线设备和其它内存不足的设备,J2ME采用"面向连接的受限的设备配置"CLDC(Connected
Limited Device Configuration)技术。
J2ME对硬件的最低要求
CDC与CLDC对硬件平台有不同的要求
CDC-32位的微处理器,大于2MB的存储器
CLDC-16位或32位处理器,大于128KB的存储器。
J2ME软件体系结构
图3所示为J2ME软件体系结构。
Java Virtual Machine Layer(Java虚拟机层)是Java虚拟机的一个实现,它是为特定设备的主机操作系统定制的,而且支持一个特定的J2ME配备。CDC配置的JVM是CVM(C虚拟机),CLDC配置的JVM是KVM(K虚拟机)。
Configuration Layer(配置层)定义了Java 虚拟机功能和特定类别设备上可用的Java类库的最小集。从某种程序上说,一个配置定义了Java平台功能部件和库的共同性,开发者可以假设这些功能部件和库在属于某一特定类别的所有设备上都是可用的。
Profile Layer(框架层)定义了特定系列设备上可用的应用程序编程接口的最小集。框架在一个特定的配置上面实现,在配置层上增加适用特定规格的配置文件,如MIDP就是用于移动终端的配置文件。应用程序是针对特定的框架编写的,因此可以移植到支持该框架的任何设备上,一个设备可以支持多个框架。
J2ME API
CDC提供支持全兼容Java 2虚拟机所必需的最小API集。这一API集包括所有为CDC定义的API和针对文件I/O、网络连接、高级完全性、对象序列等API。其中Java.io支持系统输入与输出,Java
lang Java提供编程语言基本类,Java.lang.ref包括了一些特别参考类,Java.lang.reflect提供对反映的支持,Java.math支持数学运算,Java.net提供用于网络连接的类和工具,Java.security提供完全支持,Java.security.cert提供证书支持,Java.text提供文本处理类,Java.util包括集合、日期和时间支持等各种实用工具类,Java.util.jar提供Jar文件支持,Java.util.zip提供Zip文件支持,支持Javax.microedition类属连接。
由于MIDP/CLDC API将在一个性能有限的设备上运行,因此Java的一些功能被取消或修改。Java.lang、Java.io、Java.util包是J2SE包中标准类的一个子集。Javax.microedition.io包提供了对网络连接的支持,Javax.microedition.io包中的主要对象是Connector类。可将该类强制转换为不同的连接类型,例如HttpConnection。Javax.microedition.lcdui提供了用于定义midlet用户接口的类。Javax.microedition.rms包用来在设备上实现一个临时存储数据库,当然该数据库的存储和获取信息的性能受到设备的限制。Javax.microedition.midlet中包含有MIDlet的类。MIDlet类执行midlet的生命周期,并且提供getAppProperty(key)方法来由应用属性中获取信息。应用属性设置在jad(Java应用程序描述器)文件中。
Java卡在移动通信领域的应用
CLDC和MIDP为创建移动电话应用程序提供了完整的环境。MID框架的核心是一个MIDlet应用程序,所有应用程序MIDlet都继承MIMlet类,以允许应用程序管理软件对MIDlet进行控制、从应用程序描述符检索属性以及对状态变化进行通知和请示。MIDlet类提供了用于调用、暂停、重新启动和终止MIDlet应用程序的API。应用程序管理软件可以在运行时环境内管理多个MIDlet的活动。此外,MIDlet可以自己发起一些状态变化,并把这些变化通知给应用程序管理软件。
移动电话J2ME MIDP应用程序包括用户界面开发、数据库程序开发和网络程序开发。
Javax.microedition.lcdui包中包括了用于用户界面开发的各种类。用户界面的根类是Display,所有的用户界面类都是在Display里显示出来的Displayable对象,Display对象是其它对象演示的舞台,应用程序道德需要获得Display对象的引用,然后就可以把场景对象放入演示舞台中。MIDP提供了Screen和Canvas两种演示场景。Screen的子类包括Alert、Form、List和TextBox。Javax.microedition.lcdui中定义了Command类来接收用户的输入信息,又在Display类中定义了Screen对象与Command对象组合的方法,使得应用程序能够响应用户的输入。
在Screen场景中可以使用的对象包括Alert(信息窗口)、Form(窗体)、List(选项列表)和TextBox(文本框)。其中Form可以放置Item类,包括TextFiled(文本字段)、StringItem(字符串项目)、ImageItem(图像项目)、DataField(日期字段)、ChoiceGroup(选项集合)和Gauge(标尺)。TextBox使应用程序能够在屏幕上显示文本框;Alert类似于消息框,可以为用户提供一些信息;List类以列表的形式提供选项使用户选择;Form是一个容器对象,可以放置包括文本字段、字符串项目、图像项目、日期字段、选项集合和标尺等在内的Item对象。
Canvas是Displayable中用来给开发者创建整个用户接口的,用于创建复杂的用户界面,例如视频游戏中使用的界面。用户在Canvas对象上的绘画与Applet中的AWT
Canvas类似。
Javax.microedition.rms定义了在设备上实现一个临时存储数据库程序开发的类。其中采用由字节数组RMS(记录管理系统)机制,使用称为RecordStore(记录存储区)的小型数据库。每个记录存储区对象是Javax.microedition.rms类的一个实例。记录存储区是由字节数组组成的记录构成的。RecordStore提供了用于用户操作记录和管理存储区的方法,对记录的操作包括增加、删除、更新和查询。
Javax.microedition.io为应用程序开发者提供GCF(通用联机框架),用于网络编程。网络编程的根类是Connecter,通过Connecter提供了HTTP、SOCKET、Datagram(数据报)和Serial
Port(串行口)等网络通信方式,其中HTTP为设备的必选项。
J2ME MIDP应用程序的开发过程
Sun公司最近推出的工具包J2ME WTK(Java 2 Micro Edition Wireless Toolkit)简化了MIDlet的开发,为MIDlet开发提供了一个全面的工具包。应用程序的开发过程如下:
①安装J2SE或者Java Runtime Enviroment。
②安装J2ME WTK。
③配置仿真器。
④编辑Java源文件,可以使用任何Java代码编辑工具。
⑤编译Java源代码,用Java编译器编译Java源代码,生成Class文件。除了编译以外,编译器还会检查源文件中有没有使用CLDC和MIDP以外的类和属性及方法。
⑥验证字节码。
⑦封装成MIDlet Suite,把经过验证的Class文件及应用程序中将用到的资源文件封装成JAR文件,这一步会生成JAD文件和mainfest文件。
⑧测试,然后下载到目标机上运行。
结语
Java本来就是为嵌入式设备而设计的,随着因特网的兴起,Java在台式机和服务器端的应用开发中取得了巨大的成功。Java在应用中充分展示其通用性与完全性等优势,而这在嵌入式设备的应用开发中是至关重要的,这使得Java重返嵌入式应用开发领域成为必然。STK
Java卡和J2ME的成功应用昭示着Java在嵌入式系统应用开发中的美好前景。
|