Forum: Mikrocontroller und Digitale Elektronik FAT32


von Bruno (Gast)


Lesenswert?

Ich habe nun in letzter Zeit versucht das FAT32 Dateisystem zu
verstehen. Den MBR habe ich nun verstanden. Das Root Verzeichnis
scheint auch klar zu sein.
Nun zu den Problemen: Wie finde ich die Startadresse des
Root-Verzeichnis und die Adresse für die FAT? Für was braucht man die
Fat? Im Root Verzeichnis sin ja alle notwendigen Angaben vorhanden.

Danke für eure Hilfe

von A.K. (Gast)


Lesenswert?

Google so schwierig zu bedienen?
http://home.teleport.com/~brainy/fat32.htm mitsamt Doku vom MS.

von ape (Gast)


Lesenswert?

Ansonsten steht die Adresse des Root-Verzeichnisses im Volume Boot
Record und die Adresse an der die FAT beginnt lässt sich an Hand der
Adresse des VBR und der Anzahl der reserveden Sektoren berechnen.
Bei FAT32 unterscheidet sich das Root-Verzeichnis übrigens nicht mehr
von den normalen Verzeichnisen bis auf den Punkt, das die adresse im
VBR steht. Es gibt aber keine Limitierung mehr auf 512 Einträge.

von Bruno (Gast)


Lesenswert?

Wenn ich schreibe, dass ich die MBR und das Root verzeichniss verstanden
habe, dann scheint es doch danach, dass ich bereits bereits mit Google
diverse Beiträge gelesen habe. Frage mich sowieso, wieso du dir
überhaupt die Mühe machst, da deine Antwort nicht sehr konstruktiv
ist.

Wünsche dir (A.K.) dennoch einen schönen Abend

von A.K. (Gast)


Lesenswert?

Sowohl in der MS Doku als auch den den anderen Stellen steht der Pointer
auf die Rootdir ziemlich explizit drin. Nach Du aber grad danach gefragt
hast, hatte ich gewisse Zweifel, was Du an Material dazu gelesen
hattest. Sorry für die Fehleinschätzung.

von Jochen (Gast)


Lesenswert?

Also die FAT braucht man dazu um immer denn nächsten cluster, der datei
oder des Verzeichnis zu bekommen. D.h. du schaust in die Tabelle unter
dem cluster den du z.b. grad gelesen hast nach ob es noch weiter geht
oder ob es das ende der datei/verzeichnis ist, diese information steht
in der FAT. Meist ist diese zweimal vorhanden, da wenn die FAT im Arsch
ist alle daten weg sind, außer du fängst an puzzel zu spielen

von LameM (Gast)


Lesenswert?

rofl manchmal habe ich so das gefühl, das manche leute sich nicht mal
den 1. beitrag durchlesen :-)


Offset                     Description
Start of Partition          Boot Sector
Start + # of Reserved       Sectors Fat Tables
...

das steht z.b. in der doku (A.K.s link)

also anfang jeder partition + anzahl der reservierten cluster und schon
sollte man bei der 1. FAT sein
achso und das root verzeichnis ist ja als pointer im bootsektor
angegeben

LameM

von Jochen (Gast)


Lesenswert?

@lameM
wenn du mich gemeint hast, hab sehr wohl denn ersten beitrag gelesen da
steht gegen ende
Für was braucht man die Fat?
und das hab ich wohl beantwortet

von Bruno (Gast)


Lesenswert?

Laut Spezifikation müsste der Offset zum Root Verzeichnis an 0x2C
stehen:
Winhex:
00-0F EB 58 90 4D 53 44 4F 53 35 2E 30 00 02 02 22 00
10-1F 02 00 00 00 00 F8 00 00 3F 00 FF 00 20 00 00 00
20-2F E0 D1 03 00 CB 03 00 00 00 00 00 00 02 00 <= 0x0002 Cluster2

FAT32 1024 Byte/Cluster => Root@ 0x800

Stehen aber nur 00 00 drin

von A.K. (Gast)


Lesenswert?

Die Clusternummern sind relativ zum Anfang des Datenbereichs zu
verstehen, wobei Nummer 2 eigentümlicherweise den Anfang bildet. Und wo
der Datenbereich beginnt steht im o.A. Link unter "FAT32 Drive
Layout".

Wenn also die Rootdir an Cluster 2 beginnt, dann ist das der erste
Cluster vom Datenbereich und nicht etwa der dritte Cluster der Platte.
Der Datenbereich beginnt erst hinter den reservierten Sektoren (Offset
0x0E = 0x22) und beiden FATs (Grösse: Offset 0x24 = 0x3CB). Also bei
Sektor (0x22 + 2*0x3CB) = 0x7B8.

von Bruno (Gast)


Lesenswert?

Aha jetzt habe ich begriffen:

Rootdir=(Adr0x0e+(2 * Adr0x24)) * 512Byte=0xF7000
Rootdir=(0x22   +(2 * 0x03CB )) * 512Byte=0xF7000

FAT1   =(Adr0x0e * 512Byte) =0x4400
FAT1   =(0x22 * 512Byte)    =0x4400

FAT2   =((Adr0x0e + Adr0x24) * 512Byte) =0x7DA00
FAT2   =((0x22 + 0x03CB) * 512Byte)      =0x7DA00

Daten  =(Adr0x0e+(2 * Adr0x24) * 512Byte + 1 Cluster=0xF7400
DAten  =(0x22   +(2 * 0x03CB ) * 512Byte + 1 Cluster=0xF7400

:) passt genau danke Dir für deine Hilfe.

Ich glaube jetzt habe ich es verstanden

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.