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

📅 发布时间:2026/7/24 20:51:47
基于蓝讯SDK学FAT32文件系统记录 1.什么是FAT32FAT32是Windwos系统硬盘格式分区的一种。这种格式采用32位的FAT表(文件分配表)使其对磁盘的管理能力大大增强.FAT32就是FAT表的每一项长度都是32位所以叫做FAT32。至于每一项存放的内容是什么下面的内容会慢慢进行分析。2. FAT32的构成FAT32 文件系统将逻辑盘的空间划分为三部分依次是引导区 BOOT区、文件分配表区FAT区、数据区DATA区.(MBR不属于FAT32分区)3. 引导区先读0号扇区,之后从0号扇区的446字节开始解析,在4468字节获得引导区DBR的地址(实验中获得的DBR地址是0x2000)引导区DBR保存了每个扇区的字节数一个簇的扇区数FAT表的起始位置FAT表的个数以及FAT表的扇区数等信息。之后还留有若干保留扇区。以下数据是芯片烧录蓝讯SDK读u盘引导区得到的实验数据第一次读扇区,获得引导区地址lba0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008203000C FE FF FF/*00 20*/00000004B70300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055AA第二次读扇区,解析引导区内容lba0x2000/*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*/202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000......最开始的3字节的数据内容是EB 00 90,0x03~0x0A这8个字节的数据表示OEM这里即为“20 20 20 20 20 20 20 20”,用于标识文件系统类型从0x000B开始的79个字节的数据叫做BPBBIOS Paramter Block关于BPB的详细说明请参见下表以下是整理后的BPB 参数信息表格基于 FAT32 文件系统的标准结构偏移量Hex字节数含义值Hex值说明0x00B2每扇区字节数0x0200512 字节固定值0x00D1每簇扇区数0x4064 个扇区簇大小 64 × 512 32KB0x00E2保留扇区数0x04921170 个扇区引导记录后的保留扇区0x0101FAT 表个数0x022 个 FAT 表冗余备份0x0112根目录项数FAT32 无效0x0000FAT32 不使用此字段根目录为文件形式0x0132扇区总数32MB 使用0x0000仅用于 32MB 分区16 位字段0x0151介质描述符0xF8硬盘F8表示硬盘软盘为F0、FD等0x0162每 FAT 扇区数32MB0x0000仅用于 32MB 分区16 位字段0x0182每磁道扇区数0x003F63 个扇区逻辑参数0x01A2逻辑磁头数0x00FF255 个磁头逻辑参数0x01C4隐含扇区数0x000020008192个扇区从分区起始到数据区的隐含扇区0x0204扇区总数32MB 使用0x03b7040062,325,760 个扇区32 位字段0x0244每 FAT 扇区数32MB0x00001DB77607 个扇区FAT 表占用空间0x0282标记未使用0x0000保留字段通常为 00x02A2版本通常为 00x0000FAT32 固定版本号为 00x02C4根目录起始簇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: 200512字节fat起始扇区fatbase: 2492(保留扇区0x492引导区起始扇区0x2000)每簇扇区数csize: 40根目录起始位置dirbase: 2fat表项总数n_fatent: edb12数据区起始扇区database: 60004. FAT表FAT表即文件分配表(File Allocation Table)。FAT32文件表是由一个个表项组成的一张表其中每一个表项由一个32位的二进制组成其值对应了相应簇的使用情况如2号表项对应了2号簇的使用情况3号表项对应了3号簇的使用情况依此类推。(但是第0和第1项例外下面会有说明)。每个表项对应数值的含义如表1所示表项数值对应含义0x00000000空闲簇即表示可用0x00000001保留簇0x00000002 - 0x0FFFFFEF被占用的簇其值指向下一个簇号0x0FFFFFF0 - 0x0FFFFFF6保留值0x0FFFFFF7坏簇0x0FFFFFF8 - 0x0FFFFFFF文件最后一个簇FAT表第0项(0x00000000~0x00000003): 0x0FFFFF8FAT表第1项(0x00000004~0x00000007): 0xFFFFFFFF这两项不代表任何簇的使用情况而是FAT表的表头表征了介质描述是固定值所以0x00和0x01这两个簇号是不用的簇号的下标从2开始。5. 数据区两张FAT之后的所有扇区都是数据区部分程序在挂载后就开始读数据区,文件系统在第3次到第17次读u盘数据是在扫描设备中的所有文件夹与文件.之后读音乐文件.参考博客:FAT32文件系统学习(1) —— BPB的理解FAT32文件系统学习(2) —— FAT表FAT32文件系统学习(3) —— 数据区(DATA区)