Я недавно начал разрабатывать свой собственный загрузчик и ядро для образовательных целей.
Я начал загрузку с дискеты, используя qemu-system-i386 -fda image.bin
, а затем с жесткого диска, используя qemu-system-i386 -hda image.bin
* 1006. * Затем я начал работать над драйвером ahci для чтения / записи из sata hhds.
Проблема в том, что при запуске qemu с использованием этих аргументов (взято из этот вопрос )
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...
...
запуск qemu с -boot menu=on
действительно показывает диск ahci, но когда я выбираю его, он просто печатает тот же вывод сверху.
Я пытался использовать qemu 4.1.50 наи linux, и windows, и 2.8.1 на linux, одинаковый результат во всех версиях.
Обнаруженный мной обходной путь (для работы с драйвером) использовал
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 (устройство присутствует, но соединение не было инициализировано), что в соответствии с этой osdev страницей должно инициализировать биостак что сейчас я предполагаю, что это та же проблема.
Я что-то здесь не так делаю?