Eigener Bootloader — Änderungen 7463 → 7464

Zeile 29: Zeile 29:
  
 
Manch einer würde hier jetzt die Frage stellen, ob es wirklich sinnvoll ist, auch den MBR zu entwickeln. Wie schon anfangs erwähnt, wollen wir den Bootloader im Detail verstehen können, also machen wir keine halben Sachen. Dennoch, ganz so verkehrt ist die Frage allerdings nicht, denn meine Disketten haben für gewöhnlich keinen MBR.
 
Manch einer würde hier jetzt die Frage stellen, ob es wirklich sinnvoll ist, auch den MBR zu entwickeln. Wie schon anfangs erwähnt, wollen wir den Bootloader im Detail verstehen können, also machen wir keine halben Sachen. Dennoch, ganz so verkehrt ist die Frage allerdings nicht, denn meine Disketten haben für gewöhnlich keinen MBR.
 +
  
 
===Stage 0: Master-Boot-Record===
 
===Stage 0: Master-Boot-Record===
Zeile 108: Zeile 109:
  
  
 +
===Stage 1: Bootsektor===
 +
Wie schon am MBR gesehen ist das Programmieren eines Bootsektors nicht so schwer, zumindest wenn es so einfach ist wie ein "Hello World!" auszugeben oder wie beim MBR den Bootsektor einer aktiven Partition zu laden und zu starten.
 +
 +
Der Bootsektor einer Partition, genauergenommen eines Dateisystem, ist da schon weitaus komplexer, da wir zum einen nicht nur einen Sektor laden müssen, sondern gleich eine ganze Datei. Diese muss allerdings im Dateisystem gesucht werden, und und und ...
 +
 +
Aber vereinfachen wir das ganze, damit ein Modell für alle Dateisystem (egal ob FAT, NTFS, ISO9660, ext2/3 oder gar ein eigenes) benutzbar ist.
 +
 +
# Suche im Hauptverzeichnis nach einer bestimmten Datei, bspw. "bootload.bin".
 +
# Ermittle deren Position auf dem Datenträger, also alle zur Datei gehörenden Sektoren.
 +
# Lade die Datei ins RAM und starte diese.
 +
 +
Schon im ersten Punkt unterscheidet sich der Bootsektor für jedes Dateisystem, da dessen Verzeichnisse unterschiedlich organisiert sind.
 +
 +
Ein zweites Problem, das auf uns zukommen wird, dass die 512 Bytes abzüglich des Boot-Parameter-Block (kurz BPB) nicht ausreichen werden. Was also tun?
 +
 +
FAT bietet die Möglichkeit, zusätzlichen Code hinter den Bootsektor zu heften und diesen zu den reservierten Sektoren einreiht. Allerdings müsste dann neu formatiert werden, zumidest bei FAT12 und FAT16. Bei FAT32 hat man dieses Problem berücksichtig.
 +
 +
Eine andere Alternative wäre, das man diesen zusätzlichen Code in den Bootloader verfrachtet, gleich an den Anfang, denn dieser wird ja eh vom Bootsektor geladen.
 +
 +
Aber treten wir erst einmal wieder etwas auf die Bremse und fangen mal mit FAT12 an. Da FAT16 bis auf die Adressbreite der Clusteradressierung identisch ist, nehmen wir es gleich mit an Bord.
 +
 +
 +
====FAT12 / FAT16====
 +
:''(Ist in Arbeit)''
 +
 +
 +
====FAT32====
 +
:''(Demnächst)''
 +
 +
 +
===Stage 2: Bootloader===
 +
:''(Demnächst)''
 +
 +
 +
----
 
{{Hinweis|Text=Der folgende Text enthält noch den ursprünglichen Artikel.}}
 
{{Hinweis|Text=Der folgende Text enthält noch den ursprünglichen Artikel.}}
 
==Tools==
 
==Tools==