我正在尝试开发一个操作系统。我已经完成了OSDev的Barebones教程,但multiboot仍然存在一些问题。
据我所知,当我按照教程创建多引导映像时,我有一个ELF格式的二进制文件。当我指定-kernel
选项时,这个ELF可执行文件由QEMU加载到内存中。所以我在内存中有一个可执行程序,它有一个入口点。它旁边有一些函数和库。内存中没有其他东西。也没有软盘或磁盘映像,我可以从中读取或写入扇区。这主要是因为我没有在这方面向QEMU指定任何内容。
然而,我想要实现的是,在QEMU加载我的ELF可执行文件后,我想要一个可以读取或写入扇区的磁盘或软盘架构。我也想从中加载一些用户程序,或者在上面建立一个文件系统
qemu-system-i386 -kernel myKernel.bin -fda myDisk.image
或者,我应该取我的myKernel.bin
文件,用零填充它,直到它对齐到512字节,然后将磁盘映像的其余部分附加到它上。
我的问题是如何使用QEMU实现此功能。在编写磁盘驱动程序之前,我需要知道这样的任务是否可行。如果不可能,我可以采取不同的方法,但这些都是我现在的想法。我已经研究过-initrd
,但它不是我想要的。我也不想让QEMU将任何文件加载到RAM中。相反,我想自己操作磁盘映像。有什么建议吗?
您不需要软盘映像和多引导内核,除非您已经编写了某种加载程序。-kernel
标志的工作原理与grub类似,而且它比从虚拟媒体加载快得多。这就是许多linux内核和驱动程序开发人员测试代码的方式,而不是每次都创建一个虚拟媒体映像。