当前位置:  开发笔记 > 编程语言 > 正文

是否可以用Java编写设备驱动程序?

如何解决《是否可以用Java编写设备驱动程序?》经验,为你挑选了2个好方法。

有几种方法可以做到这一点.

首先,在"OS级别"运行的代码不需要用与OS相同的语言编写.它只需要能够与OS代码链接在一起.事实上,所有语言都可以与C互操作,这实际上就是所需要的.

语言方面,技术上没有问题.Java函数可以调用C函数,C函数可以调用Java函数.如果操作系统不是用C语言编写的(比如说,为了论证它是用C++编写的),那么OS C++代码可以调用一些中间的C代码,它们转发到Java,反之亦然.C几乎是编程的通用语言.

一旦程序编译(到本机代码),其源语言就不再相关.无论在编译之前编写源代码的语言是什么,汇编程序看起来都大致相同.只要您使用与操作系统相同的调用约定,就没有问题.

更大的问题是运行时支持.操作系统中没有很多软件服务可用.例如,通常没有Java虚拟机.(没有理由在技术上不可能,但通常,但通常,假设它不存在是安全的).

不幸的是,在其"默认"表示中,作为Java字节码,Java程序需要大量的基础结构.它需要Java VM来解释和JIT字节码,它需要类库等等.

但是有两种方法:

在内核中支持Java.这将是一个不寻常的步骤,但它可以做到.

或者将Java源代码编译为本机格式.Java程序不必编译为Java字节码.您可以将其编译为x86汇编程序.您使用的任何类库都是如此.那些也可以编译到汇编程序.当然,Java类库的某些部分需要某些不可用的OS功能,但是可以避免使用这些类.

是的,它可以做到.但这并不简单,而且不清楚你会获得什么.

当然另一个问题可能是Java不允许你访问任意内存位置,这会使很多硬件通信变得非常棘手.但也可以通过调用非常简单的C函数来解决这个问题,这些函数只是将相关的内存区域作为Java的数组返回.



1> jalf..:

有几种方法可以做到这一点.

首先,在"OS级别"运行的代码不需要用与OS相同的语言编写.它只需要能够与OS代码链接在一起.事实上,所有语言都可以与C互操作,这实际上就是所需要的.

语言方面,技术上没有问题.Java函数可以调用C函数,C函数可以调用Java函数.如果操作系统不是用C语言编写的(比如说,为了论证它是用C++编写的),那么OS C++代码可以调用一些中间的C代码,它们转发到Java,反之亦然.C几乎是编程的通用语言.

一旦程序编译(到本机代码),其源语言就不再相关.无论在编译之前编写源代码的语言是什么,汇编程序看起来都大致相同.只要您使用与操作系统相同的调用约定,就没有问题.

更大的问题是运行时支持.操作系统中没有很多软件服务可用.例如,通常没有Java虚拟机.(没有理由在技术上不可能,但通常,但通常,假设它不存在是安全的).

不幸的是,在其"默认"表示中,作为Java字节码,Java程序需要大量的基础结构.它需要Java VM来解释和JIT字节码,它需要类库等等.

但是有两种方法:

在内核中支持Java.这将是一个不寻常的步骤,但它可以做到.

或者将Java源代码编译为本机格式.Java程序不必编译为Java字节码.您可以将其编译为x86汇编程序.您使用的任何类库都是如此.那些也可以编译到汇编程序.当然,Java类库的某些部分需要某些不可用的OS功能,但是可以避免使用这些类.

是的,它可以做到.但这并不简单,而且不清楚你会获得什么.

当然另一个问题可能是Java不允许你访问任意内存位置,这会使很多硬件通信变得非常棘手.但也可以通过调用非常简单的C函数来解决这个问题,这些函数只是将相关的内存区域作为Java的数组返回.


+1:非常有见地,但是你忘了提到虽然它可能在大多数情况下仍然非常疯狂.
让我再一次问一下,对于你这个问题,你有没有*点*?我所说的非常简单:你*可以*将必要的运行时服务嵌入到驱动程序中,然后你*可以用Java编写你的驱动程序.您可以使用简单的引用计数机制替换GC(并添加一个中断循环的机制).你究竟想要证明什么?你究竟反对什么?除非你有什么*新*来讨论这个问题,否则我认为我们已经在这里完成了.

2> TofuBeer..:

用Java编写Solaris设备驱动程序包括用Java编写的A RAM磁盘设备.

Linux的另一个.更深入地了解为什么你可能也想要Java中的DD(因为有些人对其他帖子和评论的外观感到疑惑)

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有