Embedded 版 (精华区)

发信人: snows (花自飘零水自流), 信区: Embedded
标  题: Wince编程经验5(ZZ)
发信站: 哈工大紫丁香 (2004年03月14日09:23:16 星期天), 站内信件

kvm的移植
在下载了kvm的原码后,大家往往想把它移植到自己的pc或开发板中。,我利用sun提供
的移植文档在pc机上移植成功。在其他系统中的移植都差不多,如果大家对此有兴趣,
可以一同交流心得。自己在移植成功后也可以对kvm进行修改(我参照kvm1.04的文档改
动了一些东西,觉得挺有意思:))。
以下是我翻译的kvm移植文档,具体移植时看sun的原文及代码,代码中的注释非常详尽

一.kvm结构
编译器:vc
kvm的目录结构
在sun下载kvm后解压缩的目录有以下几个:
api-目录下包含了java类库的代码
bin—包含了编译过的class文件以及一些常用的exe文件
build--makefile文件
docs
jam--应用管理代码
kvm--kvm代码
samples--实例代码
tools--随kvm代码的工具
二.平台有关的文件
跟平台移植无关的代码都在kvm/vmcommon目录,平台有关的代码在kvm/vmextra目录下,
以下是和平台有关的部分,即移植时需改动的部分。
1.machine_md.h(vmport/h/machine_md.h)
这个文件提供了具体平台的一些设置,包括各种平台有关的声明如#include、宏等的声
明,KVM对每个声明都有注释。
2.对main.c文件也应进行修改,
vmextra/src/main.c中提供了缺省的main()方法,从中声明了一些与虚拟机运行有关的
项,具体的调整要根据实际的应用进行。
如果我们要从命令行方式启动kvm,格式如下:kvm [option]* className [arg]*
option中为: -version
-类的路径
-堆的大小,在kvm启动时分配的java堆大小,所有的类实例和数组都从这个java堆分配
空间保存。
className就是我们要运行的java程序的名称。
3.移植时根据平台的不同,对以下函数也应进行修改,这些函数在vmwin/src/runtime
_md.c或vmunix/src/runtime_md.c中列出,其中有我只举几个函数示例:
AlertUser(const char* message)
这个函数主要是用于调试状态,用于错误处理操作,主要是打印出错误信息,要根据不
同平台调用不同的打印函数。
allocateHeap(long *sizeptr,void **realresultptr)
分配*sizeptr大小的java堆,返回这个堆的起始地址,realresultptr用于释放堆。
*realresultptr = space(堆的大小),主要是根据不同平台在分配时将堆的大小置为
指针大小的整数倍,指针大小根平台有关。
freeHeap(void *heapPtr)
释放堆,用到了**realresultptr
上面介绍的是大概kvm的结构,对kvm本身的运行机制没有介绍,如果想深入了解它的运
行原理,只能看它的原码。我已将kvm的原码通读了两遍,但要我真正将kvm原码的大致
机制列举出来,还是非常有难度的。看kvm的原码是一种很享受的过程,你对java编程会
有更深入的了解。
我手头现在有kvm1.04版本,想要的请给我email j7mail@sina.com.cn

--
-
 ╭────────────────────────────╮
 │   风萧传瑟声,叶落根深处,青阶入野无归途,他乡不知顾   │
 │   泣下问和谁,叹者行已暮,寒眉傲骨今尚在,奈何入凡土   │
 ╰────────────────────────────╯
                                                                             

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.229.154]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.878毫秒