2

我有一个在嵌入式应用程序中使用的基于英特尔的 SBC。它有一个连接到 Fintek 超级 I/O 芯片的数字 IO (DIO) 端口。我希望能够设置此端口输出线上的位来控制其他一些硬件。

幸运的是,制造商的 BIOS 提供了一个功能来做到这一点:

AX=6F09h
bl=<bits>
int 15h

不幸的是,我在保护模式下运行 64 位 linux。有什么方法可以调用该 bios 中断,无论是从用户空间程序还是作为内核驱动程序(如果需要)?

我也可以直接在 Fintek 芯片上设置寄存器,但这需要确切地知道芯片上的哪些引脚连接到 DIO 接头,当然,这会随着电路板版本的变化而变化。

4

3 回答 3

1

首先,您必须确保 Linux 不会覆盖中断所在的内存。

您将无法以任何简单且不会破坏操作系统运行时的方式进入实模式。您应该找到中断函数在内存中的位置,并使用某种仿真器来解释该 16 位机器代码并执行 64 位长模式程序。您可以搜索OSDev 论坛OSDev Wiki以查找有关此主题的更多信息。

(提示:查找有关在保护模式下使用 VESA 的问题)。

于 2012-02-14T20:22:26.040 回答
1

您的发行版可能包含libx86的软件包。libx86 在 x86 上使用 lrmi(与 DPMI 相反),在 x86-64 上使用 x86 模拟器,因为 AFAIK vm86 模式不能从 64 位模式使用。

于 2012-02-14T22:53:12.633 回答
0

I've shimmed it into the bootloader before for prototypes, but it may not carry over. Either you fix the hw or futz with the chip locations based on "where they've been before".

于 2012-02-16T05:19:49.760 回答