Eigener Bootloader — Änderungen 7510 → 7511

Zeile 13: Zeile 13:
  
 
Ausgangspunkt ist, dass das [[BIOS]] bereits den ersten Sektor von unserem Datenträger geladen hat und nach einer Überprüfung der Signatur (0x0AA55) die Kontrolle an diesem abgibt. Man beachte, das der erste Sektor bei Festplatten für gewöhnlich der [[Master Boot Record]] ist und auf dem ebenfalls eingegangen wird, bzw. die Vorgehensweise erläutert.
 
Ausgangspunkt ist, dass das [[BIOS]] bereits den ersten Sektor von unserem Datenträger geladen hat und nach einer Überprüfung der Signatur (0x0AA55) die Kontrolle an diesem abgibt. Man beachte, das der erste Sektor bei Festplatten für gewöhnlich der [[Master Boot Record]] ist und auf dem ebenfalls eingegangen wird, bzw. die Vorgehensweise erläutert.
−
Das erste Problem, auf das man stoßen wird, ist, dass der Binärcode des Bootsektors die Größe eines Sektors nicht überschreiten darf. OK, zugegeben, bei der CD mit ihren 2048 Bytes pro Sektor und deren Dateisystem langt dieser. Auch zukünftige Festplatten mit einer physikalischen Sektorgröße von 4096 Bytes mögen dem entgegen wirken. Aber bei der Diskette, die viele am Anfang verwenden, beträgt die Sektorgröße lediglich 512 Byte. Unser Ziel ist aber keineswegs für jedes Dateisystem einen eigenen Bootloader (ausschließlich dem Bootsektor) zu entwickeln, sondern viel mehr ein universelles Modell auf die Beine zu stellen, bei dem nur der Bootsektor individuell dem Dateisystem vorliegt und der Bootloader (Binärdatei) für alle unterstützten Dateisystemen gleich bleibt.
+
 
 +
Das erste Problem, auf das man stoßen wird, ist, dass der Binärcode des Bootsektors die Größe eines Sektors (typische 512 Bytes bei Diskette, Festplatten und Flash-Storages) je nach Komplexität des Dateisystem überschreiten könnte, dies aber im Idealfall jedoch nicht sollte. OK, zugegeben, bei der CD mit ihren 2048 Bytes pro Sektor und deren Dateisystem langt dieser. Auch zukünftige Festplatten mit einer physikalischen Sektorgröße von 4096 Bytes mögen dem entgegen wirken. Unser Ziel ist aber keineswegs für jedes Dateisystem einen eigenen Bootloader (ausschließlich dem Bootsektor) zu entwickeln, sondern viel mehr ein universelles Modell auf die Beine zu stellen, bei dem nur der Bootsektor individuell dem Dateisystem vorliegt und der Bootloader (Binärdatei) für alle unterstützten Dateisystemen gleich bleibt.
  
  
Zeile 109: Zeile 110:
 
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 ...
 
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.
+
Aber vereinfachen wir das ganze, damit ein Modell für alle Dateisysteme (egal ob [[FAT]], [[NTFS]], [[ISO9660]], [[Ext2]]/[[Ext3]] oder gar ein eigenes wie [[ROFS]] von [[AiCOS]]) benutzbar ist.
  
 
# Suche im Hauptverzeichnis nach einer bestimmten Datei, bspw. "bootload.bin".
 
# Suche im Hauptverzeichnis nach einer bestimmten Datei, bspw. "bootload.bin".
−
# Ermittle deren Position auf dem Datenträger, also alle zur Datei gehörenden Sektoren.
+
# Ermittle deren Position auf dem Datenträger, d.h. alle zur Datei gehörenden Sektoren.
 
# Lade die Datei ins RAM und starte diese.
 
# Lade die Datei ins RAM und starte diese.