如何使用来自 GRUB 的实模式 BIOS / VESA 调用?

Posted

技术标签:

【中文标题】如何使用来自 GRUB 的实模式 BIOS / VESA 调用?【英文标题】:How to use real mode BIOS / VESA calls from GRUB? 【发布时间】:2015-08-25 04:30:35 【问题描述】:

我正在开发一个简单的 Grub 模块,它可以在启动过程的早期阶段启用一些额外的视频设置/初始化。我真正的最佳想法是使用一些 VESA 调用来完成任务。

不幸的是,最近我发现 Grub 无法调用实模式。

但是 GRUB 可以执行非常复杂的操作,如果没有 Bios 的帮助,这可能是无法想象的。

这怎么可能?我怎么能从 grub 调用 bios?

【问题讨论】:

【参考方案1】:

据我所知,grub 使用函数grub_bios_interrupt 来调用 16 位中断。该函数内部使用prot_to_real 函数切换到实模式,real_to_prot 切换回。我猜你应该也可以使用这些函数,但也许你需要将它们包装在像 grub_bios_interrupt 这样的函数中。

【讨论】:

【参考方案2】:

您可以只使用 BIOS 扩展器。它们允许您从保护模式使用实模式中断!我自己没有使用过它们,尽管我听说它们确实有效。一个例子是SudoBIOS,它能够在保护模式下启动MikeOS,尽管我自己不能保证。

【讨论】:

来自 grub 模块的 bios 扩展器??你确定吗? 为什么不呢?您只需要按照说明进行安装即可。例如,SudoBIOS 构建为需要在 0x2000 加载的平面二进制文件(?)。我不认为 GRUB 可以做到这一点,所以你需要自己加载它。让它运行可能需要一些工作,但这是值得的。

以上是关于如何使用来自 GRUB 的实模式 BIOS / VESA 调用?的主要内容,如果未能解决你的问题,请参考以下文章

GRUB2 制作 BIOS/UEFI 双模式启动的 Linux/Windows 安装U盘

linux 如何进入grub模式

使用 grub 引导汇编编写的内核

win7 +v Ubuntu 16.04 grub rescue 模式下修复 grub

绕过 grub 密码

修改Grub默认启动项