我正在尝试开发一个操作系统。我已经完成了OSDev的Barebones tutorial,但仍然遇到了多重启动的问题。
据我所知,当我按照教程创建多重启动图像时,我有一个ELF格式的二进制文件。当我指定-kernel
选项时,QEMU将此ELF可执行文件加载到内存中。所以我在内存中有一个可执行程序,它有一个入口点。它有一些功能和库。记忆中没有别的东西。还没有软盘或磁盘映像,我可以从中读取或写入扇区。这主要是因为我没有在这方面为QEMU指定任何内容。
但是,我想要实现的是在QEMU加载我的ELF可执行文件之后,我想要一个磁盘或软盘架构,我可以从中读取或写入扇区。我还想从中加载一些用户程序,或者在其上设置文件系统。到目前为止,我所想的是:
qemu-system-i386 -kernel myKernel.bin -fda myDisk.image
或许,我应该拿我的myKernel.bin
文件,用零填充它,直到它与512字节对齐,然后将剩余的磁盘映像附加到它。
我的问题是如何使用QEMU实现此功能。在深入编写磁盘驱动程序之前,我需要知道这样的任务是否可行。如果不可能,我可以采取不同的方法,但这些是我现在的想法。我已经调查了-initrd
,但这并不是我想要的。我也不想让QEMU将任何文件加载到RAM中。相反,我想自己操纵磁盘映像。有关如何做到这一点的任何建议吗?
答案 0 :(得分:0)
除非您已经编写了某种加载程序,否则您不需要软盘映像和多引导内核。 -kernel
标志与grub的工作方式类似,它比从虚拟媒体加载要快得多。这是多少Linux内核和驱动程序开发人员测试他们的代码,而不是每次都创建一个虚拟媒体图像。