我使用 UEFI 启动(无 BIOS)。之后,控制权转移到我的操作系统的内核,我配置分页。 GOP(图形输出协议)变得不可用,任何屏幕输出也随之变得不可用。
要自己配置一切,我目前看到以下算法:
- 我们在 PCI 上找到任何与 VGA 兼容的显卡
- 我们得到视频内存开头的物理地址(对我来说,就像
0x81020000
在 BAR 中一样,它寻址最大的空间) - 设置命令寄存器中的内存空间和 I/O 空间位 ( https://wiki.osdev.org/PCI )
- 我们将找到的地址“绑定”到虚拟地址(例如
0xA0000
) - 我们将VGA寄存器设置为图形模式,例如12h(我只是将它们放在某些端口上,没有任何连接到PCI、显卡或其他任何东西)。
- 我们向虚拟地址 (
0xA0000
) 写入一些值,它应该显示在屏幕上
在执行完该地址的所有操作后,0xA0000
会出现连贯的无意义内容 ( QEMU Monitor...
),但屏幕上没有任何反应。此外,由于某种原因,无法将该值写入反射内存。
这是我的代码。最主要的是pci.c
和vga.c
。我在设置分页时,在检测到分页之前绑定内存,基于这样的假设:在启动之间同一个模拟器上不会发生任何变化。
我缺少什么?