【问题标题】:Using both multiboot and floppy with QEMU在 QEMU 中同时使用多重引导和软盘
【发布时间】:2016-09-18 16:57:09
【问题描述】:

我正在尝试开发一个操作系统。我已经完成了来自 OSDev 的Barebones tutorial,但在多重引导方面仍然存在一些问题。

据我了解,当我按照教程创建多重引导映像时,我有一个 ELF 格式的二进制文件。当我指定 -kernel 选项时,这个 ELF 可执行文件由 QEMU 加载到内存中。所以我在内存中有一个可执行程序,它有一个入口点。它旁边有一些函数和库。记忆中没有别的东西了。也没有可以读取或写入扇区的软盘或磁盘映像。这主要是因为我没有在这方面向 QEMU 指定任何内容。

但是,我想要实现的是在 QEMU 加载我的 ELF 可执行文件之后,我想要一个可以读取或写入扇区的磁盘或软盘架构。我还想从中加载一些用户程序,或者在其上设置文件系统。到目前为止,我的想法是这样的:

qemu-system-i386 -kernel myKernel.bin -fda myDisk.image

或者,也许,我应该使用我的myKernel.bin 文件,用零填充它直到它对齐到 512 字节,然后将其余的磁盘映像附加到它。

我的问题是如何使用 QEMU 实现此功能。在深入编写磁盘驱动程序之前,我需要知道这样的任务是否可行。如果不可能,我可以采取不同的方法,但这些是我现在的想法。我已经查看了-initrd,但这并不是我想要的。我也不希望 QEMU 将任何文件加载到 RAM 中。相反,我想自己操作磁盘映像。关于如何做到这一点的任何建议?

【问题讨论】:

  • 当您创建兼容多重引导的引导加载程序并使用-kernel 选项时,副作用是您被置于保护模式。您不再可以直接访问 BIOS。您仍然可以直接访问floppy disk controller(您实际上是编写了一个设备驱动程序)。或者,您可以切换回实模式,使用软盘 BIOS 中断将数据加载到内存中,然后跳回保护模式。但是在这两种情况下,您都可以按照您的建议使用带有 -kernel 和 -fda 的 QEMU 命令安装虚拟软盘。

标签: boot qemu osdev floppy multiboot


【解决方案1】:

您不需要软盘映像多重引导内核,除非您编写了某种加载程序。 -kernel 标志的工作方式与 grub 类似,它比从虚拟媒体加载要快得多。这就是许多 linux 内核和驱动程序开发人员测试他们的代码而不是每次都创建虚拟媒体映像的情况。

【讨论】:

    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    相关资源
    最近更新 更多