基于蓝讯SDK学FAT32文件系统记录

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)值(说明)
0x00B2每扇区字节数0x0200512 字节(固定值)
0x00D1每簇扇区数0x4064 个扇区(簇大小 = 64 × 512 = 32KB)
0x00E2保留扇区数0x04921170 个扇区(引导记录后的保留扇区)
0x0101FAT 表个数0x022 个 FAT 表(冗余备份)
0x0112根目录项数(FAT32 无效)0x0000FAT32 不使用此字段(根目录为文件形式)
0x0132扇区总数(<32MB 使用)0x0000仅用于 <32MB 分区(16 位字段)
0x0151介质描述符0xF8硬盘(F8 表示硬盘,软盘为 F0FD 等)
0x0162每 FAT 扇区数(<32MB)0x0000仅用于 <32MB 分区(16 位字段)
0x0182每磁道扇区数0x003F63 个扇区(逻辑参数)
0x01A2逻辑磁头数0x00FF255 个磁头(逻辑参数)
0x01C4隐含扇区数0x000020008192个扇区(从分区起始到数据区的隐含扇区)
0x0204扇区总数(>32MB 使用)0x03b7040062,325,760 个扇区(32 位字段)
0x0244每 FAT 扇区数(>32MB)0x00001DB77607 个扇区(FAT 表占用空间)
0x0282标记(未使用)0x0000保留字段(通常为 0)
0x02A2版本(通常为 0)0x0000FAT32 固定版本号为 0
0x02C4根目录起始簇0x00000002根目录从第 2 号簇开始(FAT32 中根目录为文件形式)
0x0302引导程序占用扇区数0x0001引导程序占用 1 个扇区
0x0322备份引导扇区位置0x0006备份 DBR 位于分区第 6 个扇区(FAT32 常见配置)
0x03414保留12个 0x00 80 00保留字段(未使用)
0x0421扩展引导标记0x29固定值 29H(表示扩展 BPB 结构)
0x0434卷序列号0x34323339随机生成的卷序列号(唯一标识)
0x04710卷标"NO NAME "用户指定的卷标(如 “NO NAME”)
0x0528文件系统类型"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区)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值