Bootloader Fat32 USB-Stick Real/Protection Mode



  • Hallo,
    Ich bin gerade dabei den Bootloader aus Teil 3 von PrettyOS

    First Stage Bootloader
    Second Stage Bootloader

    so 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 Bootloader

    Ich 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 ausrechnen

    FAT32 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 erkennt

    FAT32
    Freier Cluster 0000000016
    Defekter Cluster 0FFFFFF716
    letzter Cluster einer Clusterkette 0FFFFFF816…0FFFFFFF16
    sonstiger Cluster einer Clusterkette 0000000216 ≤ X ≤ 0FFFFFF616

    Bei 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 🙂


Anmelden zum Antworten