Bootloader Fat32 USB-Stick Real/Protection Mode
-
Hallo,
Ich bin gerade dabei den Bootloader aus Teil 3 von PrettyOSFirst Stage Bootloader
Second Stage Bootloaderso umprogrammieren dass er Fat32 kann und von einem USB Stick läuft.
Ich bin schonn so weit aber, wass muss ich noch umändern (die Sectorengröße oder die Cluster)
;Code ASM:
%ifndef FAT32
%define FAT32[BITS 16]
; "FAT 32" file system is build up by four areas at USB Sticks:
OperatingSystemName db " PRETTY " ; 8 byte
BytesPerSec dw 512
SecPerClus db 1
ReservedSec dw 1
NumFATs db 2
RootEntries dw 224
TotSec dw 2880
MediaType db 0xF0
FATSize dw 9
SecPerTrack dw 18
NumHeads dw 2
HiddenSec dd 0
TotSec32 dd 2 ; 0 = FAT12, 1 = FAT16, 2 = FAT32
DriveNum db 0
Reserved db 0
BootSig db 0x29
VolumeSerialNum dd 0xD00FC0DE
VolumeLabel db "PRETTY OS " ; 11 byte
FileSys db "FAT32 " ; 8 byte%endif
Was muss ich noch umändern im First Stage Bootloader b.z.w im
Second Stage BootloaderIch weiß jetzt auch, dass man bei FAT32 das Rootverzeichnis frei positioniert werden kann. Aber wie??
Danke im V o r r a u s
-
Unterschiede zwischen Fat12 und Fat32
quelle http://de.wikipedia.org/wiki/File_Allocation_Table
Unterschideliche gro?e Fat Tabelle
Fat32 hat 28-bit binary Cluster und 4 bits sind "reserved"
Fat32 maximale Clusteranzahl = 268.435.456
Fat32 Clustergröße 4 KB bis 32 KB nicht 512 Bit ???Offset 10 Anzahl der FAT-Kopien FAT32 = 2 FAT16 abwärts = 1
Offset 11 Maximale Anzahl an Verzeichniseinträgen im Stammverzeichnis (Ungenutzt bei FAT32 und stets 0000hex)
Offset 13 Gesamtsektoranzahl des Mediums (max. 65535, bei größeren Medien ist dieser Wert 0 und der eigentliche Wert steht als 4-Byte-Wert an Offset 20hex. !! Bei FAT32 stets ungenutzt !!
Offset 16 Anzahl der Sektoren pro FAT. (Bei FAT32 ungenutzt und stets 0000hex, siehe Offset 24hex.)Offset 18 Sektoren pro Spur AUCH BEI USB ??
Offset 1A Anzahl der Seiten bzw. Schreib-Lese-Köpfe AUCH BEI USB ??Offset 1C Anzahl der „versteckten“ Sektoren vor dem Bootsektor. Bei Festplatten ist das die Anzahl der Sektoren zwischen Master Boot Record und dem Bootsektor der Partition. Bei nicht partitionierten Medien (ohne MBR) stets 0.
Offset 20 Gesamtsektoranzahl, falls größer als 65535 Bei 4GB noch ausrechnenFAT32 benutzt eine davon abweichende Struktur ab Offset 24hex:
Offset Länge (in Byte) Inhalt
24 4 Anzahl der Sektoren pro FAT
28 2 FAT Flags
2A 2 FAT-32-Version. Bei Microsoft stets 0000hex. (optional 0001hex für FATplus)
2C 4 Clusternummer, an der das Stammverzeichnis beginnt. Meistens 2.
30 2 Sektornummer des „FS Information Sector“ (In der Regel: 1)
32 2 Sektornummer der Bootsektorkopie (in der Regel: 6; Microsoft empfiehlt, keinen anderen Wert zu benutzen)
34 12 reserviert für spätere Erweiterungen, derzeit stets 0
40 1 Physische BIOS-Laufwerksnummer
41 1 Reserviert
42 1 Erweiterte Bootsignatur
43 4 Dateisystem-ID (Seriennummer)
47 11 Name des Dateisystems (ungenutzt)
52 8 FAT-Version. Stets "FAT32 "
5A 420 x86-Maschinencode des Bootloaders
1FE 2 BIOS-Bootsektorsignatur. Enthält die beiden Werte 55hex AAhex, anhand derer das BIOS beim Booten einen gültigen Bootsektor erkenntFAT32
Freier Cluster 0000000016
Defekter Cluster 0FFFFFF716
letzter Cluster einer Clusterkette 0FFFFFF816…0FFFFFFF16
sonstiger Cluster einer Clusterkette 0000000216 ≤ X ≤ 0FFFFFF616Bei FAT32 hat das Stammverzeichnis eine variable Größe und kann an einer beliebigen Position des Datenbereichs beginnen.
Es kann maximal ein Bereich von 2hoch15 · 2hoch28 = 2hoch43 Byte adressiert werden.
maximal 2hoch28 Dateien.
Media Descriptor Byte ist doch nur bei Diskette ?BL2 --> Protection mode --> Kernel laden
-
Wie setze ich dieß in die Tat um?
-
-
Danke dann, gleich mal ausprobieren und Weiterprogrammieren