【问题标题】:Unable to boot from an AHCI hhd in qemu无法从 qemu 中的 AHCI hhd 启动
【发布时间】:2020-02-14 12:16:21
【问题描述】:

我最近开始为教育目的开发自己的引导加载程序和内核。

我开始使用qemu-system-i386 -fda image.bin从软盘引导,然后使用qemu-system-i386 -hda image.bin从硬盘驱动器引导

然后我开始研究用于从 sata hhds 读取/写入的 ahci 驱动程序。

问题是在使用这些 args 启动 qemu 时(取自 this question

qemu-system-i386 \
 -drive id=disk,file=image.bin,if=none \
 -device ahci,id=ahci \
 -device ide-drive,drive=disk,bus=ahci.0

bios 似乎没有找到硬盘,它输出-

SeaBIOS (version rel-1.12.-0-ga5cab58e9a3f-prebuilt.qemu.org)

iPXE (http://ipxe.org) 00:03.0 C980 PCI2.10 PnP PMM+07F914C0+07EF14C0 C980

Booting from Hard Disk...
Boot failed: could not read the boot disk

Booting from Floppy...
Boot failed: could not read the boot disk

Booting from ROM...
...

使用 -boot menu=on 启动 qemu 确实显示了 ahci 驱动器,但是当我选择它时,它只会从上面打印相同的输出。

我尝试在 linux 和 windows 上使用 qemu 4.1.50,在 linux 上使用 2.8.1,所有版本的结果完全相同。

我发现的一种解决方法(用于处理驱动程序)正在使用

qemu-system-i386 \
 -hda image.bin
 -drive id=disk,file=other.bin,if=none \
 -device ahci,id=ahci \
 -device ide-drive,drive=disk,bus=ahci.0

启动内核。 (但我确实想从我与之交互的同一个硬盘驱动器启动) 然后我枚举 pci 总线并找到 ahci 控制器(作为驱动程序初始化的一部分)。 但是随后读取活动端口的 sata 状态会导致 ipm 为 0,det 为 1(设备存在但连接尚未初始化),根据this osdev 页面,bios 应该初始化,所以现在我假设这是同一个问题。

我在这里做错了吗?

【问题讨论】:

    标签: qemu boot osdev


    【解决方案1】:

    在将我的引导加载程序与支持 ahci hhd 的不同操作系统进行比较并进行更多研究后,我发现我的 mbr 中缺少有效的 partition table,因此 BIOS 认为它不能启动。

    我不完全知道为什么它与 qemu-system-i386 -hda image.bin 一起工作,因为它应该仍然是一个带分区的硬盘,如果我弄明白了,我会编辑这个答案。

    【讨论】:

      猜你喜欢
      • 2012-11-09
      • 2013-06-21
      • 1970-01-01
      • 2023-03-14
      • 2016-03-20
      • 2016-03-19
      • 1970-01-01
      • 2023-03-23
      • 2021-01-01
      相关资源
      最近更新 更多