2016-05-21 33 views
3

Ich versuche ein Betriebssystem zu entwickeln. Ich habe die Barebones tutorial von OSDev beendet, aber immer noch einige Probleme mit Multiboot.Verwendung von Multiboot und Floppy mit QEMU

Wie ich verstehe, wenn ich ein Multiboot-Bild nach dem Tutorial erstellen, habe ich eine ELF-Format-Binärdatei. Diese ELF-Programmdatei wird von QEMU in den Speicher geladen, wenn ich die Option -kernel festlege. Ich habe also ein einziges ausführbares Programm im Speicher und es hat einen Einstiegspunkt. Es hat einige Funktionen und Bibliotheken daneben. Es gibt nichts anderes in der Erinnerung. Es gibt auch kein Disketten- oder Disketten-Image, von dem ich Sektoren lesen oder schreiben kann. Dies liegt hauptsächlich daran, dass ich in dieser Hinsicht nichts an QEMU geschrieben habe.

Was ich jedoch erreichen möchte, ist, nachdem QEMU meine ELF-ausführbare Datei geladen hat, möchte ich eine Disketten- oder Diskettenarchitektur haben, von der ich Sektoren lesen oder schreiben kann. Ich möchte auch einige Benutzerprogramme davon laden oder vielleicht ein Dateisystem darauf einrichten. Bisher, was ich denke ich, ist dies:

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

Oder vielleicht sollte ich meine myKernel.bin Datei nehmen, Pad mit Nullen bis zu 512 Bytes ausgerichtet ist, dann fügen Sie den Rest des Disk-Image zu ihm.

Meine Frage ist, wie kann ich diese Funktionalität mit QEMU erreichen. Ich muss wissen, ob eine Aufgabe wie diese möglich ist, bevor ich in den Diskettentreiber eintauche. Wenn es nicht möglich ist, kann ich einen anderen Ansatz wählen, aber das sind die Ideen, die ich gerade habe. Ich habe schon in -initrd geschaut und es ist nicht ganz was ich will. Ich möchte auch keine Dateien von QEMU in den Arbeitsspeicher geladen haben. Stattdessen möchte ich das Festplatten-Image selbst manipulieren. Irgendwelche Vorschläge, wie man das macht?

+1

Wenn Sie einen Multiboot-kompatiblen Bootloader erstellen und die Option '-kernel' verwenden, besteht ein Nebeneffekt darin, dass Sie in den geschützten Modus versetzt werden. Sie haben keinen direkten Zugriff auf das BIOS mehr. Sie können weiterhin direkt auf den [Disketten-Controller] (http://wiki.osdev.org/Floppy_Disk_Controller) zugreifen (Sie schreiben effektiv einen Gerätetreiber). Alternativ können Sie zurück in den Real-Modus wechseln. Verwenden Sie das Disketten-BIOS, unterbricht die Daten in den Speicher und springt dann zurück in den geschützten Modus. In beiden Fällen mounten Sie jedoch eine virtuelle Diskette mit einem QEMU-Befehl mit -kernel und -fda, wie Sie vorgeschlagen haben. –

Antwort

0

Sie benötigen weder ein Disketten-Image noch einen Multiboot-Kernel, es sei denn, Sie haben eine Art Loader geschrieben. Das Flag -kernel funktioniert ähnlich wie grub und ist viel schneller als das Laden von virtuellen Medien. Dies ist, wie viele Linux-Kernel und Treiber-Entwickler ihren Code testen, anstatt jedes Mal ein virtuelles Medienbild zu erstellen.