千家信息网

如何增加KVM中的系统调用API

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,今天就跟大家聊聊有关如何增加KVM中的系统调用API,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。不同的j2me设备,也有不同的系统调用API
千家信息网最后更新 2026年10月31日如何增加KVM中的系统调用API

今天就跟大家聊聊有关如何增加KVM中的系统调用API,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

不同的j2me设备,也有不同的系统调用API以及它们的实现,。

J2ME KVM教程之如何增加KVM中的系统调用API

大家都晓得KVM是不支持Native函数调用的,如果要增加一些系统调用的API,那么只能加到KVM内部。同时,不同的j2me设备,也有不同的系统调用API以及它们的实现。我们从SUN那么下载到原始的KVM源代码,如何为其增加一个系统调用API呢?本文以具体实践的步骤一步一步来讲解增加KVM系统API的方法。

其实为KVM增加一个系统调用API比为linux增加一个系统调用API还简单。大致就分成两步工作就完成。一步是在classes.zip中增加一个你自己新增的class,一步是在KVM的nativeCore.c中实现这个新增的class的nativeapi函数。

下面以org.test.MiniTest这个新增的class为例来实现一个TestInt()系统调用函数。函数的功能很简单,就是返回一个整数9999。

1.新增org.test.MiniTest类

从SUN那里下载到j2me_cldc1.1版本的KVM代码后。在j2me_cldcapi目录下,增加orgestMiniTest.Java的包目录以及java文件。然后写上如下的代码:

packageorg.test;  publicclassMiniTest  {  publicstaticnativeintTestInt();  }

2.进行***次编译

根据上一篇文章中的KVM编译方法,在命令提示符下,跳到目录j2me_cldcuildwin32下,输入make命令进行***次整体编译。不过,这次编译过程在编译连接KVM中的*.o文件的时候,会提示一个找到_Java_org_test_MiniTest_TestInt符号的错误提示。

这是因为在我们只是在org.test.MiniTest中定义了这个native函数TestInt,但是并没有在KVM的任何一个c文件中实现其对应的函数。

首先编译过程是用javac来编译j2me_cldc/api里面的所有的*.java文件,然后将其class文件打包成一个classes.zip,然后JCC这个工具会默认根据classes.zip生成ROMJavaWin.c和nativeFunctionTableWin.c。而在ROMJavaWin.c声明这个native函数:

externvoidJava_org_test_MiniTest_TestInt(void);

3.实现Java_org_test_MiniTest_TestInt函数

从KVM中的代码可以看到,KVM默认都是把一些native函数放到了nativeCore.c这个文件里面。你也可以自己去新增一些C程序文件,不过本例就把这个Java_org_test_MiniTest_TestInt放在了nativeCore.c文件。

下面是代码:

voidJava_org_test_MiniTest_TestInt(void)  {  pushStack(9999);  }

这里为什么把返回值使用pushStack这个宏来返回的原因就不好说了,关于JAVA运行的方式其实就是一个堆栈,Java的字节码其实就是一种栈式语言,这个在编译原理里面的中间代码生成那一章可以找到它的原型和其说明。再者,还可以看《InsideJavaVirtualMachine》这本书。

4.第二次编译

第二次编译就是可以生成真正的kvm.exe文件了。还是跟***次编译以及上一篇编译KVM的方法一样,敲入make命令即可。

5.测试MiniTest.TestInt这个API

自己写了一个Test的类,来测试这个API:

importorg.test.*;  classTest{  publicstaticvoidmain(String[]args){  System.out.println("TestResult="+MiniTest.TestInt());  }  }

用javac编译的时候,需要把前面的j2me_cldc/classes.zip拷贝过来,执行:

javac-classpathclasses.zipTest.java   kvm-classpath.Test

看完上述内容,你们对如何增加KVM中的系统调用API有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

编译 系统 函数 文件 代码 不同 就是 内容 命令 方法 目录 提示 生成 时候 是在 篇文章 设备 过程 上一 中实 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网加科技 广州大一互联网络科技有限公司 山东特亿宝互联网科技有限公司 中国互联网科技工作委员会毛军 互联网最新的科技 互联网为科技 互联网科技公司发展 喔噻互联网科技 上海致骋互联网科技 国外互联网科技网站 深圳卡尔迅互联网科技有限公司怎么样 佳云科技和互联网广告 浙南科技城互联网大厦建设工程 山东子淼互联网科技有限公司 郑州欣桑互联网科技有限公司 萌小萌互联网科技河南有限公司 互联网科技职业技能培训学校 黑龙江互联网科技公司 承德科技产业互联网平台 互联网科技快速发展优美句子 金融科技 互联网金融 互联网科技视频 一五八零互联网科技 重庆科技学院互联网 互联网汽车科技小镇 随着互联网科技发展 承德科技产业互联网发展 湖南诚度互联网科技有限公司 江阴互联网智能科技产品进口 小牛互联网科技有限公司地址
0