当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]基于ST20嵌入式系统的Java虚拟机研究与移植

摘  要:分析了开放源码的Java虚拟机Kaffe的结构、运行机制,并针对DVB(Digital Video Broadcast)数字机顶盒软件架构中对基于Java虚拟机的MHP(Multimedia Home Platform)中间件研发的需求,研究了将Kaffe移植到Sti5516处理器和其专用OS20操作系统的关键技术,给出了相应的移植方案。对深入了解MHP在数字机顶盒中的应用给出了研究方向和基本思路。
关键词嵌入式系统;Java虚拟机;DVB;中间件

1 引言

随着现代信息技术的迅猛发展,电视数字化步伐加快了。从一开始的模拟电视到现在的数字电视,不仅大大提高了电视节目的质量,也推动了电视数字化的进一步发展。在各种数字视频广播标准中,欧洲的DVB(Digital Video Broadcast)标准使用比较广泛,它为在同一信道中传输视频、音频、数据提供了一种灵活、高效的方式,可以通过卫星、电缆和地面信道传输高质量的电视节目。同时基于DVB的数据广播标准也能满足人们对于宽带数据业务的要求,如证券信息服务、电子节目、MP3音乐下载、电子邮件、网页浏览等,在现代信息技术领域应用极为广泛。

图一 数字机顶盒架构

从图一我们可以看到, 一个完整的数字机顶盒由硬件平台和软件系统组成,可以将其分为4层,从底向上分别为硬件、底层软件、中间件、应用软件。硬件提供机顶盒的硬件平台;底层软件提供操作系统内核以及各种硬件驱动程序;应用软件包括本机存储的应用和可下载的应用;中间件是一种将应用程序与底层的操作系统、硬件细节隔离开来,使应用不依赖于具体的硬件平台的软件环境。这样用户可以在任何厂家的硬件平台上进行应用软件开发,和应用软件下载。而不必介意任何底层的有关信息,保证了机顶盒的开发专业化。这种分层的思想在现代系统设计中十分常见,如大名鼎鼎的TCP/IP协议。中间件通常由各种虚拟机来构成,如HTML虚拟机、JavaScript虚拟机、Java虚拟机[1]等。

现在广电行业倾向于DVB-MHP(多媒体家庭平台)中间件标准。DVB-MHP基于开放性的Java程序语言,具有软硬件兼容性好、可移植成本低、二次再开发功能强等优点,是一种很有发展前途的中间件技术标准。可以相信,Java在数字视频广播中的应用将越来越多,我们有必要研究Java技术核心—虚拟机,包括其结构、运行机制及虚拟机移植到数字机顶盒平台的关键技术。本文面向采用ST(意法半导体公司)Sti5516芯片的数字机顶盒平台,将基于数字电视播放(Digital Video Broadcast,DVB)的多媒体家庭平台(Multimedia Home Platform,MHP)规范[2]进行中间件平台分析,重点研究开放源码的Java虚拟机---Kaffe在其中的作用和相关的移植技术。

2 平台介绍

2.1 硬件平台

数字机顶盒硬件平台基于ST公司的芯片Sti5516[3],Sti5516芯片集成了CPU内核ST20-C2、音/视频MPEG-2解码器、PAL/NTSC/SECAM编码器等。开发板上有8MB的共享内存和16MB的外部内存,4MB的Flash,并采用实时处理的嵌入式操作系统OS20。

2.2 软件平台

一个典型的适用于嵌入式的Java运行环境包括以下组件:

1.一个Java虚拟机。用来将独立于平台的Java字节码解释成目标机本地机器码,并执行动态类加载。这可以采取解释执行或实时编译执行(JIT)的形式。两者的不同点就在于字节码的执行速度;因为JIT避免了重复解释以前执行过的程序块。

2.一个标准Java类库集,以字节码的形式存在。如果应用程序并不引用任何类库,那这些类库就并不一定要求存在。

3.任何类库或虚拟机所需的本地方法(JNI)。这些函数是由其它高级语言所写,并和Java虚拟机一起预编译,链接。这些函数被用来执行处理器相关或Java无法直接实现的功能。

4.一个多任务操作系统,用来提供Java线程及线程同步机制的底层实现。

5.一个垃圾回收线程。垃圾回收周期运行或当动态内存池不能满足分配请求时运行,用来申明那些已经被分配但不再被应用程序所使用的内存。

图二 Kaffe架构

如图二虚线所示,Kaffe是一个完整的Java实现,它由3部分组成:遵从 Personal Java1.1规范的 Java类库[4],Java1.1虚拟机和本地动态或静态链接库。Kaffe虚拟机源码按以下子目录组织:

    kaffe---包括了解释器与JIT平台无关部分,以及垃圾回收,动态类加载和Java runtime environment其它模块的源代码。

    config---包括了解释器与JIT平台相关部分。它按所支持的处理器来划分子目录,里面存放系统相关代码。

    package---Java类库以及任何它所依赖的本地方法。

    include---在子目录中提供的本地方法的接口定义。这些接口被平台独立文件所需要。

3 Kaffe移植的关键技术及方案

经过对Kaffe深入分析和研究,笔者已在Sti5516平台上成功地移植了Kaffe[5],并依据DVB-MHP规范,结合机顶盒特定软硬件环境要求,建立了能运行Kaffe虚拟机的Java应用程序运行平台。下面将移植工作及相应步骤总结如下:

3.1字节码解释器

由于Kaffe源码中没有映射Java字节码到处理器相关的汇编代码块,而是使用C实现了每个字节码。这样就导致字节码解释器的源代码没有一行是处理器相关的。这意味着移植最简虚拟机(无JIT)将非常简单:只需要使用交叉编译器来编译kaffe/kaffevm子目录下的文件即可。

3.2内部线程

Kaffe有它自己的内部线程包。换句话说,它维护自己的线程数据结构,并在适当的时候执行线程调度及上下文切换。为了使内部线程包能运行在ST20处理器架构上, 需要在config/os20子目录中创建一个threads.h文件。这个文件定义了两个常量和四个宏。这些常量和宏被内部线程包里处理器无关的部分代码所使用。

Ø         USE_INTERNAL_THREADS定义为ENABLE。

Ø         THREADSTACKSIZE是一个常量,定义为每个线程堆栈的大小,单位bytes。

Ø         THREADINIT(ctx * pContex, void (*func)())执行新线程的上下文初始化。该线程的入口点被func指针所提供。

Ø         THREADSWITCH(ctx * pNewContext, ctx * pOldContext)执行实际的上下文切换。

Ø         THREADINFO(ctx * pContext)在Kaffe初始化期间重置整个任务控制块。

Ø         THREADFRAMES(thread * taskId, int count)返回活动的堆栈桢个数。

3.3支持软件

和其它大多数用C写的程序一样,Kaffe依赖于标准C库里的例程。由于ST采用符合GNU规范的GCC编译器,如strcmp(),atoi(),sin()等标准C库函数被支持。除此之外OS20提供以下支持:

Ø         动态内存分配malloc()。尽管Java程序员不会直接调用malloc(),但Kaffe虚拟机需要从底层调用内存分配例程来请求大的内存池。

Ø         信号。Kaffe依赖于与POSIX兼容的信号实现机制来执行相应的软件中断。而这可以用来唤醒休眠线程和异常句柄。

Ø         非阻塞I/O接口。和select()相似。

3.4动态类加载器

为了在OS20操作系统中使用,须修改源代码中平台无关的部分---动态类加载器。它是Java运行时环境的一部分,被用来负责加载被调用的方法(methods)。在桌面环境中,与方法相关的字节码被放在类文件中,动态类加载器使用给定的方法名在类路径下的子目录和文件里搜索。但由于OS20操作系统没有文件系统,所以类加载器必须被修改成在内存(RAM或ROM)中搜索类文件。为此我们完全重写动态类加载器。

我们采用了静态查找表装载机制,建立了一个查找表。这个查找表的结构定义如下:

typedef struct

{

int index;

int size;

char name;

}classIndexTable;

这个查找表用来映射类名或方法名到它们在内存中的起始地址。这样就可以用查找表来替代类加载器。即将类型和路径组合为一个唯一的标识, 比如“java string”,组合起来就是“java_string”,然后再利用这个组合的结果检索查找表。

利用组合的结果与查找表中每一项的name字段进行字符串比较,直到完全匹配为止。如果没有任何匹配则说明系统不支持这个类型。匹配上name 后,类装载器将获得index和size的值。index是一张存放所有.class文件起始地址表的索引,根据这个索引就可以找到具体的.class文件的二进制映像的起始地址,而size则是该.class文件的大小。这样根据.class文件存储位置的地址和大小就可以成功地完成类的装载。

3.5虚拟机启动

由于OS20操作系统是被GCC编译到主程序中,我们需要将kaffe虚拟机的初始化函数做为主应用程序中的某个任务来运行。kaffe虚拟机的初始化与启动是通过在主程序中运行initializeKaffe()函数来完成的。

测试与结果

在主程序中,调用OS20操作系统中的系统调用task_create()来将Kaffe虚拟机初始化为系统的一个进程。并为它分配必要资源,包括进程优先级、系统需要的内存空间等。依照分配的优先级,参与系统的进程调度。最后,将整个修改好的源代码在新的编译环境下编译连接成可执行代码,通过JTAG口下载到机顶盒开发板中运行。

  Kaffe虚拟机的“输入”是“hello.java”,经过编译后生成类文件“hello.class”。运行下载到Flash的主程序,在调试终端可以看到“hello world”字样,这是Kaffe虚拟机解释字节码的结果。说明基于Sti5516芯片的Kaffe虚拟机移植成功。

结束语

以上介绍了Java虚拟机Kaffe的软件架构,从中我们可以看出,Kaffe虚拟机具有较好的可扩展结构模型,是遵循Java规范的优良的开放源码虚拟机,可以适应多种嵌入式应用环境。本文按照欧洲DVB-MHP规范,给出了Kaffe虚拟机在Sti5516机顶盒环境下的移植方案,使其可以应用于要求较高的嵌入式系统中,为机顶盒在证券信息服务、电子节目、MP3音乐下载、电子邮件、网页浏览等新型服务领域的开发应用奠定坚实的基础。我们相信,随着基于Java技术的DVB-MHP中间件技术的广泛使用,将使嵌入式系统的应用开发更加简捷方便。

参考文献

[1] 李旻枫. Jeode让Java在嵌入式系统中运转如飞[J].微计算机信息, 2002,18(4):45-46.
[2] Digital Video broadcasting (DVB): Multimedia home Platform(MHP) Specification 1.1[S]. tm2485, tam668r12.
[3] Sti5516 Data sheet, STMicroelectronics. [DB/OL]. www.st.com.
[4] Sun Document. The JavaTM Virtual Machine Specification. 1999.
[5] 严东华,张凯,Java虚拟机及其移植. 北京理工大学学报,2002;2:64-67.

本文作者创新点:本文作者给出了Kaffe虚拟机在Sti5516机顶盒环境下的移植方案,使其可以作用于被广泛使用在数字机顶盒系统中的ST芯片上,为机顶盒在证券信息服务、电子节目、MP3音乐下载、电子邮件、网页浏览等新型服务领域的开发应用奠定坚实的基础。这一移植方案为在意法半导体Sti5516芯片上移植Java中间件提供了一种思路,也对在其它嵌入式系统移植Java虚拟机有一定的参考价值。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在FPGA和IC设计领域,经常会面临一个挑战:多个端口同时竞争一个端口的数据。在这种情况下,采用RR调度策略可能是一种解决方案。

关键字: FPGA 嵌入式系统 IC设计

“实现机器人操作系统——电机控制器ROS1驱动程序简介”一文中概述了新型ADI Trinamic™电机控制器(TMC)驱动程序,并讨论了将电机控制器集成到机器人操作系统(ROS)生态系统中的方法。TMC ROS1驱动程序...

关键字: 电机控制器 机器人 嵌入式系统

台湾新竹 – 2024年4月23日 – 著名的微控制器供货商新唐科技公司,与全软件开发生命周期提供跨平台解决方案的全球软件公司Qt Group宣布深化合作,扩展新唐科技人机界面(HMI)平台支持「Qt for MCUs」...

关键字: 微控制器 嵌入式系统 MCU

随着物联网、嵌入式系统以及微控制器技术的飞速发展,微控制器已成为众多智能设备和系统不可或缺的核心组件。而微控制器的正常工作,离不开烧录器的精准操作。C8051F021烧录器,作为一款高效、稳定、易用的微控制器烧录工具,在...

关键字: c8051f021烧录器 联网 嵌入式系统

为增进大家对嵌入式系统的认识,本文将对嵌入式系统、嵌入式系统的特点予以介绍。

关键字: 嵌入式 指数 嵌入式系统

2024年4月18日,国民技术第四代可信计算芯片NS350 v32/v33系列产品正式发布并开始量产供货。NS350 v32/v33是一款高安全、高性能、超值可信密码模块2.0 (TCM 2.0)安全芯片,适用于PC、服...

关键字: PC 服务器平台 嵌入式系统

2024年,嵌入式系统将走向何方?如何才能走在趋势的前沿?从工厂到家电,从医院里昂贵的医疗设备,到随处可见的可穿戴设备,我们身边的联网设备越来越多,生活更加绿色低碳,嵌入式系统功不可没。ST于3月19日成功举办STM32...

关键字: 嵌入式系统 可穿戴设备

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发

随着科技的飞速发展,单片机和嵌入式系统在现代电子设备中的应用越来越广泛。它们不仅提高了设备的智能化水平,还推动了各行各业的创新与发展。在单片机和嵌入式系统的开发中,编程语言的选择至关重要。本文将深入探讨单片机和嵌入式系统...

关键字: 单片机 嵌入式系统 电子设备

Windows Embedded Compact 7(简称WinCE)是一种专为嵌入式系统设计的操作系统,具有体积小、效率高、可定制性强的特点。在WinCE中设置自动运行软件,通常是为了满足设备在启动后自动执行特定任务的...

关键字: 嵌入式系统 软件 操作系统
关闭
关闭