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

介绍

我听到有关Java中编写设备驱动程序的东西(听起来像“我的耳朵”,而不是从互联网),并且想知道…我一直认为设备驱动程序在操作系统级别上运行,因此必须用相同的语言编写作为OS(因此主要是CI假设)

问题

我一般都错了这个
假设呢? (好像这样)
>如何驾驶员在“外星人”
语言在操作系统中使用?
>什么要求(从a
编程语言的观点)
无论如何?

谢谢阅读

最佳答案
有几种方法可以做到这一点。

首先,以“OS级别”运行的代码不需要与操作系统相同的语言编写。它只需要能够与OS代码链接在一起。几乎所有的语言都可以与C进行互操作,这真的是所有需要的。

所以在语言方面,技术上没有问题。 Java函数可以调用C函数,C函数可以调用Java函数。如果操作系统不是用C编写的(就是说,为了C语言编写的参数,OS C代码可以调用一些中间的C代码,它们转发到你的Java,反之亦然。 C几乎是编程的通用语言。

一旦程序被编译(本地代码),它的源语言就不再相关了。无论编译之前编写源代码是哪种语言,汇编程序看起来都是一样的。只要您使用与操作系统相同的调用约定,这没有问题。

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

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

但有两种方法:

>在内核中支持Java。这将是一个不寻常的一步,但可以做到。
>或者将Java源代码编译成本机格式。 Java程序不必编译为Java字节码。您可以将其编译为x86汇编程序。同样适用于您使用的任何类库。那些也可以编译成汇编程序。当然,Java类库的一部分需要一些不可用的操作系统功能,但是可以避免使用这些类。

所以是的,可以做到。但是这并不简单,你不知道你会获得什么。

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

转载注明原文:可以用Java编写设备驱动程序吗? - 代码日志