首页 Soft PlugIn RAN乱 Dev开发 Info资料 English WAP 留言 登陆 注册
-
Posted by Yippee | 评论(0) | 引用(0) | 阅读995次
20071023 kvm CLDC

20071023 kvm CLDC
http://www.shengfang.org

移植kvm-cldc1.1到arm-linux上心得

到今天为止,移植KVM虚拟机的工作可以说是大概完成了,还有一点小的缺陷,但先把整个过程说一下吧。

所做的工作的目的是把以CLDC1.1为基础的KVM和移植到CPU是以ARM体系结构,以linux为嵌入式操作系统的开发板上。我们这里所说的linux并不是uClinux,而是一般的linux。下面说一下交差编译的环境:

    * CentOS
    * JDK1.4.2
    * CLDC1.1
    * GCC 3.4.6
    * Arm-linux-gcc 2.95.3交差编译工具(在电脑里的名字是cross -2.95.3.tar.bz2)

CLDC参考实现 - Nebula KVM 0.1
前两年刚刚参与Linux手机平台的开发时,尝试做了一个KJava的虚拟机,这是其中一个较早的版本,当时只实现了一些核心的功能,使用zlib和sun参考实现中的java api才能工作,可以运行基本的hello world等程序,只限于命令行,不支持UI.

CLDC就是定义了一系列底层和kvm相关的指标,对硬件的要求更多,CLDC = 一个java运行时环境(kvm) + 一组底层的java api和类库.
这里强调的是底层,
kvm关系到语法支持,运行是支持,类加载,验证等等,这里说支持,其实都是限制,从j2se高度裁减下来的.
现在的CLDC1.1 类库和API只包括包括 java.io, java.net, java.util, and the java.lang packages.

MIDP就是利用底层的CLDC实现的一些较高级的类库的功能的一个清单,你可以把它理解为就是一个高级点的类库,
比如Alert  Canvas  MIDlet之类的.如果把CLDC 比做事win32 sdk, 那么MIDP就是MFC
这个类库建立在底层支持的基础上,底层的类库不同会导致MIDP的实现也不同,比如你的类库需要用到浮点数,如果
你的CLDC支持浮点数,呵呵,MIDP直接拿底层的来用就好了,如果你的CLDC不支持浮点数,没办法,你只能自己写个浮点数的类来用,
这个类的实现要用定点数来模拟,就跟当年的286一样.当然很慢咯,加上一个80287浮点协运算器来做诸如开跟号之类操作要快上几百倍.

其实CLDC支持浮点数也未必就是硬件支持,只能称之为底层支持.用起来方便一点.
要想知道哪些类是MIDP支持还是CLDC支持可以查阅sun的标准文档,有一个简单的方法就是看wtk的文档里看这个类的Since:  写的是什么就是什么

KVM可以说是JVM中比较小而且比较原始的一个版本。KVM是一般放置在嵌入式设备,比如手机等资源有限的终端内运行。KVM没有采用HotSpot JVM里面诸多优化技术,代码十分简单,有利于我们理解JAVA程序的执行过程。虽然KVM里面执行JAVA程序可能与现在PC上流行的JVM不太相同,但是大致原理是相似的。

arm-linux-gcc是针对arm + linux的开发环境的,kernel使用的是linux,不是uclinux,arm是有硬件MMU的。

而arm-elf-gcc是针对no MMU arm + uclinux的开发环境,kernel使用的是uclinux,硬件是廉价的无MMU的arm芯片。

arm-linux-gcc倒是有点类似X86 PC环境下的linux开发。

下面是一段英文的解释:

xxx-elf is for standalone application. xxx-linux is for application running on
Linux. These two toolchains are almost same, except for different macros
defined when preprocessing and different libraries linked in when performing
linking.

 
 http://blog.csdn.net/hotdust/archive/2007/09/11/1781223.aspx

 Sun Community Source Licensing (SCSL) - CLDC Reference Implementation
    

You must first register or log into the Sun Download Center (SDLC) and agree to the license agreement before you can download this product.
Product Description
 
Platform(s)
 
Delivery Format
 
Download Here
Java 2 Platform, Micro Edition
Connected Limited Device Configuration Version 1.1 Reference Implementation
 
Solaris Operating System, SPARC[r] Platform Edition;
Microsoft Windows 2000; and
Linux
 
Electronic Download
 
Download
Java 2 Platform, Micro Edition
Connected Limited Device Configuration Version 1.0.4 Reference Implementation
 
Solaris Operating System, SPARC[r] Platform Edition;
Microsoft Windows 2000; and
Linux
 
Electronic Download
 
Download
这句让我搞了半天也没明白,后来是问的老师。在arm体系结构参考手册中关于BL:
1. Sign-extending the 24-bit signed (two's complement) immediate to 32 bits.
2. Shifting the result left two bits.
3. Adding this to the contents of the PC, which contains the address of the branch instruction plus?.
它是把BL中24有符号数扩展成32位,然后左移两位,再这个数加8加到pc中。所以,我们得先把这个数减8再右移两位,好让arm的自动操作能算出正确的地址。但是我没明白arm为什么先左移再加8。
   if (vec & 0xff000000)
    {
        printf("Handler greater than 32MBytes from vector");
    }
接下来看看bl要跳转的地址,手册里规定bl跳转不能超过+-32M的地址空间。


字体:

Permanant URI永久地址 http://www.shengfang.org/blog/p/20071023kvmcLDC.php
Trackback URI引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1216608074

2008年7月21日10:41星期一  [Info资料] 追踪此文的RSS
提示:
此文还没有评论。

称呼:    登陆   注册
   不注册,但记住我的信息
邮件:
(非必须)
评论: [UBB代码帮助]
粗体 斜体 下划线 链接 水平线 引用



验证码: 请输入你看见的数字
关闭UBB      提交时自动将内容复制到剪贴板

公告
Fire and Motion!

统计信息
[Yippee]||[统计]||日志:1967
在线: 17||用户: 2593 [列表]
今日:1167||到访:3118338
Rss:||评论:1631

最新日志

最新评论

友情链接

日历
2008 - 11
      1
2345678
9101112131415
16171819202122
23242526272829
30      

最新引用

搜索

归档

杂项
Get RSS Feed (Version 2.0)
Get Atom Feed (Version 0.3)
编码:  UTF-8