Использование мультизагрузки и дискеты с QEMU
Я пытаюсь разработать операционную систему. Я закончил учебник Barebones от OSDev, но у меня все еще есть проблемы с мультизагрузкой.
Как я понимаю, когда я создаю мультизагрузочный образ после учебника, у меня есть двоичный файл в формате ELF. Этот исполняемый файл ELF загружается в память QEMU, когда я указываю -kernel
вариант. Итак, у меня есть одна исполняемая программа в памяти, и она имеет точку входа. У него есть некоторые функции и библиотеки. В памяти больше ничего нет. Также нет образа дискеты или образа диска, с которого я могу читать или записывать сектора. Это главным образом потому, что я ничего не указал QEMU в этом отношении.
Однако, чего я хочу достичь, так это того, чтобы после того, как QEMU загрузит мой исполняемый файл ELF, я хочу иметь архитектуру диска или дискеты, из которой я могу читать или записывать сектора. Я также хочу загрузить из него некоторые пользовательские программы или настроить файловую систему. Пока что я думаю вот что:
qemu-system-i386 -kernel myKernel.bin -fda myDisk.image
Или, может быть, я должен взять мой myKernel.bin
файл, заполните его нулями, пока он не выровняется до 512 байт, затем добавьте к нему оставшуюся часть образа диска.
У меня вопрос, как я могу достичь этой функциональности с QEMU. Мне нужно знать, возможна ли такая задача, прежде чем погрузиться в написание драйвера диска. Если это невозможно, я могу использовать другой подход, но это те идеи, которые у меня есть сейчас. Я уже изучил -initrd
и это не совсем то, что я хочу. Я также не хочу, чтобы QEMU загружал какие-либо файлы в оперативную память. Вместо этого я хочу манипулировать образом диска самостоятельно. Любые предложения о том, как это сделать?
1 ответ
Вам не нужен и образ дискеты, и мультизагрузочное ядро, если только вы не написали какой-то загрузчик. -kernel
flag работает аналогично grub и работает намного быстрее, чем загрузка с виртуального носителя. Именно так многие разработчики ядра и драйверов Linux тестируют свой код, а не каждый раз создают образ виртуального носителя.