1 引言
随着现代信息技术的迅猛发展,电视数字化步伐加快了。从一开始的模拟电视到现在的数字电视,不仅大大提高了电视节目的质量,也推动了电视数字化的进一步发展。在各种数字视频广播标准中,欧洲的dvb(digital video broadcast)标准使用比较广泛,它为在同一信道中传输视频、音频、数据提供了一种灵活、高效的方式,可以通过卫星、电缆和地面信道传输高质量的电视节目。同时基于dvb的数据广播标准也能满足人们对于宽带数据业务的要求,如证券信息服务、电子节目、mp3音乐下载、电子邮件、网页浏览等,在现代信息技术领域应用极为广泛。
图一 数字机顶盒架构
从图一我们可以看到, 一个完整的数字机顶盒由硬件平台和软件系统组成,可以将其分为4层,从底向上分别为硬件、底层软件、中间件、应用软件。硬件提供机顶盒的硬件平台;底层软件提供操作系统内核以及各种硬件驱动程序;应用软件包括本机存储的应用和可下载的应用;中间件是一种将应用程序与底层的操作系统、硬件细节隔离开来,使应用不依赖于具体的硬件平台的软件环境。这样用户可以在任何厂家的硬件平台上进行应用软件开发,和应用软件下载。而不必介意任何底层的有关信息,保证了机顶盒的开发专业化。这种分层的思想在现代系统设计中十分常见,如大名鼎鼎的tcp/ip协议。中间件通常由各种虚拟机来构成,如html虚拟机、javascript虚拟机、java虚拟机等。
现在广电行业倾向于dvb-mhp(多媒体家庭平台)中间件标准。dvb-mhp基于开放性的java程序语言,具有软硬件兼容性好、可移植成本低、二次再开发功能强等优点,是一种很有发展前途的中间件技术标准。可以相信,java在数字视频广播中的应用将越来越多,我们有必要研究java技术核心—虚拟机,包括其结构、运行机制及虚拟机移植到数字机顶盒平台的关键技术。本文面向采用st(意法半导体公司)sti5516芯片的数字机顶盒平台,将基于数字电视播放(digital video broadcast,dvb)的多媒体家庭平台(multimedia home platform,mhp)规范进行中间件平台分析,重点研究开放源码的java虚拟机---kaffe在其中的作用和相关的移植技术。
2 平台介绍
2.1 硬件平台
数字机顶盒硬件平台基于st公司的芯片sti5516,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是一个完整的java实现,它由3部分组成:遵从 personal java1.1规范的 java类库,java1.1虚拟机和本地动态或静态链接库。kaffe虚拟机源码按以下子目录组织:
kaffe---包括了解释器与jit平台无关部分,以及垃圾回收,动态类加载和java runtime environment其它模块的源代码。
config---包括了解释器与jit平台相关部分。它按所支持的处理器来划分子目录,里面存放系统相关代码。
package---java类库以及任何它所依赖的本地方法。
include---在子目录中提供的本地方法的接口定义。这些接口被平台独立文件所需要。
3 kaffe移植的关键技术及方案
经过对kaffe深入分析和研究,笔者已在sti5516平台上成功地移植了kaffe,并依据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()函数来完成的。
4 测试与结果
在主程序中,调用os20操作系统中的系统调用task_create()来将kaffe虚拟机初始化为系统的一个进程。并为它分配必要资源,包括进程优先级、系统需要的内存空间等。依照分配的优先级,参与系统的进程调度。最后,将整个修改好的源代码在新的编译环境下编译连接成可执行代码,通过jtag口下载到机顶盒开发板中运行。
kaffe虚拟机的“输入”是“hello.java”,经过编译后生成类文件“hello.class”。运行下载到flash的主程序,在调试终端可以看到“hello world”字样,这是kaffe虚拟机解释字节码的结果。说明基于sti5516芯片的kaffe虚拟机移植成功。
5 结束语
以上介绍了java虚拟机kaffe的软件架构,从中我们可以看出,kaffe虚拟机具有较好的可扩展结构模型,是遵循java规范的优良的开放源码虚拟机,可以适应多种嵌入式应用环境。本文按照欧洲dvb-mhp规范,给出了kaffe虚拟机在sti5516机顶盒环境下的移植方案,使其可以应用于要求较高的嵌入式系统中,为机顶盒在证券信息服务、电子节目、mp3音乐下载、电子邮件、网页浏览等新型服务领域的开发应用奠定坚实的基础。我们相信,随着基于java技术的dvb-mhp中间件技术的广泛使用,将使嵌入式系统的应用开发更加简捷方便。
Redmi K30除了拥有120Hz屏幕刷新率之外还有哪些优势
电子纸人机交互设计实现
谷歌获批部署基于雷达的虚拟触控Soli传感器
全球新能源乘用车的销量数据公布:特斯拉重回第一宝座
真无线蓝牙耳机哪个品牌好,什么牌子无线耳机最好
基于Sti5516芯片的Java虚拟机的软件架构研究
中国电信空地互联网络公司成立
中国厂商进入存储芯片市场志在必得 韩国预估中国能力疯狂抢食存储
英国航空公司用 RFID标签跟踪旅客的行李
EPS电池供电接线图_EPS电池的安装
RTC定时唤醒主机教程
贵比特发布虚拟货币下架公告 暂停虚拟币充值交易
CAN FD报文时间计算
兼容AD2S1205,基于RDC SC2121的旋变位置解码系统方案
浅谈中国航天运载火箭发动机取得新进展及规划
LSI展示面向Windows Server的HA-DAS解决方案
理想的区块链技术是怎么样现实有事怎么样的
TMC5160智能步进驱控芯片外置MOSFETs带有StealthChop、SpreadCycle静音防抖动技术
设备树的传递及kernel 对设备树的解析
天津医院采用VR沙盘游戏心理疗法用于心理治疗