【问题标题】:Run assembly program from bootloader从引导加载程序运行汇编程序
【发布时间】:2013-10-24 16:09:09
【问题描述】:
我最近开始了一个庞大的项目......制作我自己的自制操作系统。事实证明它比我想象的要困难得多,但我决心坚持下去,直到我得到一些有用的东西。我已经设法让引导加载程序在 VirtualBox 机器上工作,但我被困在下一步。我正在尝试将第二阶段加载到引导加载程序,但不知道如何将其加载到内存中并运行它。我已经考虑过使用 GRUB 引导加载程序,所以请不要建议它。如果可能的话,一个代码示例真的很有帮助。如果重要的话,我在 Ubuntu 上使用 NASM。非常感谢任何帮助。
【问题讨论】:
标签:
assembly
operating-system
nasm
bootloader
【解决方案1】:
首先,您的引导加载程序至少需要简单的文件系统支持。只要在引导加载程序中很难支持全功能的文件系统,几个技巧都是可能的:
制作非常简单的文件系统支持。例如,从引导设备的根目录中搜索具有给定名称的文件。
或者只是为您的第二阶段二进制文件保留一些物理扇区,然后直接从那里读取。
您需要的第二个服务是加载和执行可执行文件。最简单的解决方案是使用内存的普通二进制映像,例如在 DOS .com 文件中。
因此,引导加载程序将能够从磁盘加载一个更大的程序,将其放入内存并运行它。这个更大的程序现在有足够的空间来提供文件系统支持和复杂的可执行文件加载/运行。在更简单的情况下,这个可执行文件可能包含您的整个内核,并且可以直接启动它而无需加载其他模块。