Phi*_*ark 22 java operating-system device-driver
我听说过用Java编写设备驱动程序(听说"用我的耳朵",而不是来自互联网)并且想知道......我一直认为设备驱动程序在操作系统级别上运行,因此必须用同一种语言编写作为操作系统(因此主要是CI假设)
谢谢阅读
jal*_*alf 20
有几种方法可以做到这一点.
首先,在"OS级别"运行的代码不需要用与OS相同的语言编写.它只需要能够与OS代码链接在一起.事实上,所有语言都可以与C互操作,这实际上就是所需要的.
语言方面,技术上没有问题.Java函数可以调用C函数,C函数可以调用Java函数.如果操作系统不是用C语言编写的(比如说,为了论证它是用C++编写的),那么OS C++代码可以调用一些中间的C代码,它们转发到Java,反之亦然.C几乎是编程的通用语言.
一旦程序编译(到本机代码),其源语言就不再相关.无论在编译之前编写源代码的语言是什么,汇编程序看起来都大致相同.只要您使用与操作系统相同的调用约定,就没有问题.
更大的问题是运行时支持.操作系统中没有很多软件服务可用.例如,通常没有Java虚拟机.(没有理由在技术上不可能,但通常,但通常,假设它不存在是安全的).
不幸的是,在其"默认"表示中,作为Java字节码,Java程序需要大量的基础结构.它需要Java VM来解释和JIT字节码,它需要类库等等.
但是有两种方法:
是的,它可以做到.但这并不简单,而且不清楚你会获得什么.
当然另一个问题可能是Java不允许你访问任意内存位置,这会使很多硬件通信变得非常棘手.但也可以通过调用非常简单的C函数来解决这个问题,这些函数只是将相关的内存区域作为Java的数组返回.
Tof*_*eer 19
用Java编写Solaris设备驱动程序包括用Java编写的A RAM磁盘设备.
Linux的另一个.更深入地了解为什么你可能也想要Java中的DD(因为有些人对其他帖子和评论的外观感到疑惑)
设备驱动程序可能有很多东西
我实际上以 Java 编写设备驱动程序为生:工业设备的驱动程序,例如秤或称重设备、包装机、条码扫描仪、称重桥、袋和箱打印机,...... Java 在这里是一个非常好的选择。
工业设备与您的家庭/办公设备(例如扫描仪、打印机)有很大不同。特别是在制造业(例如食品),公司越来越多地选择运行 MES 应用程序(例如用 Java 开发)的中央服务器。 MES 服务器需要与生产线的设备接口,但也包含业务逻辑。Java 是一种可以做到这两者的语言。
在您的家庭/办公设备通常内置于计算机或通过 USB 电缆连接的情况下,这些工业设备通常使用以太网或 RS232 连接器。因此,从本质上讲,几乎每种语言都可以完成这项工作。
在这方面还没有太多的标准化。大多数供应商更喜欢为他们的设备创建自己的协议。毕竟他们是硬件制造商,而不是软件天才。结果是协议的多样性很高。一些供应商更喜欢简单的纯文本协议,但其他供应商更喜欢带有 CRC 代码、成帧等的复杂二进制协议……有时他们喜欢堆叠多个协议(例如,在 OPC 层之上的供应商特定握手算法)。强大的 OOP 语言在这里有很多优势。
例如,我已经看到 java 以 100 毫秒/周期的连续速度打印。这包括生成唯一标签、将其发送到打印机、接收确认、将其打印在纸上并使用气压将其应用到产品上。
总结一下java的强大: