gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:37:08 27 4
gpt4 key购买 nike

简介

我听说过一些关于用 Java 编写设备驱动程序的消息(听说是“用我的耳朵”而不是从互联网上听到的)并且想知道......我一直认为设备驱动程序在操作系统级别上运行,因此必须用与操作系统相同的语言(我想主要是 C)

问题

  1. 我一般是错的吗假设? (好像是这样)
  2. “外星人”中的司机如何操作系统中使用的语言?
  3. 有什么要求(来自编程语言的观点)无论如何都需要设备驱动程序?

感谢阅读

最佳答案

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

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

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

程序一旦被编译(编译为 native 代码),其源语言就不再相关。无论源代码在编译之前是用哪种语言编写的,汇编程序看起来都差不多。只要你使用与操作系统相同的调用约定,就没有问题。

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

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

但是有两种方法可以解决这个问题:

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

所以是的,这是可以做到的。但这并不简单,也不清楚你会得到什么。

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

关于java - 是否可以用 Java 编写设备驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/683701/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com