在 Linux 上从 Java 访问 PC 硬件端口
Posted
技术标签:
【中文标题】在 Linux 上从 Java 访问 PC 硬件端口【英文标题】:PC hardware port access from Java on Linux 【发布时间】:2012-02-14 01:53:22 【问题描述】:什么是 Java-on-Linux 等价于 C 字节大小的 PC 架构硬件端口输入/输出功能?
对于输出,outb
如下所示:
tmp = inb(0x61);
if (tmp != (tmp | 0x01))
outb(0x61, tmp | 0x01);
对于输入,inb
如下所示:
tmp = (inb(0x61) & 0xfe);
outb(0x61, tmp);
目的:我想实现比这更少开销的东西:
try Runtime.getRuntime().exec("beep") catch (IOException e)
作为将代码 7(bell char)发送到标准输出的替代方法,因为这似乎已在 Ubuntu 中被积极禁用。 Toolkit 的嘟嘟声也是静音。
【问题讨论】:
在 Linux 中,一切都是文件。 您可以在 Linux 上运行 C(显然),这证明并非所有 Linux I/O 都是面向文件的。 不! Kangkan 建议您打开一些设备文件,例如/dev/tty0
或 /dev/lp0
。另见***.com/a/8923009/841108 和easysw.com/~mike/serial
如果您需要确切的功能,请使用 jni - 编写一个小型 C 函数,将其构建到共享库中,加载并调用它。
【参考方案1】:
我认为你搭错了火车。
Java 是一种面向对象的高级语言,可编译为虚拟机架构。汇编器 I/O 指令是特定于硬件处理器的。两者之间没有直接的等价关系。
您所希望的最好的结果是将您的 Java 代码(使用管道、共享内存、套接字等)与执行所需 I/O 的本机 Linux 应用程序接口。
【讨论】:
更新:我的目的已经被描述了。 所以您的实际问题是:“如何从 Java 创建系统蜂鸣声?”这似乎是一个与“Linux 上 Java 访问 PC 硬件端口”截然不同的问题。 仍然是我需要的 I/O,因为尝试以任何其他方式发出声音是在浪费大量时间。而且我尝试了很多。示例代码不是汇编程序:它是与处理器无关的代码。 任何涉及 inb()/outb() 的东西都与处理器无关。 I/O 操作是 x86 独有的。 有些 C 编译器不是 x86 的,所以一定有 inb() 和 outb() 是非 x86 的。以上是关于在 Linux 上从 Java 访问 PC 硬件端口的主要内容,如果未能解决你的问题,请参考以下文章