FATFS文件系统详解(三)

电子说

1.3w人已加入

描述

5.3 根目录区分析

注意,根目录区只有 FAT12 / FAT16 系统上存在,在FAT32系统上不存在此区域。

根目录区用来记录根目录下的文件内容,根据 4.3 章节计算可知,根目录区起始地址为:==0x3C000==,大小为==0x4000==,数据内容如下:

SFN

以下是对数据字段进行分析后的内容,如下图所示:

SFN

格式化之后,默认会生成一个System Volume Infomation的系统文件夹,同时此文件夹是根目录下唯一的一个文件,因此在根目录的数据如上图所示。

此文件夹为目录属性,是隐藏的系统目录

长文件名为System Volume Information,短文件名为SYSTEM~1

==此目录指向存放的数据在2号簇(对应数据区第一个簇),文件大小字段,由于此文件为目录属性,此字段无意义,因此强制为0==

至此,根目录区分析完了,同时根目录区的 System Volume Information文件指向数据区第一个簇(2号簇),接下来我们便进入数据区进行分析。

5.4 数据区分析

根据 4.3 章节计算可知,数据区起始地址为:0x40000,大小为242176 * 512 = 0x764 0000,数据内容如下:

SFN

对应数据字段分析如下:

SFN

System Volume Information 目录下存在两个文件,分别是IndexerVolumeGuid 和 WPSettings.dat。根据上述分析可知:

IndexerVolumeGuid文件的数据存放在 FAT[3],3号簇上,即数据区的第3个簇(数据区的第1个簇为2号簇);

WPSettings.dat 文件的数据存放在 FAT[4],4号簇上,即数据区的第2个簇(数据区的第1个簇为2号簇);

首先,我们跳转到4号簇上查看IndexerVolumeGuid的数据,对应地址计算方式为:

FirstSectorofCluster = DataStartSector + (N - 2) BPB_SecPerClus = 512 + (4 - 2) 4

= 520;

对应地址为: FirstSectorofCluster BPB_BytsPerSec = 520 512 = 0x0004 1000

SFN

接着跳转到3号簇上查看WPSettings.dat的数据,对应地址计算方式为:

FirstSectorofCluster = DataStartSector + (N - 2) BPB_SecPerClus = 512 + (3 - 2) 4

= 516;

对应地址为: FirstSectorofCluster BPB_BytsPerSec = 520 512 = 0x0004 0800

SFN

5.5 新增文件测试

在根目录下新增 test 目录,使用winhex更新磁盘数据,观察各数据区变化

保留区无变化

FAT区变化如下:

SFN

根目录区变化如下:

SFN

数据区变化:

SFN

新增long file test文件夹,里面存入一个 ==长度为 2050 Byte(占据两个簇的空间)== 的test.txt文件,使用winhex重新打开磁盘进行分析。

SFN

保留区无变化

FAT区变化如下:

SFN

根目录区变化如下:

SFN

数据区变化如下:

long file test 目录数据指向6号簇,跳转至6号簇,地址 DataStartSector + (N - 2) * BPB_SecPerClus = 0x40000 + (6-2) * 4 * 512 = 0x420000

SFN

test.txt 文件指向 7号簇,跳转至7号簇,地址 DataStartSector + (N - 2) * BPB_SecPerClus = 0x40000 + (7-2) * 4 * 512 = 0x428000,均为test.txt的实际有效数据,如下:

SFN

  1. 总结

    以上便是关于FAT文件系统的全部分析了,通过上述分析,外加新增文件辅助理解,对于文件在FAT文件系统下如何管理、存储,相信已经有了非常深入的了解。

FAT文件系统分为四个区:

保留区最重要的是里面包含引导扇区,引导扇区内存放着BIOS参数信息,通过此参数可以知道FAT文件系统的flash布局,以及flash大小,fat块大小、簇大小等关键信息;

FAT区,记录了文件所占用簇的情况,以及对于文件大小大于一个簇的文件,在FAT区内形成簇链,记录文件由哪几个簇组成

根目录区,只有FAT12/16系统所有,记录了根目录下的文件/目录条目信息

数据区,记录数据分为两个部分,第一部分为目录信息,除根目录外,每个文件夹需要占据一个及以上的簇描述对应目录下的文件情况;第二部分为具体文件数据。两部分数据通过短文件名SFN字段进行关联!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分