`
wuhua
  • 浏览: 2111808 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

KVM Porting 指南(转贴)

阅读更多

http://www.3geye.net/bbs/thread-183-1-1.html

 

KVM Porting 指南(转贴)
KVM Porting 指南(转贴)
英文原名:KVM Porting Guide (KVM 1.0.3)

  翻译:Ding

E-mail:wu_yi_ding@yahoo.com

  本文是j2me_cldc-1_0_3附带的KVM Porting Guide的翻译,对移植KVM到特定

平台上很有参考价值。原书有100多页,我尽量把它译完,但时间有限,能否完

成我也无法确保。希望对有志于port KVM的朋友有所帮助。如果有什么错漏之处,

或是您觉得不妥的地方,欢迎您email我,讨论商榷。

如您要转贴,请保留原出处,并勿做删改。谢谢。    


1。KVM简介

  KVM(K Virtual Machine 或称 KJava Virtual Machine)是一种小巧,易于

移植的JVM,被专门设计用来支持小型的,资讯有限的设备,例如手机,PDA等。

  KVM团队的最高设计目标是开发一个最小的且“完整"的JVM,它必须能提供对

核心Java语言的支持并能运行在资源有限的设备上(例如只有几十到几百Kb)。

更规范的说, KVM的设计要点有:

  ·小型,VM的核心只占据大约60Kb的静态内存空间。(根据不同的平台或编译
   
   选项有所不同)

  ·轻巧易于移植。

  ·模块化,易于定制。

  ·尽量做到既“完整”又“快速”。

  KVM是用C语言实现的,因此可以方便的移植到许多平台上,只要你能找到该平

台的C compiler。KVM是J2ME的一部分,KVM通常被作为CLDC和MIDP构架的底层实现。

KVM是由sun实验室最初的Spotless系统发展而来。(注:sun最初提出KJava是用来

开发palm os的,那时Palm上的Kjava程序称为Spotlet,类似于今天的MIDlet。)


2。KVM1.0.2与KVM1.0.3的区别

主要包括:
 
  ·性能优化-重新设计了显示/同步操作(monitor/synchronization),优化了
   
   JavaCodeCompact工具的代码产生方式。优化了字符串操作(string)。

  ·增强了事件(even)处理系统,异步输入输出模式(asynchronousI/O)以及
 
   networking库(用来使CLDC和MIDP联系的更加紧密)。

  ·增强了Java级的debug接口,预检验器(preverifier)和紧缩的垃圾收集器
 
  (garbage collector)。

  ·更有效的JAM(Java Application Manager)。

  ·Windows/Unix版的KVM可以在命令行中调整堆(heap)的大小。


3。对编译器的要求

  你的C compiler 必须兼容ANSI-C(这好像不算什么要求^-^)你的compiler必

定义基本数据类型如下:

表1-基本数据类型
------------------------------
Type                Description
------------------------------
char                8-bit

signed char         8-bit

unsigned char       8-bit

short               signed ,16-bit

unsigned short      unsigned 16-bit

int                 signed,16 or 32 bits.

unsigned int        16 or 32 bits.

long                signed, 32-bit

unsigned long       32-bit(注:注意在Java语言里long为64bit)

void *              32-bit pointer
------------------------------

  如果你的J2ME configuration或profile支持浮点数,那你的编译器还必须支持

浮点类型如下:

----------------------
Type      Description
----------------------
float     32-bit floating point value

double    64-bit floating point value
----------------------

  我们的参考实现(referenceimplementation)只在指针长度为32bit的机器上做

了测试,我们并不能保证在具有长指针(far pointer)或其他类型的指针的平台上

运行。

下列compiler已被证实可以成功编译KVM:

■Sun C Compiler 5.0, 5.2 and 5.3 on Solaris,

■GNU C 2.91.66 (egcs-1.1.2) compiler on Red Hat Linux,

■GNU C 2.95.2 compiler on Solaris and Windows NT 4.0,

■Microsoft Visual C++ 6.0 Professional on Windows NT 4.0 and Windows2000


4。KVM源码概览

4.1目录结构概览

  解压KVM包后,在你的目录下生成如下子目录。(假定父目录为j2me_cldc1.0.3)


目录j2me_cldc1.0.3:

api-Java类库源码

■bin-可执行文件,编译的类库

build-编译用的makefile

■docs-说明文件

■jam-JAM(Java Application Manager)源码

■kvm-KVM源码

■samples-试例程序源码

■tools-辅助工具的源码(如JavaCodeCompact, preverifier,kdp,palm tool等)


目录j2me_cldc1.0.3\kvm:

■VmCommon-所有公用的,平台无关的KVM源码都在该目录下

■VmExtra-公用的,可选的组件的源码

■VmUnix-针对Unix

■VmWin-针对Windows


目录j2me_cldc1.0.3\kvm\VmCommon:(所有公用的,平台无关的KVM源码)

■h-include文件

■src-源码

注:当你要port时,可以把你自己平台相关的源码置于kvm目录之中。例如我要port

到WinCE我可以这样安排我的源码(kvm\VmWinCE\src-我的源码,kvm\VmWinCE\h-

我的头文件,kvm\VmWinCE\build-我的makefile)。


4.2 KVM源码功能简述
 
  在j2me_cldc1.0.3\kvm\VmCommon\src和j2me_cldc1.0.3\kvm\VmCommon\h中包含

了KVM所有公用的,平台无关的源码和头文件,如下表所示:

------------------------------------
File               Description
------------------------------------
StartJVM.c         VM的启动和命令行的读取

bytecodes.c        Java bytecodes的定义,自KVM1.0.2后,bytecode解释器被
                 
                 从新设计,这部分从interpret.c分离出来。你可以定制VM,
                 
                 使用这里定义的bytecode的子集或超集。

cache.h            内联缓存(inlinecaching)的支持,用以加快方法检索(

cache.c            method lookup)的速度,并支持“fast” bytecodes.(注:
                 
                 关于methodlookup请参考JLS15.12.4)
   
class.h            运行时java类的内部数据结构和操作
class.c

events.h           实现事件处理系统
events.c

execute.h          解释器的执行宏和操作
execute.c

fields.h           用以存储不同类型的域(field)的运行时内部结构。当一个
fields.c          
                 新类被载入VM时,就会生成一张由这些域组成的表。

frame.h            定义栈帧(stack frame)和异常处理(exceptionhandling
frame.c            
                  )的操作。


garbage.h       垃圾处理器和内存管理。
garbage.c
collector.c
collectorDebug.c

global.h           大量全局变量的定义
global.c

hashtable.h        实现VM内部使用的哈希表
hashtable.c


interpret.h        bytecode解释器。
interpret.c

loader.h           类载入器。
loader.c

log.h              记录并输出运行时VM的诊断信息
log.c

long.h             处理64bit运算的特殊的宏

main.h             编译的选项及系统的预制设定。

messages.h         错误与警告信息

native.h           JVM所需的native函数和核心native库,注意,KVM是不使用
                 
native.c           JNI(Java Native Interface)的,JNI对小设备来说开销太大
                 
nativeCore.c       了。

pool.h             常量池(Constant pool)的管理。
pool.c

profiling.h        用以描述VM的执行的数据声明与操作
profiling.c

property.h         取得Java系统特性的操作。
property.c

rom.h              ROMizer(JavaCodeCompact tool) 所需的宏.

runtime.h          平台特有的操作的函数原型定义,注意这里定义的函数通过
         
                 一个runtime_md.c来实现。这也就是说runtime_md.c是建立
                 
                 在你想要port的平台特性之上的。

stackmap.c         Stackmap操作用于支持额外的垃圾收集。

thread.h           多线程的支持与java的线程管理。
thread.c

verifier.h         类文件审核器
verifier.c
------------------------------------
 
  在j2me_cldc1.0.3\kvm\VmExtra\src和j2me_cldc1.0.3\kvm\VmExtra\h中包含

了KVM所有外加的公用平台无关的源码和头文件,其中主要包括windows、Unix下最

常见的网络协议的实现;把类载入目标平台的文件接口(该目标平台拥有一个常规

的文件系统);检视,解压缩JAR文件的工具;还有Jave级的debugger和KDWP(

KVM Debug Wire Protocol)接口的实现。除了上述之外,还包括一些用来处理异步

事件的额外的宏,并定义了VM的一些在非嵌入式,基于命令行的系统(如windows和

Solaris)上运行所需要的启动操作。

\VmExtra中的文件如下表所示:

----------------------+--------------------------------------------------+
文件                   描述
----------------------+--------------------------------------------------+
async.h                支持异步I/O的宏。

loaderFile.c           从文件系统中载入Java类文件的操作。

main.c                 缺省的main程序,用于具备文件系统并支持VM从命令行启

                     动的平台。

jar.h                  阅读、解压Jar文件的相关操作。
inflate.h
inflateint.h
inflatetables.h
jar.c
inflate.c

commProtocol.h         windows、Unix下常见的网络协议的实现,如串行端口通
commProtocol.c         讯,套接字(socket),数据报(datagram)等。
socketProtocol.h
socketProtocol.c
datagramProtocol.h
datagramProtocol.c

resource.c             读取外部资源的流式(stream-based)协议的实现。

debugger.h             Java级debugger和KDWP接口的实现。
debugger.c
debuggerCommands.h
debuggerStreams.h
debuggerInputStream.c
debuggerOutputStream.c
debuggerSocketIO.c

fakeStaticMemory.c     内存管理的定义,可以使KVM在Windows/Unix下模拟特
                     
                     殊的USESTATIC模式(也称"simonizing"),以便调试。
                     
                     这种模式最初是为Spotless/KVM系统开发的,用以克服
                     
                     一些Palm独有的内存限制。

nativeSpotlet.h        定义事件处理的底层操作和对宿主操作系统的事件的截        
nativeSpotlet.c
                     取例程,以及为事件调用已注册的handler方法。
                     
                     (注:我在实际的目录下找不到该文件。??)
---------------------+-------------------------------------------------+      

分享到:
评论

相关推荐

    KVM Porting

    KVM Porting指的是将KVM技术移植到不同的硬件平台或者不同的操作系统环境,以便在这些平台上实现虚拟化功能。 在进行KVM Porting时,需要考虑以下几个关键知识点: 1. **硬件虚拟化支持**:KVM依赖于处理器的硬件...

    MTP Porting Kit 12.0(包含32位和64位

    **MTP Porting Kit 12.0:深入解析与应用** MTP Porting Kit 12.0 是一个专门用于处理Media Transfer Protocol (MTP) 的移植工具包,适用于32位和64位操作系统。这个工具包旨在帮助开发者和用户在不同的设备上顺利...

    busybox 1.18源码 porting busybox

    `porting_busybox.doc`文件很可能是关于如何将Busybox移植到特定硬件平台的详细指南。文档通常会涵盖以下内容: 1. **环境准备**:确保你有一个适当的交叉编译环境,包括交叉编译器、必要的库和开发工具链。 2. **...

    lwip porting

    about LWIP detail information , really good porting reference

    lcd driver porting guide

    ### LCD Driver Porting Guide #### 1. 引言 本文档主要介绍如何在SIM8950 Android平台上通过Display Serial Interface (DSI)在内核(Kernel)和Little Kernel (LK)中启动显示面板。这是一份LCD驱动移植手册,内容...

    Arm9 Linux Porting.pdf

    ### Arm9 Linux Porting.pdf 知识点解析 #### 一、概述 ...此外,对于初学者来说,建议仔细阅读相关文档和指南,并在实践中不断尝试和学习,以便更好地理解和掌握Arm9平台上的Linux系统移植技术。

    Uboot启动流程和porting 文档mini2440

    《UBoot启动流程与Porting指南——以Mini2440为例》 UBoot,全称为Micro Universal Boot Loader,是一款广泛应用于嵌入式系统的引导加载程序。它在系统硬件初始化后,负责加载操作系统内核到内存,并传递必要的参数...

    Realtek_Linux_Bluetooth_Porting_Guide.pdf realtek 蓝牙 linux驱动源码

    《Realtek Linux Bluetooth Porting Guide》是一份针对Realtek蓝牙芯片在Linux系统中进行驱动移植的重要参考资料。本文将深入解析该指南中的关键知识点,并提供关于Realtek蓝牙驱动源码的相关信息。 1. **Realtek ...

    MTK driver porting guide

    Mt6737 all driver porting guide, eg : light, lcm, camera, sensor, keypad...

    Porting Kit For Mac_v3.0.18

    Porting Kit For Mac_v3.0.18是一款游戏移植工具,让你可以直接在 OS X 上玩 Windows 平台的游戏。Porting Kit 也是利用 Wineskin,先帮你移植好游戏,完成必要文件的配置,而你只需要下载安装即可。

    porting.RTEMS移植指南.双语.V20131224.pdf

    ### RTEMS移植指南知识点概述 #### 一、前言 - **文档背景**:这份文档是RTEMS移植指南的中文翻译版,基于RTEMS 4.10.99.0版本进行编写,发布于2013年2月24日。文档由Tony Zhu(bizasia@126.com)翻译,并由在线...

    Arnold5 porting guide

    Arnold5 porting guide Last updated: 13-Mar-17, 12:06 Types Some types have disappeared: AtUInt32 -> uint32_t AtUInt64 -> AtByte -> uint8_t

    imx-scfw-porting-kit-1.2.tar.gz

    2. README-imx-scfw-porting-kit:这是用户指南,提供有关如何安装、配置和使用Porting Kit的详细步骤和注意事项。 3. SCR-imx-scfw-porting-kit.txt:可能是详细记录Porting Kit的变更日志、问题修复或者使用提示的...

    Embedded Android - Porting, Extending and Customizing

    Porting, Extending and Customizing》这本书不仅深入浅出地讲解了如何将Android系统移植到各种嵌入式设备上,还提供了大量的实践案例和实用技巧,对于希望在这个领域有所作为的专业人士来说是一本不可或缺的指南。

    PostgreSQL_to_DB2_Porting_Guide.pdf

    《PostgreSQL到DB2移植指南》是一份详细的技术文档,旨在帮助用户将基于PostgreSQL的应用程序或数据库系统平滑地迁移到IBM的DB2数据库管理系统上。这份由IM Partner Technologies - DB2 LUW – Americas Information...

    Android Porting Guide

    ### Android Porting Guide详解 #### 一、概览 本文档是关于如何为特定硬件平台进行Android系统移植的指南。Android作为一个开源项目,其灵活性允许开发者根据不同的硬件需求进行定制和优化。本指南由Rockie Cheng...

    Android Wifi Driver Porting

    标题与描述概述的知识点主要涉及Android系统中Wi-Fi驱动的移植过程,这在移动设备开发领域是一项关键技能,尤其对于那些希望优化或自定义设备Wi-Fi功能的开发者来说至关重要。以下是对这一知识点的深入解析: ...

Global site tag (gtag.js) - Google Analytics