[fat] Obsługa systemu plików

0

Witam!
Można powiedzieć że weekend był całkiem udany, chodź nie do końca :-)
Udało mi się napisać obsługę kart sd/mmc, problem pojawił się z systemem plików.
Odczytałem pierwsze 512B z karty 16MB sformatowanej w systemie plików FAT(chyba 16 bo nie pisało w windowsie [glowa] ).
Tak wyglądają te dane:
user image
Naczytałem się już opisów o strukturach fatów i tych bajtów nie moge dopasować, jakieś tu mam dziwne wartości(ilość bajtów na sektor itp). Nie moge też znaleźć punktu, przy którym mógłbym zidentyfikować czy to Fat16/32 czy jeszcze coś innego.
http://www.microsoft.com/whdc/system/platform/firmware/fatgendown.mspx
Postępować zgodnie z opisem microsofta? Bo coś nie mam zaufania do tej firmy.
Jak to czytać? Co to za system plików?

0
Pawells napisał(a)

Postępować zgodnie z opisem microsofta? Bo coś nie mam zaufania do tej firmy.

Dokumentacja FAT Microsoftu jest bardzo dobrze i zrozumiale napisana. Jednak wydaje mi się, że do szczęścia potrzeba ci jeszcze tego:
http://www.ata-atapi.com/hiwmbr.htm

0

Wszystko fajnie, już napisałem funkcję odczytującą zawartość dysku(fat32).
Problem jest z zlokalizowaniem treści pliku/katalogu.
Odczytuję z pierwszego sektoru adres do pierwszej partycji i przyjmuję ją domyślnie jako pierwszy sektor(aby uprościć sobie odczytywanie z pierwszej partycji).
FirstDataSector = Rsvd + (NumFATS * FATSz).
U mnie występują takie wartości
Rsvd = 36(Zarezerwowane sektory)
NumFATS = 2
FATSz = 954
I pod adresem "FirstDataSector" znajdują się nagłówki katalogów plików.
Szukam pliku o nazwie "PLIK TXT" i odczytuje jego "cluster number" (HI = 0, LO = 0x0D).
I teraz niby mam pozycję tekstu który znajduje się w PLIK.TXT.
Wyczytuje z różnych opisów że to jest: DataSector = FirstDataSector + (Adres_pliku - 2)*SecPerClus.
Lecz treść pliku znajduję się w F8C00h bajcie czyli w 1990 sektorze(od początku partycji oczywiście).
Jak to sie liczy? Bo już zaczynam wymyślać wzory, szukać w opisach, ale jakoś nie opisują, nie podają przykładów.

0

Nie wiem z jakiej dokumentacji to wyczytałeś.

http://staff.washington.edu/dittrich/misc/fatgen103.pdf
Tutaj masz na stronie 13-14.

FirstSectorofCluster = ((N – 2) * BPB_SecPerClus) + FirstDataSector
FirstDataSector = BPB_ResvdSecCnt + (BPB_NumFATs * FATSz) + RootDirSectors

1 użytkowników online, w tym zalogowanych: 0, gości: 1