可以在 x86_64 Linux 内核上使用 BIOS 服务吗?

可以在 x86_64 Linux 内核上使用 BIOS 服务吗?

我想使用中断 10h 服务在控制台上显示,但我不知道是否可行,我在官方文档上进行了调查,但找不到答案

答案1

问题很大一部分在于 INT 10h BIOS 服务(大部分)不在 64 位代码中。它们甚至不在 32 位代码中。它们是用 16 位代码编写的。为了成功运行旧代码,您必须将处理器切换到与现代操作系统完全不同的操作模式。

来自维基百科:

此外,在现代 x86 系统上,BIOS 调用只能在实模式或虚拟 8086 模式下执行。v8086 在长模式下不是一种选择。这意味着在受保护模式(32 位)或长模式(64 位)下运行的现代操作系统需要切换到实模式并返回才能调用 BIOS - 这是一项非常昂贵的操作。

在切换 CPU 操作模式(这是一项高权限操作,肯定需要 root 访问权限)之前,您需要设置系统状态以符合旧代码的期望。例如,BIOS ROM 通常从地址空间取消映射,因为它们不再需要;您必须将其内容映射回程序的地址空间,以便可以使用它们。

返回从 16 位代码转换为常规 32 位或 64 位用户空间 Linux 程序是另一项棘手的操作。

在现代系统中,你很可能至少有两个或更多CPU 核心- BIOS 服务根本就没有被设计来处理这个问题。

简而言之,你正在看一项非常复杂的任务。

你到底想用你的显示器做什么?这感觉像是一个非常严重的XY问题

如果你仍然想通过技术挑战做到这一点,那就再好不过了。我强烈建议你学习DOS盒及其源代码来了解你将要处理的内容。

相关内容