Ich versuche, einen Bootloader, den ich in Assembly Language geschrieben habe, in eine ISO Image-Datei zu konvertieren. Der folgende Code ist der MikeOS Bootloader. Hier ist mein Bootloader-Code:
%Vor%Ich habe den folgenden Befehl eingegeben:
%Vor%Dieser Befehl funktioniert gut und es gibt eine .bin-Ausgabe. Als nächstes tippte ich den folgenden Befehl:
%Vor%Das funktionierte auch gut und gab mir die .img-Ausgabedatei. Wenn ich diesen Befehl eintippe:
%Vor% Ich erhalte den folgenden Fehler: dd: unrecognized operand ‘skip’
. Ich habe in der Dokumentation DD gelesen, dass dem Attribut skip eine Nummer zugewiesen werden muss. Irgendwelche Ideen, welche Nummer ich mit skip Attribut eingeben sollte (Bsp. Überspringen = 1).
Als nächstes gebe ich den folgenden Befehl ein:
%Vor% Ich erhalte den folgenden Fehler: mkdosfs: unable to create floppy.img
. Wie behebe ich die Probleme, denen ich begegne? Gibt es eine andere einfachere Möglichkeit, meine Bootloader-.bin-Datei in ein ISO -Bild umzuwandeln?
Sie haben Ihr Beispiel gefunden, wie Sie ein bootfähiges ISO Bild aus dieser StackOverflow-Antwort erstellen können . Leider hast du eine akzeptierte Antwort gewählt, die in vielerlei Hinsicht falsch ist. Tu so, als hättest du diese Antwort nie gesehen.
Auf den meisten Linux-Distributionen existiert entweder ein Programm namens genisoimage
oder mkisofs
. In diesen Tagen sind sie eigentlich das gleiche Programm. Was immer Sie haben, kann in den folgenden Beispielen ersetzt werden. In meinen Beispielen wird davon ausgegangen, dass das ISO -Erstellungs-Dienstprogramm genisoimage
heißt.
In Ihrer Frage haben Sie einen Bootloader-Code in einer Datei namens boot.asm
. Sie erstellen das korrekt zu einem Bootsektor-Binärbild mit:
Dies erzeugt boot.bin
, was Ihr Bootsektor ist. Der nächste Schritt besteht darin, ein Disketten-Image zu erstellen und boot.bin
in den ersten Sektor zu platzieren. Das kannst du damit machen:
Mit dem ersten Befehl wird ein leeres Festplatten-Image gleich der Größe einer 1,44 MB-Diskette (1024 * 1440 Bytes) erstellt. Der zweite Befehl platziert boot.bin
in den ersten Sektor von floppy.img
, ohne den Rest der Datei abzuschneiden. seek=0
sagt Suche nach dem ersten Sektor (512 Bytes ist die Standardgröße eines Blocks für DD ). count=1
gibt an, dass nur 1 Sektor (512 Bytes) von boot.bin
kopiert werden soll. conv=notrunc
sagt, dass nach dem Schreiben in die Ausgabedatei das verbleibende Disk-Image intakt bleiben soll (nicht abgeschnitten).
Nachdem Sie wie oben gezeigt ein Disk-Image erstellt haben, können Sie mit folgenden Befehlen ein ISO Image erstellen:
%Vor% Die obigen Befehle erzeugen zuerst ein Unterverzeichnis namens iso
, das die Dateien enthält, die auf das endgültige CD-ROM-Image gelegt werden. Der zweite Befehl macht nichts mehr als kopiert unser floppy.img
in iso
Verzeichnis, weil wir das zum Booten brauchen. Der dritte Befehl führt die Schwerarbeit aus und erstellt das ISO Bild.
-V 'MYOS'
setzt die Datenträgerbezeichnung (Es kann sein, was immer Sie wollen) -input-charset iso8859-1
setzt den verwendeten Zeichensatz. Ändere es nicht -o myos.iso
sagt, dass das ISO Bild in der Datei myos.iso
ausgegeben wird
-b floppy.img
sagt, dass unsere ISO bootfähig sein wird und das verwendete Boot-Image die Datei floppy.img
ist
-hide floppy.img
wird nicht benötigt, aber es versteckt das Boot-Image aus der endgültigen ISO-Verzeichnisliste. Wenn Sie diese ISO mounten und ein ls
ausführen würden, um die Dateien aufzulisten, wird floppy.img
nicht angezeigt. iso/
am Ende des Befehls ist das Verzeichnis, aus dem das ISO Bild erstellt wird. Es muss mindestens unser bootfähiges Disketten-Image enthalten, aber Sie können beliebige andere Dateien in das iso/
-Verzeichnis stellen. Das ISO Bild myos.iso
, das generiert wurde, kann gebootet werden. Ein Beispiel für die Verwendung von QEMU zum Starten eines solchen Bildes:
Für CD; Es gibt eine Spezifikation ("El Torito"), die beschreibt, wie bootfähige CDs funktionieren. Wo die ersten 16 (2048 Byte) Sektoren unbenutzt sind, gibt es einen "Boot-Katalog", den die Firmware verwendet, um zu entscheiden, welchen Bootloader sie verwenden soll (damit Sie eine einzelne CD haben können, die sehr unterschiedliche Systeme bootet - zB PC BIOS, UEFI) , PowerPC, etc), dann die Bootloader selbst.
Für "PC BIOS" allein gibt es 3 Möglichkeiten:
Die ersten beiden Optionen sind meistens nur für kompatible Zwecke (krustige alte Betriebssysteme, die das Booten von CDs nicht unterstützen, wie MS-DOS); und Leistungsaspekte haben (z. B. um das Laden eines virtuellen 512-Byte-Sektors zu emulieren, muss die Firmware einen echten 2048-Byte-Sektor laden und die überschüssigen 1536 Bytes wegwerfen). Jedes OS, das in den letzten 15 Jahren entwickelt / geschrieben wurde, sollte "keine Emulation" verwenden.
Für "keine Emulation":
Beachten Sie auch, dass (im Allgemeinen) für "PC BIOS" wahrscheinlich 5 verschiedene Bootloader benötigt werden (einer für Diskettenlaufwerk, einer für "MBR partitionierte" Festplatte, einer für "GPT partitionierte" Festplatte) für CD und eine für Netzwerkstart). Diese Fälle sind alle unterschiedlich genug (und die Beschränkung "nur 512 Byte initial sector only" für 3 dieser Fälle ist restriktiv genug), um die Idee "alle von einem Bootloader unterstützten Geräte" zu einem Desaster zu machen.
Um tatsächlich die ISO zu generieren; Sie können ein existierendes Werkzeug (zB mkisofs) verwenden, oder Sie können Ihr eigenes Werkzeug schreiben (ISO9660 und "El Torito" sind beide relativ einfach zu verstehen, und das Schreiben Ihres eigenen Werkzeugs zur Erstellung einer ISO kann in weniger als 2 Tagen erledigt werden, das ist wie ein Tropfen auf den heißen Stein für OS - Entwicklungsprojekte).