FatFs文件系统结构分析(强烈推荐) |
您所在的位置:网站首页 › fs是什么文件夹 › FatFs文件系统结构分析(强烈推荐) |
前面的文章介绍了 SMT32H743 驱动 eMMC 移植 FatFs 文件,在初始化的时候例化为 FAT32 文件系统,接下来就详细分析一下 FAT32 文件系统的结构,尤其是如何定位 FAT32 文件系统的 FAT 表项和根目录。 一、基本概念先来明确几个概念。 1.1 物理地址和逻辑地址物理地址就是存储单元的绝对地址,逻辑地址往往是物理地址基础上加一个偏移量,即逻辑地址零 = 物理地址零 + 偏移。 1.2 MBR 和 DBRMBR:英语全称是 Master Boot Record,即主引导记录。 DBR:英语全称是 Dos Boot Record,即 DOS 引导记录,也称为操作系统引导记录。 1.3 扇区和簇一个扇区一般分为 512 字节、1024 字节、2048 字节和 4096 字节。 一个簇一般包含 1、2、4、8、16、32、64 和 128 个扇区。 二、FAT32 文件系统的结构先从整体上把握 FAT32 文件系统的结构,如图 1 所示。 ![]() 从上图可以看出,FAT32 文件系统结构由隐藏扇区(MBR 等)、保留扇区(DBR 等)、FAT 和数据区等几个部分组成,下面就详细分析一下各个部分的实际意义。 2.1 MBR 分析已格式化为 FAT32 格式后,从物理地址零开始的 512 个字节是 MBR(Master Boot Record),即主引导记录。其中的前 446 个字节为引导代码,我们这里不做详解。接下来的 64 个字节为分区表,其中 16 个字节为一组总共四组,每一个组都描述了一个分区,最后两个字节为固定的末尾签名,0x55、0xAA。如图 2 所示。 ![]() 图 2 中,从物理地址的 0x0000 至 0x01BD 的 446 字节为引导代码,从 0x01BE 至 0x01CD 的 16 字节指示了一个分区(黑色框),其中,0x01C6 至 0x01C9 的 4 字节指示了逻辑扇区 0 的位置(红色框),也就是 DBR 的位置,在物理扇区 0x0000 003F 处。 接下来看 DBR 的内容。 2.2 DBR 分析DBR 部分由跳转指令、OEM ID、BPB(BIOS 参数)、拓展 BPB、引导程序和结束标志组成,如图 3 所示。 ![]() 拓展 BPB 参数如下: 字节位移字段长度(字节)图 3 对应取值字段名称和定义0x4010x80物理驱动器号( Physical Drive Number) ,与 BIOS 物理驱动器号有关。软盘驱动器被标识为 0x00,物理硬盘被标识为 0x80,而与物理磁盘驱动器无关。一般地,在发出一个 INT13h BIOS 调用之前设置该值,具体指定所访问的设备。只有当该设备是一个引导设备时,这个值才有意义。0x4110x00保留(Reserved)。FAT32 分区总是将本字段的值设置为 0。0x4210x29扩展引导标签(Extended Boot Signature)。本字段必须要有能被 Windows 2000 所识别的值 0x28 或 0x29。0x4340x00000000分区序号(Volume Serial Number)。在格式化磁盘时所产生的一个随机序号,它有助于区分磁盘。0x4711“NO NAME”卷标(Volume Label)。本字段只能使用一次,它被用来保存卷标号。现在,卷标被作为一个特殊文件保存在根目录中。0x528“FAT32”系统 ID(System ID)。FAT32 文件系统中一般取为”FAT32”。表 2 FAT32 分区的扩展 BPB 字段可以通过上述定义分析各个字段的含义,也可以通过 WinHex 中直接查看(逻辑分区–>右键–>模板),如图 4 所示。 ![]() FAT32 文件系统在 DBR 的保留扇区中安排了一个文件系统信息扇区,用以记录数据区中空闲簇的数量及下一个空闲簇的簇号,该扇区一般在分区的 1 号扇区,也就是紧跟着 DBR 后的一个扇区,其内容如图 5 所示。 ![]() 各字段的含义如下: 52 52 61 41:拓展引导标签;接下来 480 字节未使用,如果安装了操作系统在这个分区上的话应该是有用的;72 72 41 61:文件系统信息签名;0 01 D1 E9:空闲簇数,约为 3.64GB;00 00 00 08:下一个空闲簇号;接下来的 14 个字节:未用;55 AA:结束标志; 2.4 FAT 表根据 2.2 小结里面的分析,DBR 引导扇区之后会有一段保留扇区(包括 DBR 引导扇区),保留扇区数(Reserved Sector) 为 0x20(表 1 中 0x0E 字段),所以第一个 FAT 的物理扇区为: 第一个 FAT 的物理扇区 = DBR 所在位置+保留扇区数 = 0x3F + 0x20 = 0x5F 跳转到第一个 FAT 的物理扇区,如图 6 所示。 ![]() FAT 表项编号从 0 开始,编号 0 表示 FAT 介质类型,编号 1 表示 FAT 文件系统错误标志,这两个表项均不与实际的物理地址对应。 从 FAT 表项编号 2 开始为数据区表项,这里开始才与物理地址对应。其中,2 号表项往往是根目录(格式化就生成了),占簇区顺序上的第 1 个簇(即 2 号簇),这也可以从表 1 中 0x2C 字段确认。 接下来,3~7 号表项为磁盘中存储的文件,共 5 个文件,每个文件都比较小,各自占用了 1 个簇。文件至少占用一个簇,所以新建文件的时候,即使你只写入 1 字节的数据,它也会占用一个簇的空间。如果是存储的大文件,则会占用多个簇,当前 FAT 表项纪录下一个 FAT 表项编号,依次类推直到最后以“0F FF FF FF“表示文件末尾。 2.5 数据区同样,根据 2.2 小节的表格,FAT 数为 1(表 1 中 0x10 字段),所以本例中没有 FAT2,那么接下来就是数据区,先来定位数据区的物理扇区。 数据区的物理扇区 = 第一个 FAT 的物理扇区 + FAT 扇区数(表 1 中 0x24 字段) = 0x5F + 0x0000 03A5 = 0x0000 0404 跳转到数据区,如图 7 所示。 ![]() 图中对应 2 号 FAT 表项,也就是根目录区。根目录区,共有 5 个文件,其中上下红框处为自定义的 2 个文件。 为了弄清楚根目录下文件各字段的含义,先看一下 FAT32 短目录项的定义,短目录项就是文件名长 8 位、后缀为 3 位的文件,更长的文件名需要长文件名,后续再说。FAT32 短文件目录项定义如下: 字节偏移(16 进制)字节数定义0x0~0x78文件名0x8~0xA3扩展名0xB*1属性字节:00000000(读写)00000001(只读)00000010(隐藏)00000100(系统)00001000(卷标)00010000(子目录)00100000(归档)0xC1系统保留0xD1创建时间的 10 毫秒位0xE~0xF2文件创建时间0x10~0x112文件创建日期0x12~0x132文件最后访问日期0x14~0x152文件起始簇号的高 16 位0x16~0x172文件的最近修改时间0x18~0x192文件的最近修改日期0x1A~0x1B2文件起始簇号的低 16 位0x1C~0x1F4表示文件的长度表 3 FAT32 短文件目录项 32 个字节的表示定义因为 FAT32 使用 4 个字节表示文件或目录大小,因此当文件或目录大于 4Gb 时将会溢出,做截断处理。 FAT32 文件系统分区根目录的文件和目录都存放在根目录区中,子目录文件和文件夹存放在子目录区中,以 32 字节为一项存放目录项(FDT)。 结合图 7 中 0x000808C0~0x000808DF 地址,对照表 3 解释一下各字段的含义: (1)目录项 0x00~0x07 为文件名“123”,0x08~0x0A 为扩展名“txt”,0x0B 处值为 20,表示的是文件。 (2)目录项 0x0E~0x0F 为文件创建时间:0x5E75 = 0b 0101 1110 0111 0101 –> 01011(11) 110011(51) 10101(21*2) = 11:51:42,即 11 点 51 分 42 秒。 (3)目录项 0x10~0x11 为文件创建日期:0x528C = 0b 0101 0010 1000 1100 –> 0101001(41+1980=2021) 0100(4) 01100(12),即 2021 年 4 月 12 日。 (4)文件起始簇号:0x14~0x15,文件起始簇号的高 16 位;0x1A~0x1B,文件起始簇号的低 16 位,即 0x0000 0007,和 FAT 表项中的占用一致。 (5)文件大小:0x1C~0x1F,即 0x0000 000A,占用 10 字节。 现在打开文件属性看一下,如图 8 所示。 ![]() 可以看出和分析的一致,占用空间为 32KB,因为该文件占用一簇,一簇有 64 扇区,每个扇区 512 字节,共 32KB。 接下来看到第 7 簇看一下该文件的内容,如图 9 所示。 ![]() 也和实际的 123.txt 文件内容一致。 根据上面的分析,抽茧剥丝,从 MBR 到 DBR,再到 FAT,再到目录区,最后找到文件的存储区域,弄清楚了 FAT32 文件系统的结构,后续将结合几个具体的文件操作来进一步理解 FAT32 文件系统。 附件仅博主测试所用,暂不提供下载 扫码关注尚为网微信公众号![]() 原创文章,作者:sunev,如若转载,请注明出处:https://www.sunev.cn/embedded/943.html |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |