我正在努力在 D 中制作自己的引导加载程序和内核,但遇到了一个绊脚石。
背景:
- 我从头开始写一切。所以引导扇区正在组装中。而且我没有使用 GRUB。
- 我正在使用 Qemu 进行测试。
- 引导扇区从“磁盘”(目前只是一个平面二进制文件,其第一个扇区是引导加载程序,其余部分是内核代码)中读取内核到虚拟地址 0xC0000000,并调用
kmain()
我的入口点核心。 - 我正在为我的内核使用PE 文件格式。(请不要告诉我使用 Elf——我的选择是 PE。)
问题
能够加载 PE 文件是内核工作的一部分。那么我如何首先将内核本身加载到内存中,以便它可以真正正确执行?
我不能从引导扇区执行此操作,因为 (1) 它不适合 512 字节,并且 (2)在汇编中这样做很痛苦。显然,我也不能在内核本身中做到这一点。那么我该怎么做呢?