【问题标题】:PC hardware port access from Java on Linux在 Linux 上从 Java 访问 PC 硬件端口
【发布时间】: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。另见stackoverflow.com/a/8923009/841108easysw.com/~mike/serial
  • 如果您需要确切的功能,请使用 jni - 编写一个小型 C 函数,将其构建到共享库中,加载并调用它。

标签: java linux port hardware-interface hardware-port


【解决方案1】:

我认为你搭错了火车。

Java 是一种面向对象的高级语言,可编译为虚拟机架构。汇编器 I/O 指令是特定于硬件处理器的。两者之间没有直接的等价关系。

您所希望的最好的结果是将您的 Java 代码(使用管道、共享内存、套接字等)与执行所需 I/O 的本机 Linux 应用程序接口。

【讨论】:

  • 更新:我的目的已经被描述了。
  • 所以您的实际问题是:“如何从 Java 创建系统蜂鸣声?”这似乎是一个与“Linux 上 Java 访问 PC 硬件端口”截然不同的问题。
  • 仍然是我需要的 I/O,因为尝试以任何其他方式发出声音是在浪费大量时间。而且我尝试了很多。示例代码不是汇编程序:它是与处理器无关的代码。
  • 任何涉及 inb()/outb() 的东西都与处理器无关。 I/O 操作是 x86 独有的。
  • 有些 C 编译器不是 x86 的,所以一定有 inb() 和 outb() 是非 x86 的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
相关资源
最近更新 更多