1.什么是FAT32
FAT32是Windwos系统硬盘格式分区的一种。这种格式采用32位的FAT表(文件分配表),使其对磁盘的管理能力大大增强.FAT32就是FAT表的每一项长度都是32位,所以叫做FAT32。至于每一项存放的内容是什么,下面的内容会慢慢进行分析。
2. FAT32的构成
FAT32 文件系统将逻辑盘的空间划分为三部分,依次是引导区 (BOOT区)、文件分配表区(FAT区)、数据区(DATA区).(MBR不属于FAT32分区)
3. 引导区
先读0号扇区,之后从0号扇区的446字节开始解析,在446+8字节获得引导区DBR的地址(实验中获得的DBR地址是0x2000)
引导区DBR保存了每个扇区的字节数,一个簇的扇区数,FAT表的起始位置,FAT表的个数以及FAT表的扇区数等信息。之后还留有若干保留扇区。以下数据是芯片烧录蓝讯SDK读u盘引导区得到的实验数据
第一次读扇区,获得引导区地址
lba=0x0
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 82
03 00 0C FE FF FF /*00 20*/ 00 00 00 04 B7 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
第二次读扇区,解析引导区内容
lba=0x2000
/*EB 00 90 20 20 20 20 20 20 20 20 00 02 40 92 04 02 00 00 00 00 F8 00 00 3F 00 FF 00 00 20 00 00 00 04 B7 03 B7 1D 00 00 00 00 00 00 02 00 00 00 01 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00
80 00 29 39 33 32 34 4E 4F 20 4E 41 4D 45 20 20 20 20 46 41 54 33 32*/ 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
......
最开始的3字节的数据内容是EB 00 90,
0x03~0x0A这8个字节的数据表示OEM,这里即为“20 20 20 20 20 20 20 20”,用于标识文件系统类型
从0x000B开始的79个字节的数据叫做BPB(BIOS Paramter Block),关于BPB的详细说明请参见下表
以下是整理后的 BPB 参数信息表格,基于 FAT32 文件系统的标准结构:
| 偏移量(Hex) | 字节数 | 含义 | 值(Hex) | 值(说明) |
|---|---|---|---|---|
0x00B | 2 | 每扇区字节数 | 0x0200 | 512 字节(固定值) |
0x00D | 1 | 每簇扇区数 | 0x40 | 64 个扇区(簇大小 = 64 × 512 = 32KB) |
0x00E | 2 | 保留扇区数 | 0x0492 | 1170 个扇区(引导记录后的保留扇区) |
0x010 | 1 | FAT 表个数 | 0x02 | 2 个 FAT 表(冗余备份) |
0x011 | 2 | 根目录项数(FAT32 无效) | 0x0000 | FAT32 不使用此字段(根目录为文件形式) |
0x013 | 2 | 扇区总数(<32MB 使用) | 0x0000 | 仅用于 <32MB 分区(16 位字段) |
0x015 | 1 | 介质描述符 | 0xF8 | 硬盘(F8 表示硬盘,软盘为 F0、FD 等) |
0x016 | 2 | 每 FAT 扇区数(<32MB) | 0x0000 | 仅用于 <32MB 分区(16 位字段) |
0x018 | 2 | 每磁道扇区数 | 0x003F | 63 个扇区(逻辑参数) |
0x01A | 2 | 逻辑磁头数 | 0x00FF | 255 个磁头(逻辑参数) |
0x01C | 4 | 隐含扇区数 | 0x00002000 | 8192个扇区(从分区起始到数据区的隐含扇区) |
0x020 | 4 | 扇区总数(>32MB 使用) | 0x03b70400 | 62,325,760 个扇区(32 位字段) |
0x024 | 4 | 每 FAT 扇区数(>32MB) | 0x00001DB7 | 7607 个扇区(FAT 表占用空间) |
0x028 | 2 | 标记(未使用) | 0x0000 | 保留字段(通常为 0) |
0x02A | 2 | 版本(通常为 0) | 0x0000 | FAT32 固定版本号为 0 |
0x02C | 4 | 根目录起始簇 | 0x00000002 | 根目录从第 2 号簇开始(FAT32 中根目录为文件形式) |
0x030 | 2 | 引导程序占用扇区数 | 0x0001 | 引导程序占用 1 个扇区 |
0x032 | 2 | 备份引导扇区位置 | 0x0006 | 备份 DBR 位于分区第 6 个扇区(FAT32 常见配置) |
0x034 | 14 | 保留 | 12个 0x00 80 00 | 保留字段(未使用) |
0x042 | 1 | 扩展引导标记 | 0x29 | 固定值 29H(表示扩展 BPB 结构) |
0x043 | 4 | 卷序列号 | 0x34323339 | 随机生成的卷序列号(唯一标识) |
0x047 | 10 | 卷标 | "NO NAME " | 用户指定的卷标(如 “NO NAME”) |
0x052 | 8 | 文件系统类型 | "FAT32" | 明码形式的文件系统格式(FAT32) |
解析结果如下
引导区起始位置bsect: 2000
扇区大小ssize: 200=512字节
fat起始扇区fatbase: 2492(保留扇区0x492+引导区起始扇区0x2000)
每簇扇区数csize: 40
根目录起始位置dirbase: 2
fat表项总数n_fatent: edb12
数据区起始扇区database: 6000
4. FAT表
FAT表即文件分配表(File Allocation Table)。FAT32文件表是由一个个表项组成的一张表,其中每一个表项由一个32位的二进制组成,其值对应了相应簇的使用情况,如2号表项对应了2号簇的使用情况,3号表项对应了3号簇的使用情况,依此类推。(但是第0和第1项例外,下面会有说明)。每个表项对应数值的含义如表1所示
| 表项数值 | 对应含义 |
|---|---|
| 0x00000000 | 空闲簇,即表示可用 |
| 0x00000001 | 保留簇 |
| 0x00000002 - 0x0FFFFFEF | 被占用的簇,其值指向下一个簇号 |
| 0x0FFFFFF0 - 0x0FFFFFF6 | 保留值 |
| 0x0FFFFFF7 | 坏簇 |
| 0x0FFFFFF8 - 0x0FFFFFFF | 文件最后一个簇 |
5. 数据区
两张FAT之后的所有扇区都是数据区部分

程序在挂载后就开始读数据区,文件系统在第3次到第17次读u盘数据是在扫描设备中的所有文件夹与文件.
之后读音乐文件.
参考博客:
FAT32文件系统学习(1) —— BPB的理解
FAT32文件系统学习(2) —— FAT表
FAT32文件系统学习(3) —— 数据区(DATA区)
4057

被折叠的 条评论
为什么被折叠?



