5.3 根目錄區(qū)分析
注意,根目錄區(qū)只有 FAT12 / FAT16 系統(tǒng)上存在,在FAT32系統(tǒng)上不存在此區(qū)域。
根目錄區(qū)用來記錄根目錄下的文件內(nèi)容,根據(jù) 4.3 章節(jié)計(jì)算可知,根目錄區(qū)起始地址為:==0x3C000==,大小為==0x4000==,數(shù)據(jù)內(nèi)容如下:
以下是對數(shù)據(jù)字段進(jìn)行分析后的內(nèi)容,如下圖所示:
格式化之后,默認(rèn)會(huì)生成一個(gè)System Volume Infomation的系統(tǒng)文件夾,同時(shí)此文件夾是根目錄下唯一的一個(gè)文件,因此在根目錄的數(shù)據(jù)如上圖所示。
此文件夾為目錄屬性,是隱藏的系統(tǒng)目錄
長文件名為System Volume Information,短文件名為SYSTEM~1
==此目錄指向存放的數(shù)據(jù)在2號簇(對應(yīng)數(shù)據(jù)區(qū)第一個(gè)簇),文件大小字段,由于此文件為目錄屬性,此字段無意義,因此強(qiáng)制為0==
至此,根目錄區(qū)分析完了,同時(shí)根目錄區(qū)的 System Volume Information文件指向數(shù)據(jù)區(qū)第一個(gè)簇(2號簇),接下來我們便進(jìn)入數(shù)據(jù)區(qū)進(jìn)行分析。
5.4 數(shù)據(jù)區(qū)分析
根據(jù) 4.3 章節(jié)計(jì)算可知,數(shù)據(jù)區(qū)起始地址為:0x40000,大小為242176 * 512 = 0x764 0000,數(shù)據(jù)內(nèi)容如下:
對應(yīng)數(shù)據(jù)字段分析如下:
System Volume Information 目錄下存在兩個(gè)文件,分別是IndexerVolumeGuid 和 WPSettings.dat。根據(jù)上述分析可知:
IndexerVolumeGuid文件的數(shù)據(jù)存放在 FAT[3],3號簇上,即數(shù)據(jù)區(qū)的第3個(gè)簇(數(shù)據(jù)區(qū)的第1個(gè)簇為2號簇);
WPSettings.dat 文件的數(shù)據(jù)存放在 FAT[4],4號簇上,即數(shù)據(jù)區(qū)的第2個(gè)簇(數(shù)據(jù)區(qū)的第1個(gè)簇為2號簇);
首先,我們跳轉(zhuǎn)到4號簇上查看IndexerVolumeGuid的數(shù)據(jù),對應(yīng)地址計(jì)算方式為:
FirstSectorofCluster = DataStartSector + (N - 2) BPB_SecPerClus = 512 + (4 - 2) 4
= 520;
對應(yīng)地址為: FirstSectorofCluster BPB_BytsPerSec = 520 512 = 0x0004 1000
接著跳轉(zhuǎn)到3號簇上查看WPSettings.dat的數(shù)據(jù),對應(yīng)地址計(jì)算方式為:
FirstSectorofCluster = DataStartSector + (N - 2) BPB_SecPerClus = 512 + (3 - 2) 4
= 516;
對應(yīng)地址為: FirstSectorofCluster BPB_BytsPerSec = 520 512 = 0x0004 0800
5.5 新增文件測試
在根目錄下新增 test 目錄,使用winhex更新磁盤數(shù)據(jù),觀察各數(shù)據(jù)區(qū)變化
保留區(qū)無變化
FAT區(qū)變化如下:
根目錄區(qū)變化如下:
數(shù)據(jù)區(qū)變化:
新增long file test文件夾,里面存入一個(gè) ==長度為 2050 Byte(占據(jù)兩個(gè)簇的空間)== 的test.txt文件,使用winhex重新打開磁盤進(jìn)行分析。
保留區(qū)無變化
FAT區(qū)變化如下:
根目錄區(qū)變化如下:
數(shù)據(jù)區(qū)變化如下:
long file test 目錄數(shù)據(jù)指向6號簇,跳轉(zhuǎn)至6號簇,地址 DataStartSector + (N - 2) * BPB_SecPerClus = 0x40000 + (6-2) * 4 * 512 = 0x420000
test.txt 文件指向 7號簇,跳轉(zhuǎn)至7號簇,地址 DataStartSector + (N - 2) * BPB_SecPerClus = 0x40000 + (7-2) * 4 * 512 = 0x428000,均為test.txt的實(shí)際有效數(shù)據(jù),如下:
-
總結(jié)
以上便是關(guān)于FAT文件系統(tǒng)的全部分析了,通過上述分析,外加新增文件輔助理解,對于文件在FAT文件系統(tǒng)下如何管理、存儲(chǔ),相信已經(jīng)有了非常深入的了解。
FAT文件系統(tǒng)分為四個(gè)區(qū):
保留區(qū)最重要的是里面包含引導(dǎo)扇區(qū),引導(dǎo)扇區(qū)內(nèi)存放著BIOS參數(shù)信息,通過此參數(shù)可以知道FAT文件系統(tǒng)的flash布局,以及flash大小,fat塊大小、簇大小等關(guān)鍵信息;
FAT區(qū),記錄了文件所占用簇的情況,以及對于文件大小大于一個(gè)簇的文件,在FAT區(qū)內(nèi)形成簇鏈,記錄文件由哪幾個(gè)簇組成
根目錄區(qū),只有FAT12/16系統(tǒng)所有,記錄了根目錄下的文件/目錄條目信息
數(shù)據(jù)區(qū),記錄數(shù)據(jù)分為兩個(gè)部分,第一部分為目錄信息,除根目錄外,每個(gè)文件夾需要占據(jù)一個(gè)及以上的簇描述對應(yīng)目錄下的文件情況;第二部分為具體文件數(shù)據(jù)。兩部分?jǐn)?shù)據(jù)通過短文件名SFN字段進(jìn)行關(guān)聯(lián)!
-
SFN
+關(guān)注
關(guān)注
0文章
5瀏覽量
9117 -
fat32文件系統(tǒng)
+關(guān)注
關(guān)注
0文章
7瀏覽量
6830 -
FAT12
+關(guān)注
關(guān)注
0文章
2瀏覽量
1791
發(fā)布評論請先 登錄
FATFS文件系統(tǒng)移植

STM32CubeMx入門教程(10):Fatfs文件系統(tǒng)的應(yīng)用

FATFS文件系統(tǒng)移植
FATFS文件系統(tǒng)簡介
FatFs文件系統(tǒng)的原理是什么?如何對FATFS進(jìn)行移植?
基于SD卡的FATFS文件系統(tǒng)的研究與應(yīng)用_崔鵬偉
《Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第5章、Linux文件系統(tǒng)與設(shè)備文件系統(tǒng)

CH579 SPIFLASH W25Q64 FATFS文件系統(tǒng)

Fatfs(文件系統(tǒng)的移植)

FATFS文件系統(tǒng)詳解

【文件系統(tǒng)】FatFs文件系統(tǒng)在嵌入式芯片LPC18XX上的移植

文件系統(tǒng)FatFs的移植

評論