如何在 Linux 驱动程序中切换到实模式

发布于 2025-01-05 19:04:32 字数 359 浏览 2 评论 0原文

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

幸运的是,制造商的 BIOS 附带了一个功能来执行此操作:

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

不幸的是,我在保护模式下运行 64 位 Linux。有什么方法可以从用户空间程序或内核驱动程序(如果需要)调用 BIOS 中断吗?

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

I've got an intel-based SBC that I'm using in an embedded application. It's got a Digital IO (DIO) port attached to a Fintek Super I/O chip. I want to be able to set the bits on the output lines of this port to control some other hardware.

Fortunately, the manufacturer's BIOS comes with a function to do just this:

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

Unfortunately I'm running 64-bit linux in protected mode. Is there any way I can call that bios interrupt, either from a user-space program or as a kernel driver if need be?

I can alternatively set registers directly on the Fintek chip, but this requires knowing exactly what pins on the chip are connected to the DIO header, and, of course, this changes from board revision to board revision.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小情绪 2025-01-12 19:04:32

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

Your distribution probably has packages for libx86. libx86 uses lrmi (the opposite of DPMI) on x86, and an x86 emulator on x86-64, since AFAIK vm86 mode cannot be used from 64 bits mode.

无悔心 2025-01-12 19:04:32

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

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

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

First of all, you must ensure that Linux doesn't overwrite memory, where interrupts reside.

You will not be able to get to real mode in any easy and not-breaking OS runtime way. You should find where in memory that interrupt function is and use some kind of emulator to interpret that 16bit machine code and execute 64bit long mode procedures. You can search OSDev Forums and OSDev Wiki to find more on this topic.

(Tip: look for questions about using VESA in protected mode).

若水微香 2025-01-12 19:04:32

我之前已经将其放入原型的引导加载程序中,但它可能不会保留。您可以根据“它们之前所在的位置”修复硬件或使用芯片位置进行模糊处理。

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".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文