引言
现在Java技术十分流行,发展势头强劲,而且在SUN公司推出了J2ME平台后,众多移动式系统都纷纷支持Java应用程序。由于Java已经成为了业界公认的通用网络语言,具有超强的跨平台性,所以Java这种write once,Run anywhere的特性被目前几乎所有的手机系统开发商所承认并运用。无一例外,当今的智能手机操作系统都支持KJava技术。为了保证手机操作系统支持运行Java程序,需要将Java虚拟机移植到手机操作系统上。由于手机这种移动式信息设备都采用小容量的F1ash和RAM,所以就要求虚拟机体积更小,实时效率更高,故这种Java虚拟机被称为KVM(K Vinual Machine)。
由于J2ME是以消费性产品为目标而设计的 Java运行环境,专门针对移动电话、数字机顶盒和汽车导航系统,因而影响力巨大。本文将研究在MTK手机操作系统上实现嵌入式Java。整个J2ME运行平台包括Java应用的下载、安装、运行及触摸屏支持等一系列功能。
1 相关技术研究
1.1 J2ME平台
现在的 Java系统是一个全方位的开发、运行平台,可以在任何计算环境中实现。在嵌入式系统,suN公司推出了J2ME(Java 2 platform Micro Edition)。
J2ME是Java 2标准版本的微型版本,支持各种各样的消费类产品和嵌入式设备,如移动电话、PDA、互联网可视电话、数字机顶盒、车载娱乐和导航系统、网络交换设备以及信息家电等。J2ME是为了那些使用有限的能源、有限的网络连接(通常是无线连接)以及有限图形用户界面能力的设备开发的。
J2ME体系结构如图1所示。其中简表层、配置层和Java虚拟机是J2ME的组成部分。J2ME是一个简化的Java,是针对各种不同的低端设备而设计的。为了满足各种环境,J2ME设计了简表一配置规范。配置是一个语言特性和核心类的配置规范,针对不同的环境(内存、显示、网络连接和处理能力)给定不同的配置。也就是定义了该环境的Java语言子集和核心类库,虚拟机开发者遵照此配置来开发虚拟机。最著名的两个配置是连接设备配置(CDC)和连接有限设备配置 (cLDC)。
CLDC包括K虚拟机(KVM)和一组核心类库,主要是针对用户接口简单、内存较小、网络运行时连时断以及带宽较窄的小型无线设备。其中KVM是JVM的一个实现,特别用于移动电话、PDA等设备。
简表是针对相同配置的不同特性而开发的扩展类库,它提供给开发者在特定类型设备上开发的类库。例如,移动信息设备子集MIDP(Mobile Information Device Pro—file)综合考虑了移动设备的屏幕和内存限制,定义了J2ME适用的硬件和软件框架,并提供了这个框架要实现的基本功能及标准接口;应用开发者可以基于这个框架开发出各种应用。MIDP 2.O定义了一系列软件接口,包括基本输入输出、图形用户接口、网络、事件机制、文件系统、应用管理系统、游戏接口、声音输出接口和安全机制。
由于CLDC的设备资源受到限制,所以SUN公司专门开发了一个新的虚拟机KVM。 Sun公司于2000年公布了KVM的参考实现,采用解释执行字节码的Java虚拟机。与编译执行相比,解释执行的Java虚拟机在移动通信设备上具有显著的优点:虚拟机占用移动通信设备非易失性存储空间比较小;虚拟机运行时占用RAM空间比较小;解释执行核心代码量小;字节码占用RAM空间比较小;实现难度低,可移植性好。现有的具有KVM支持的移动通信设备大多是基于该参考实现的。
1.2 MTK系统
MTK 方案是***联发科技公司提供的手机解决方案。近70%的国产手机采用MTK的芯片和平台。有资料显示,2007年MTK手机芯片出货量高达1.5亿片,全球市场占有率近14%,仅次于德州仪器及高通公司。若只计算MTK进入全球GSM手机芯片的市场规模,大约省7亿~8亿部手机,市场占有率已高达20%以上,排名仅次于德州仪器公司。
在目前MTK市场上,MTK6225平台占据主导地位。该系统的主要功能如下:
①任务管理。系统任务采用静态创建方式,静态配置任务优先级、栈大小、任务全局唯一ID等;不提供动态创建Task的方式;任务内部以及任务之间的通信通过内部事件队列和外部事件队列完成。
②内存管理。平台不提供动态分配内存的方式;应用程序需要使用动态分配内存时,可以采用以下几种方式:与系统其他模块共享内存,典型的是使用MED模块的内存;定义一个静态数组,交给系统adm托管,然后调用kal_adm_alloc、 kal_adm_free等内存操作函数实现动态内存分配;定义一个静态数组,应用自己实现基于此数组的分配和管理,也就是实现自己的内存管理模块。
③ 事件机制。平台事件机制采用“注册-回调”机制,把需要处理的各个按键、触摸屏等通过系统函数注册,当有事件发生时系统调用所注册的监听者。
④UI。系统MMI层提供了丰富的UI元素,如各种消息框、列表、图标等。
⑤系统局限性。MTK6225平台只有一种中文字体,字体大小固定。
2 平台设计
2.1平台功能分析
在MTK平台上实现J2ME运行环境,需要实现的功能如下:
①应用程序管理。Java拥有丰富的应用程序,平台需要管理这些应用程序,因此要实现应用程序管理系统。应用程序管理系统功能包括程序的安装、删除、运行、下载等。
②虚拟机的实现平台。嵌入式Java虚拟机的实现平台有多种方式。它可以直接嵌入到裸机上,也可以加载于其他嵌入式操作系统之上,成为一台抽象的计算机。它的平台无关性给它带来了巨大的发展前景。经过研究,在MTK平台上,采用SUN公司公布的KVM作为核心,结合虚拟机所需要实现的功能和MTK平台,设计和实现移植接口,最后在MTK平台上运行KVM,在KVM之上运行Java应用程序。
2.2 平台框架设计
系统平台由应用程序管理系统(Application ManagementSystem,AMS)、KVM核心(KvM core)、KVM移植接口层、MTK系统平台构成。平台框图如图2所示。
应用程序管理系统是整个系统和用户的交互层,负责对J2ME应用程序的下载、列表显示、安装、删除、运行等;KVM核心是整个J2ME运行系统的核心,包含MIDP2.0十CLDCl.1的实现;KVM移植接口层是KVM在系统平台上移植需要的接口层,负责提供KVM核心运行所需要的所有与操作系统相关的功能调用;MTK系统平台负责提供KVM移植接口层所需要实现的所有函数的操作系统调用。
2.3 Java虚拟机移植设计
KVM核心在运行的时候需要向MTK平台获取内存资源、获取外部事件、文件操作等。将所有与系统相关的调用抽象出来,形成抽象接口层,如图3所示。
移植接口层包含以下部分:
①文件系统部分,对文件操作,实现创建、打开、关闭、读、写等功能。KVM在运行的时候需要通过这部分接口使用本地文件,如打开jar、jad文件等。
②网络部分,提供 Socket访问功能。
③外部事件,获取用户输入,包括按键输入和触摸屏④图形显示部分,负责KVM图形及文字显示。
⑤ 系统时间部分,提供给KVM精确的系统时间。
⑥输入法,Java程序运行时可能要求用户输入,此接口实现调用系统输入法功能。
⑦ 其他接口,内存访问、交互性事件通知以及扩充的JSR实现所需要的接口,如JSRl20、JSRl35等。
2.4 应用程序管理系统设计
应用程序管理系统管理整个Java运行环境,实现如下功能:
①显示应用程序列表,展示给用户当前手机系统的所有可用的应用程序。
②应用管理功能选择菜单,菜单应包括两种类型,分别是程序已经安装好的菜单项和程序还未下载,只有jad文件在本地,需要向服务器请求下载应用安装后才能运行的菜单项。
③下载应用,与服务器通信下载用户选择的应用。用户启动Java应用流程如图4所示。
根据UI和engine的划分,可以把应用程序管理系统分为应用程序管理界面和应用管理系统核心:应用程序管理界面提供给用户交互式界面,包括管理系统主界面、程序下载界面、程序运行界面、管理功能菜单以及各级子界面;应用管理系统核心由实现功能的一系列API组成,提供给上层界面调用,实现程序的下载、安装、删除、运行等功能。
3 平台的实现
3.1 Java虚拟机移植的实现
在实现内存管理模块时,由于平台不提供动态分配内存方式,而虚拟机需要一块比较大的内存,不能从MED模块分配,且根据需要会对内存进行压缩整理,不适合采用系统托管方式。所以,采用虚拟机自己管理内存的方式,实现内存管理模块。
KVM就像一个软处理器一样控制解释Java字节码和它的执行状况,每一个创建的Java线程在Java堆中都会有各自的线程执行栈,并且由KVM运行来调度管理。为了使KVM能尽量正确地划分时间片,需要给一个时间标准作为KVM的内部时钟,由时间接口实现。系统提供void kal_get_time(kal_uint32*ticks_ptr)函数,可精确到1个ticks(4.615 ms)。
系统只提供一种大小字体,而Java应用需要使用3种大小字体。可以采用以下方式实现:
①设计实现虚拟机自身的文字模块,采用3种大小的ASCII 和GB2312字体点阵字库,从中提取文字点阵信息,由虚拟机图形显示模块显示。
②只提供一种大小的字体,这样应用会受限制。
由于系统平台可用内存小,文字点阵字库相对比较大,不适合在这个平台使用,因此选择采用第2种方式。
如今在移动多媒体领域,Java应用大多要求联网,所以实现网络通信,即要实现TcP/IP,支持套接字,是KVM一个非常重要的功能。系统“SOC_api.h”文件中定义了套接字接口 API,使用此接口实现虚拟机网络方面移植非常方便。
Java应用要求支持多媒体音频和事件处理,提供用户最好的交互功能。在多媒体音频方面,MTK系统提供了非常全面的支持——支持MID、MP3等格式的音频播放。
根据Java应用的需求,一些基于MIDP2.O扩展包的实现成为必要。本系统实现了JSRl20的短信功能以及JSRl35的部分功能。
3.2 应用程序管理系统的实现
实现了应用程序管理核心API,包括对jar、jad文件的安装、删除、信息获取等等。系统MMI层提供了丰富的UI元素,因此比较容易地实现了应用程序管理界面。
实现了应用下载模块,与服务器通信下载应用。由于平台未提供HTTP协议的实现,因此在基于所设计的虚拟机Socket接口之上,实现了HTTP协议,连接服务器下载用户选择的相关应用。
结语
J2ME运行平台在MTK系统上的设计和实现,充分考虑了系统空间的局限性和运行效率这两大要素,以及Java运行时与系统的交互事件处理问题,实现了在MTK平台上下载、安装、运行Java应用一体化平台,并在MIDP2.0基础上扩充实现了JSRl20、JSRl35部分功能。
该平台已经在多款MTK6225平台手机上运行。
引言
现在Java技术十分流行,发展势头强劲,而且在SUN公司推出了J2ME平台后,众多移动式系统都纷纷支持Java应用程序。由于Java已经成为了业界公认的通用网络语言,具有超强的跨平台性,所以Java这种write once,Run anywhere的特性被目前几乎所有的手机系统开发商所承认并运用。无一例外,当今的智能手机操作系统都支持KJava技术。为了保证手机操作系统支持运行Java程序,需要将Java虚拟机移植到手机操作系统上。由于手机这种移动式信息设备都采用小容量的F1ash和RAM,所以就要求虚拟机体积更小,实时效率更高,故这种Java虚拟机被称为KVM(K Vinual Machine)。
由于J2ME是以消费性产品为目标而设计的 Java运行环境,专门针对移动电话、数字机顶盒和汽车导航系统,因而影响力巨大。本文将研究在MTK手机操作系统上实现嵌入式Java。整个J2ME运行平台包括Java应用的下载、安装、运行及触摸屏支持等一系列功能。
1 相关技术研究
1.1 J2ME平台
现在的 Java系统是一个全方位的开发、运行平台,可以在任何计算环境中实现。在嵌入式系统,suN公司推出了J2ME(Java 2 platform Micro Edition)。
J2ME是Java 2标准版本的微型版本,支持各种各样的消费类产品和嵌入式设备,如移动电话、PDA、互联网可视电话、数字机顶盒、车载娱乐和导航系统、网络交换设备以及信息家电等。J2ME是为了那些使用有限的能源、有限的网络连接(通常是无线连接)以及有限图形用户界面能力的设备开发的。
J2ME体系结构如图1所示。其中简表层、配置层和Java虚拟机是J2ME的组成部分。J2ME是一个简化的Java,是针对各种不同的低端设备而设计的。为了满足各种环境,J2ME设计了简表一配置规范。配置是一个语言特性和核心类的配置规范,针对不同的环境(内存、显示、网络连接和处理能力)给定不同的配置。也就是定义了该环境的Java语言子集和核心类库,虚拟机开发者遵照此配置来开发虚拟机。最著名的两个配置是连接设备配置(CDC)和连接有限设备配置 (cLDC)。
CLDC包括K虚拟机(KVM)和一组核心类库,主要是针对用户接口简单、内存较小、网络运行时连时断以及带宽较窄的小型无线设备。其中KVM是JVM的一个实现,特别用于移动电话、PDA等设备。
简表是针对相同配置的不同特性而开发的扩展类库,它提供给开发者在特定类型设备上开发的类库。例如,移动信息设备子集MIDP(Mobile Information Device Pro—file)综合考虑了移动设备的屏幕和内存限制,定义了J2ME适用的硬件和软件框架,并提供了这个框架要实现的基本功能及标准接口;应用开发者可以基于这个框架开发出各种应用。MIDP 2.O定义了一系列软件接口,包括基本输入输出、图形用户接口、网络、事件机制、文件系统、应用管理系统、游戏接口、声音输出接口和安全机制。
由于CLDC的设备资源受到限制,所以SUN公司专门开发了一个新的虚拟机KVM。 Sun公司于2000年公布了KVM的参考实现,采用解释执行字节码的Java虚拟机。与编译执行相比,解释执行的Java虚拟机在移动通信设备上具有显著的优点:虚拟机占用移动通信设备非易失性存储空间比较小;虚拟机运行时占用RAM空间比较小;解释执行核心代码量小;字节码占用RAM空间比较小;实现难度低,可移植性好。现有的具有KVM支持的移动通信设备大多是基于该参考实现的。
1.2 MTK系统
MTK 方案是***联发科技公司提供的手机解决方案。近70%的国产手机采用MTK的芯片和平台。有资料显示,2007年MTK手机芯片出货量高达1.5亿片,全球市场占有率近14%,仅次于德州仪器及高通公司。若只计算MTK进入全球GSM手机芯片的市场规模,大约省7亿~8亿部手机,市场占有率已高达20%以上,排名仅次于德州仪器公司。
在目前MTK市场上,MTK6225平台占据主导地位。该系统的主要功能如下:
①任务管理。系统任务采用静态创建方式,静态配置任务优先级、栈大小、任务全局唯一ID等;不提供动态创建Task的方式;任务内部以及任务之间的通信通过内部事件队列和外部事件队列完成。
②内存管理。平台不提供动态分配内存的方式;应用程序需要使用动态分配内存时,可以采用以下几种方式:与系统其他模块共享内存,典型的是使用MED模块的内存;定义一个静态数组,交给系统adm托管,然后调用kal_adm_alloc、 kal_adm_free等内存操作函数实现动态内存分配;定义一个静态数组,应用自己实现基于此数组的分配和管理,也就是实现自己的内存管理模块。
③ 事件机制。平台事件机制采用“注册-回调”机制,把需要处理的各个按键、触摸屏等通过系统函数注册,当有事件发生时系统调用所注册的监听者。
④UI。系统MMI层提供了丰富的UI元素,如各种消息框、列表、图标等。
⑤系统局限性。MTK6225平台只有一种中文字体,字体大小固定。
2 平台设计
2.1平台功能分析
在MTK平台上实现J2ME运行环境,需要实现的功能如下:
①应用程序管理。Java拥有丰富的应用程序,平台需要管理这些应用程序,因此要实现应用程序管理系统。应用程序管理系统功能包括程序的安装、删除、运行、下载等。
②虚拟机的实现平台。嵌入式Java虚拟机的实现平台有多种方式。它可以直接嵌入到裸机上,也可以加载于其他嵌入式操作系统之上,成为一台抽象的计算机。它的平台无关性给它带来了巨大的发展前景。经过研究,在MTK平台上,采用SUN公司公布的KVM作为核心,结合虚拟机所需要实现的功能和MTK平台,设计和实现移植接口,最后在MTK平台上运行KVM,在KVM之上运行Java应用程序。
2.2 平台框架设计
系统平台由应用程序管理系统(Application ManagementSystem,AMS)、KVM核心(KvM core)、KVM移植接口层、MTK系统平台构成。平台框图如图2所示。
应用程序管理系统是整个系统和用户的交互层,负责对J2ME应用程序的下载、列表显示、安装、删除、运行等;KVM核心是整个J2ME运行系统的核心,包含MIDP2.0十CLDCl.1的实现;KVM移植接口层是KVM在系统平台上移植需要的接口层,负责提供KVM核心运行所需要的所有与操作系统相关的功能调用;MTK系统平台负责提供KVM移植接口层所需要实现的所有函数的操作系统调用。
2.3 Java虚拟机移植设计
KVM核心在运行的时候需要向MTK平台获取内存资源、获取外部事件、文件操作等。将所有与系统相关的调用抽象出来,形成抽象接口层,如图3所示。
移植接口层包含以下部分:
①文件系统部分,对文件操作,实现创建、打开、关闭、读、写等功能。KVM在运行的时候需要通过这部分接口使用本地文件,如打开jar、jad文件等。
②网络部分,提供 Socket访问功能。
③外部事件,获取用户输入,包括按键输入和触摸屏④图形显示部分,负责KVM图形及文字显示。
⑤ 系统时间部分,提供给KVM精确的系统时间。
⑥输入法,Java程序运行时可能要求用户输入,此接口实现调用系统输入法功能。
⑦ 其他接口,内存访问、交互性事件通知以及扩充的JSR实现所需要的接口,如JSRl20、JSRl35等。
2.4 应用程序管理系统设计
应用程序管理系统管理整个Java运行环境,实现如下功能:
①显示应用程序列表,展示给用户当前手机系统的所有可用的应用程序。
②应用管理功能选择菜单,菜单应包括两种类型,分别是程序已经安装好的菜单项和程序还未下载,只有jad文件在本地,需要向服务器请求下载应用安装后才能运行的菜单项。
③下载应用,与服务器通信下载用户选择的应用。用户启动Java应用流程如图4所示。
根据UI和engine的划分,可以把应用程序管理系统分为应用程序管理界面和应用管理系统核心:应用程序管理界面提供给用户交互式界面,包括管理系统主界面、程序下载界面、程序运行界面、管理功能菜单以及各级子界面;应用管理系统核心由实现功能的一系列API组成,提供给上层界面调用,实现程序的下载、安装、删除、运行等功能。
3 平台的实现
3.1 Java虚拟机移植的实现
在实现内存管理模块时,由于平台不提供动态分配内存方式,而虚拟机需要一块比较大的内存,不能从MED模块分配,且根据需要会对内存进行压缩整理,不适合采用系统托管方式。所以,采用虚拟机自己管理内存的方式,实现内存管理模块。
KVM就像一个软处理器一样控制解释Java字节码和它的执行状况,每一个创建的Java线程在Java堆中都会有各自的线程执行栈,并且由KVM运行来调度管理。为了使KVM能尽量正确地划分时间片,需要给一个时间标准作为KVM的内部时钟,由时间接口实现。系统提供void kal_get_time(kal_uint32*ticks_ptr)函数,可精确到1个ticks(4.615 ms)。
系统只提供一种大小字体,而Java应用需要使用3种大小字体。可以采用以下方式实现:
①设计实现虚拟机自身的文字模块,采用3种大小的ASCII 和GB2312字体点阵字库,从中提取文字点阵信息,由虚拟机图形显示模块显示。
②只提供一种大小的字体,这样应用会受限制。
由于系统平台可用内存小,文字点阵字库相对比较大,不适合在这个平台使用,因此选择采用第2种方式。
如今在移动多媒体领域,Java应用大多要求联网,所以实现网络通信,即要实现TcP/IP,支持套接字,是KVM一个非常重要的功能。系统“SOC_api.h”文件中定义了套接字接口 API,使用此接口实现虚拟机网络方面移植非常方便。
Java应用要求支持多媒体音频和事件处理,提供用户最好的交互功能。在多媒体音频方面,MTK系统提供了非常全面的支持——支持MID、MP3等格式的音频播放。
根据Java应用的需求,一些基于MIDP2.O扩展包的实现成为必要。本系统实现了JSRl20的短信功能以及JSRl35的部分功能。
3.2 应用程序管理系统的实现
实现了应用程序管理核心API,包括对jar、jad文件的安装、删除、信息获取等等。系统MMI层提供了丰富的UI元素,因此比较容易地实现了应用程序管理界面。
实现了应用下载模块,与服务器通信下载应用。由于平台未提供HTTP协议的实现,因此在基于所设计的虚拟机Socket接口之上,实现了HTTP协议,连接服务器下载用户选择的相关应用。
结语
J2ME运行平台在MTK系统上的设计和实现,充分考虑了系统空间的局限性和运行效率这两大要素,以及Java运行时与系统的交互事件处理问题,实现了在MTK平台上下载、安装、运行Java应用一体化平台,并在MIDP2.0基础上扩充实现了JSRl20、JSRl35部分功能。
该平台已经在多款MTK6225平台手机上运行。
举报