操作系统开发 - 使用qemu从软盘驱动器启动

8
我一直在阅读BrokenThorn的操作系统开发教程,并到了创建和加载第二阶段引导程序的部分。该教程是为Windows准备的,但我正在Linux(Ubuntu 13.04)上进行。
这是我所做的:
- 在`~/Documents/floppy`下使用`mkfs.vfat`命令创建了`floppy.img`文件。 - 使用nasm编译了`boot.asm`文件,生成了`boot.bin`文件。 - 然后我运行了这个命令:`dd if=boot.bin of=~/Documents/floppy/floppy.img bs=512 count=1`。
因此,我拥有了带有第一阶段引导程序的软盘映像。在使用qemu启动它时,它可以正常工作。
然而,在我创建第二阶段引导程序之后(如果我理解正确),我将不得不挂载`floppy.img`并将第二阶段复制到已挂载的文件系统中。在这种情况下,如何使用qemu引导已挂载的软盘?这是否可能?如果不是,我该如何处理第二阶段引导程序。
请原谅我提出的任何愚蠢的假设/问题,因为我对此还很陌生。

因此,将引导加载程序分为两个部分的原因与BIOS的操作方式有关。基本上,在启动磁盘时,它会读取第一个扇区并开始运行它。因此,在第一个扇区中,您将放置引导代码以从软盘中加载更多扇区,即第二阶段加载程序,它将实际加载系统。 - Skeen
另外,如果你还不知道的话,有一个业余操作系统开发论坛在http://forum.osdev.org/,可能比Stack Overflow更有帮助,因为它专门致力于一个领域。 - Skeen
回答你的问题,阶段1引导加载程序将需要访问软盘控制器并读取阶段2引导加载程序。您可以决定为您的第二阶段加载程序加载静态扇区数量,以保持一切简单。一旦第二阶段加载程序在内存中,只需跳转到其入口点即可。 - Skeen
在开发社区中,有一个很大的讨论是关于应该从引导程序还是内核开始。 - Skeen
1
一个小提示:放弃使用软盘。开始使用明智的选择,比如从硬盘、光盘或 DVD 启动。软盘已经过时了,不要再依赖它们。 - Griwes
显示剩余3条评论
1个回答

8

您的问题在哪里?您挂载了镜像:

mount -oloop ~/Documents/floppy.img /mnt/floppy

复制第二阶段:

cp stage2.bin /mnt/floppy

卸载它:

umount /mnt/floppy

然后使用QEMU启动它:

qemu -fda ~/Documents/floppy.img

就是这样!


是的,我已经通过注释和一些自己的测试搞清楚了。但还是谢谢你,这对以后的参考很有用! - Cygnus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接