我最近开始了一个庞大的项目......制作我自己的自制操作系统。事实证明它比我想象的要困难得多,但我决心坚持下去,直到我得到一些有用的东西。我已经设法让引导加载程序在 VirtualBox 机器上工作,但我被困在下一步。我正在尝试将第二阶段加载到引导加载程序,但不知道如何将其加载到内存中并运行它。我已经考虑过使用 GRUB 引导加载程序,所以请不要建议它。如果可能的话,一个代码示例真的很有帮助。如果重要的话,我在 Ubuntu 上使用 NASM。任何帮助是极大的赞赏。
问问题
1063 次
2 回答
1
首先,您的引导加载程序至少需要简单的文件系统支持。只要在引导加载程序中很难支持功能齐全的文件系统,就有几种技巧是可能的:
制作非常简单的文件系统支持。例如,从引导设备的根目录中搜索具有给定名称的文件。
或者简单地为您的第二阶段二进制文件保留一些物理扇区并直接从那里读取。
您需要的第二项服务是加载和执行可执行文件。最简单的解决方案是使用内存的普通二进制映像,例如在 DOS .com 文件中。
因此,引导加载程序将能够从磁盘加载一个更大的程序,将其放入内存并运行它。这个更大的程序现在有足够的空间来提供文件系统支持和复杂的可执行文件加载/运行。在更简单的情况下,这个可执行文件可能包含您的整个内核并直接启动它而不加载其他模块。
于 2013-10-24T17:09:43.773 回答
0
如果你真的想使用 GRUB,那么你必须创建一个兼容 Multiboot 的内核文件。规范可在此处找到:http ://www.gnu.org/software/grub/manual/multiboot/multiboot.html
于 2013-10-24T17:10:30.463 回答