【发布时间】: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 应该初始化,所以现在我假设这是同一个问题。
我在这里做错了吗?
【问题讨论】: