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?
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. –