当前位置: 首页 > 面试题库 >

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

徐知
2023-03-14
问题内容

介绍

我听说过一些有关用Java编写设备驱动程序的信息(听说是“用我的耳朵”,而不是通过互联网),我想知道…我一直认为设备驱动程序在操作系统级别上运行,因此必须以相同的语言编写作为操作系统(因此大多是CI假设)

问题

  1. 我通常会对此假设有误吗?(看起来是这样)

  2. OS中如何使用“外来”语言的驱动程序?

  3. 无论如何(从编程语言的角度)对设备驱动程序有什么要求?

谢谢阅读


问题答案:

有两种方法可以完成此操作。

首先,在“ OS级别”运行的代码不需要使用与OS相同的语言编写。它仅必须能够与OS代码链接在一起。几乎所有语言都可以与C互操作,这实际上是需要的。

因此,从语言角度来讲,从技术上讲没有问题。Java函数可以调用C函数,而C函数可以调用Java函数。而且,如果OS不是用C编写的(例如,出于争论,它是用C
编写的),则OS C 代码可以调用一些中间的C代码,然后转发给Java,反之亦然。C几乎是一种 通用 的编程 语言

程序编译成本地代码后,其源语言将不再相关。无论源代码在编译之前以哪种语言编写,汇编程序的外观都几乎相同。只要您使用与操作系统相同的调用约定,就没有问题。

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

不幸的是,Java程序以其“默认”表示形式(如Java字节码) 需要 大量基础结构。它需要Java VM来解释和JIT字节码,还需要类库等等。

但是有两种解决方法:

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

是的,可以做到。但这并不简单,也不清楚您将获得什么。

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



 类似资料:
  • 9.1. 简介 本章简要介绍了如何为FreeBSD编写设备驱动程序。术语设备在 这儿的上下文中多用于指代系统中硬件相关的东西,如磁盘,打印机, 图形显式器及其键盘。设备驱动程序是操作系统中用于控制特定设备的 软件组件。也有所谓的伪设备,即设备驱动程序用软件模拟设备的行为, 而没有特定的底层硬件。设备驱动程序可以被静态地编译进系统,或者 通过动态内核链接工具‘kld’在需要时加载。 类UNIX®操作

  • 问题内容: 我已经看到它用于存储的返回类型,但是我已经在ARM体系结构中使用了它,并且效果很好。 那么,这有什么不同呢?在什么情况下我应该使用它呢? 问题答案: 许多类型强制转换只会“工作得很好”。但是,这不是很严格。没有什么可以阻止您将a强制转换为a 并取消对其的引用,但这并不遵循内核API,因此容易出错。 是Sparse使用的cookie ,该工具用于在内核中查找可能的编码错误。如果您未在启用

  • 问题内容: 我需要从头开始为omap4编写SPI Linux字符设备驱动程序。我知道编写设备驱动程序的一些基础知识。但是,我不知道如何从头开始编写平台特定的设备驱动程序。 我已经编写了一些基本的char驱动程序,并且我认为编写SPI设备驱动程序将与此类似。Char驱动程序的结构包含在驱动程序中实现的功能。 现在,我将以spi-omap2-mcspi.c代码作为参考,以获取从零开始开发SPI驱动程序

  • 问题内容: 问题是:编写一个交换两个变量的方法。这两个变量应该是原语。它不需要是通用的,例如两个变量。有办法吗? 问题答案: 如果不使用数组或对象,不可以,无法在方法中进行操作。

  • 更新时间:2019-04-16 19:04:41 各种不同的设备在不同的操作系统使用时,可能需要单独安装对应的驱动程序。为了方便用户,Hacklab提供了支持的部分开发板串口驱动程序下载及安装信息,请根据使用的开发板和PC OS下载对应的驱动程序。 串口芯片驱动 CP210x 下载地址 使用该串口驱动的开发板包括: ST Nucleo F412ZG esp32devkitc(Board类型可选择E

  • 问题内容: 谁能解释我, 什么啊 这有什么用途? 如何使用? 为什么我不能定义与之功能相同的新功能? 问题答案: 一个,表示“输入- 输出控制”是一种特定于设备的系统调用。Linux(300-400)中只有几个系统调用,不足以表示设备可能具有的所有独特功能。因此,驱动程序可以定义一个ioctl,它允许用户空间应用程序向其发送订单。但是,ioctl并不是很灵活,并且会变得有些混乱(数十个“魔术数字”