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