2016-05-21 9 views
3

Я пытаюсь разработать операционную систему. Я закончил Barebones tutorial из OSDev, но все еще есть проблемы с мультизагрузкой.Использование как мультизагрузочных, так и гибких дисков с QEMU

Как я понимаю, когда я создаю многозадачное изображение после учебника, у меня есть двоичный файл формата ELF. Этот исполняемый файл ELF загружается в память с помощью QEMU, когда я указываю опцию -kernel. Таким образом, у меня есть одна исполняемая программа в памяти, и у нее есть точка входа. У него есть некоторые функции и библиотеки вместе с ним. В памяти больше ничего нет. Также нет образа дискеты или диска, из которого я могу читать или писать секторы. Это в основном потому, что я не указал ничего для QEMU в этом отношении.

Однако, что я хочу достичь, после того, как QEMU загружает исполняемый файл ELF, я хочу иметь дисководную или гибкую архитектуру, из которой я могу читать или писать секторы. Я также хочу загрузить с него некоторые пользовательские программы или, возможно, настроить на нем файловую систему. До сих пор, что я думаю, это:

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

Или, может быть, я должен взять мой myKernel.bin файл, раздувания нулями, пока не будет выровнен по 512 байт, а затем добавить остальную часть образа диска к нему.

Мой вопрос в том, как я могу достичь этой функциональности с помощью QEMU. Мне нужно знать, возможна ли такая задача, прежде чем погрузиться в запись драйвера диска. Если это невозможно, я могу принять другой подход, но это те идеи, которые у меня есть сейчас. Я уже рассмотрел -initrd, и это не совсем то, что я хочу. Я также не хочу, чтобы файлы QAMU загружались в ОЗУ. Вместо этого я хочу сам манипулировать изображением диска. Любые предложения о том, как это сделать?

+1

При создании многозадачного совместимого загрузчика и использовании опции '-kernel' побочный эффект заключается в том, что вы попали в защищенный режим. У вас больше нет прямого доступа к BIOS. Вы можете получить доступ к контроллеру [флоппи-дисковода] (http://wiki.osdev.org/Floppy_Disk_Controller) напрямую (вы действительно пишете драйвер устройства). В качестве альтернативы вы можете переключиться обратно в реальном режиме, используя Floppy Disk BIOS прерывает загрузку данных в память, а затем переходит в защищенный режим. Но в обоих случаях вы монтируете виртуальную гибкую дискету с помощью команды QEMU с -kernel и '-fda', как вы предложили. –

ответ

0

Вам не нужно как гибкое изображение , так и многозадачное ядро, если вы не написали какой-то загрузчик. Флаг -kernel работает аналогично grub, и он намного быстрее, чем загрузка с виртуальных носителей. Это то, как многие разработчики linux и драйверы тестируют свой код, а не создают виртуальный медиа-образ каждый раз.