【发布时间】:2019-08-09 12:49:48
【问题描述】:
一段时间以来,我一直对了解 Bare Metal OS 很感兴趣,并发现了 Eugene Obrezkov 的这个很棒的 GitHub,它提供了一个在 QEMU 中工作的基本文本外壳。我无法让它在 VirtualBox 中运行。
https://github.com/ghaiklor/ghaiklor-os-gcc
我想扩展它并添加一个简单的启动闪屏,它以 1024x768x24bpp 运行。在现代计算机上这样做的标准方法是什么?
这个问题就像问几个问题一样。 :(
我应该阅读有关 VBE3 的内容吗?我有一份正在阅读的文件:
https://pdos.csail.mit.edu/6.828/2011/readings/hardware/vbe3.pdf
我还看了一下这个 SE,它说不要使用 VBE3,它涵盖了一些关于 UEFI 中的图形模式,它是否适用于我将在 QEMU 或 VirtualBox 中测试的裸机操作系统?
Assembly - How to set graphics mode in UEFI (No VGA, No BIOS, Nothing deprecated)
如果基于 Eugene 的初始来源的答案是使用 VBE3 或 UEFI,我需要处于真实、受保护或长期中的哪种模式?这是我在模式之间切换时发现的:
https://www.codeproject.com/Articles/45788/The-Real-Protected-Long-mode-assembly-tutorial-for
【问题讨论】:
-
您要扩展的代码使用的是传统的 BIOS 引导方式,所以不能使用 UEFI 接口。您不能在长模式下使用 VESA 接口,这意味着如果您想使用这些接口,您需要在引导扇区中切换视频模式,然后才能切换到长模式。但是,您的问题的答案是,在运行现代操作系统的现代计算机上切换视频模式的标准方法是不使用 UEFI 或 VESA 接口。而是使用视频驱动程序切换模式。
-
如果您的系统上有旧版 BIOS,您还可以考虑将
libx86emu集成到您的 64 位内核中。libx86emu是一个部分 x86 仿真器,能够在访问某些内存区域、执行输入/输出指令、模拟中断等时连接到您的内核。通常认为它足以驱动 VBE 传统 BIOS 接口。这一切都是在保持长模式时完成的,它可以在环 0 或环 3 中运行。