我最近开始为教育目的开发我自己的引导加载程序和内核。
我首先使用qemu-system-i386 -fda image.bin从软盘启动,然后使用qemu-system-i386 -hda image.bin从硬盘启动
然后,我开始开发一个ahci驱动程序,用于从sata hhds读取/写入。
问题出在使用这些参数启动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基本输入输出系统似乎找不到硬盘,它输出-
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应该初始化,所以现在我假设这是相同的问题。
我是不是做错了什么?
发布于 2019-10-18 05:54:05
在将我的引导加载程序与支持ahci hhd的不同操作系统进行比较和更多的研究之后,我发现我的mbr中缺少一个有效的partition table,所以BIOS不认为它是可引导的。
我不知道为什么它在qemu-system-i386 -hda image.bin上工作,因为它应该仍然是一个带分区的硬盘驱动器,如果我弄清楚了,我会编辑这个答案。
https://stackoverflow.com/questions/58434936
复制相似问题