文章目录fat32文件系统详细分析 (续fat文件系统详解)
1. 前言
2. 格式化sd nand/sd卡
3. fat32文件系统分析
3.1 保留区分析
3.1.1 bpb(bios parameter block) 及bs区分析
3.1.2 fsinfo 结构扇区分析
3.1.3 引导扇区剩余扇区
3.1.4 备份引导扇区
3.1.5 保留区剩余区域
3.2 分区偏移及大小计算
3.3 fat区分析:
3.3.1 fat1
3.3.2 fat2
3.4 数据区分析:
4. 总结
1. 前言续上一篇文章 : fatfs文件系统详解:关于如sd卡、sd nand、spi nor flash等众多存储设备
在上一篇文章,我们已经对fat文件系统有了一个详细的介绍,但由于fat文件系统由历史发展,存在fat12/16/32三种系统,在上一篇文章中采用的是fat16系统作为实例进行的分析,而fat32系统存在些许差异,且fat32文件系统在当前应用广泛,因此特补充此篇博文,完善fat32的示例分析。
2. 格式化sd nand/sd卡申请到雷龙发展代理的cs创世 贴片 sd card (sd nand) 样品,做出测试,有1gb,4gb,32gb,64gb的容量可选,我这里申请到的是两片32gb的芯片和测试板.
2.1 格式化sd nand / sd卡,强制采用fat32格式,分配每个簇大小为2048byte,同时为了避免其他原有数据干扰,我们此处取消快速格式化。
2.2 使用 winhex 打开分析
3. fat32文件系统分析fat文件系统布局图如下,和fat16上有些许差别:
3.1 保留区分析
保留区分为引导扇区、备份引导扇区及其他字段,具体数据段分析如下。
3.1.1 bpb(bios parameter block) 及bs区分析
bpb及bs参数内容数据如下:
eb 58 90 :bs_jmpboot,跳转指令4d 53 44 4f 53 35 2e 30:bs_oemname,msdos 5.0,一个名字,指示创建此卷的操作系统,无其他作用`00 02:bpb_bytspersec,扇区大小 512 字节04:bpb_secperclus,每次操作的最小扇区数,簇 cluster,4 (与格式化时选择的大小匹配 2048 = 512 * 4)16 11:bpb_rsvdseccnt,保留区的扇区数,0x1116=4374 (通过此可计算,fat区起始地址为 4374 * 512 = 0x22 2c00)02:bpb_numfats,fats的个数,2(一般此值为2,多一个用来做冗余备份,解决系统异常导致第一个损坏时,增大恢复的可能性,表示fat区有两个fats备份)00 00:bpb_rootentcnt,0,在fat12/16系统中,此字段表示根目录中32字节目录条目数量,设置此值时需注意对齐,为了最大的兼容性,fat16系统上此值应设置为512,fat32系统上此值应设置为000 00:bpb_totsec16,16位大小区域描述fat卷扇区总数,0。当fat12/16系统扇区数 ≥0x10000(65536)时,此字段应设置为0,真实值存放在 bpb_totsec32 字段;对于fat32系统,此值必须为0。(此处由于我们的总扇区数=118.510241024/512 = 242688 > 65536,所以此字段为0)f8:bpb_media 媒体类型00 00:bpb_fatsz16,00,一个fat占用的扇区数,此字段仅在fat12/16系统使用;fat32系统,此字段必须为0,使用bpb_fatsz32字段替代。3f 00:bpb_secpertrk,每个磁道的扇区数,此字段仅与具有几何形状且仅用于 ibm pc 的磁盘 bios 的介质相关,不用管。ff 00:bpb_numheads,头数量,此字段仅与具有几何形状且仅用于 ibm pc 的磁盘 bios 的介质相关,不用管。00 00 00 00:bpb_hiddsec,0,fat 卷之前的隐藏物理扇区数(当磁盘被分区之后,当前分区并不一定是从扇区头开始的)00 08 0f 00:bpb_totsec32,0x0f0800 = 985088(整个卷空间大小),32位大小区域描述fat卷扇区总数。 fat12/16系统,扇区总数小于0x10000时,此字段必须为0,真实值存放在bpb_fatsz16;fat32系统,此字段一直有效。(481m = 512 * 985088)以上是fat12/16/32公共字段,接下来是fat32独有字段
75 07 00 00:bpb_fatsz32,1909,一个fat占用的扇区数,fat区总大小等于 bpb_fatsz * bpb_numfats 扇区。(由此可计算fat区总大小:1909 * 2 = 3818扇区 = 3818 * 512byte = 0x1d d400 byte)00 00: bpb_extflags,扩展标识字段,bit7=0,表示所有fat都是镜像的和活跃的;bit7=1,表示只有bit3-0表示的fat是有效的。00 00:bpb_fsver:fat32版本,高字节是主版本号,低字节是次版本号。02 00 00 00:bpb_rootclus,2, 根目录的第一个簇号,此值通常为2,因为前两个簇一般用于保留。01 00:bpb_fsinfo,1,fsinfo结构扇区与fat32卷顶部的偏移扇区值。此值通常为1,因为其通常位于引导扇区旁边。06 00:bpb_bkbootsec,6, 备份引导扇区与fat32卷顶部的偏移扇区值。此值通常为6,考虑最大的兼容性,此值不建议为其他值。00 00 00 00 00 00 00 00 00 00 00 00:bpb_reserved,0,保留80:bs_drvnum,ibm pc 的磁盘 bios 使用的驱动器号,00h代表软盘,80h代表固定磁盘00:bs_reserved,保留字段,029:bs_bootsig,扩展引导签名,表示以下存在三个字段30 d1 b5 78:bs_volid,与 bs_vollab 一起构成卷序列号,一般在格式化的时候结合时间生成4e 4f 20 4e 41 4d 45 20 20 20 20:(解析为:no name “),bs_vollab,11byte卷标,当卷标不存在时,此值应设置为no name”46 41 54 33 32 20 20 20:bs_filsystype,始终为fat32 ,对fat类型的确定没有任何影响。33 c9 ... b9 01 00 00:bs_bootcode32,引导启动程序,与平台有关,不使用时填充为0bs_bootsign:0xaa55,引导签名,指示这是一个有效的引导扇区当扇区大小大于512字节时,剩余的字段应全部使用0x0填充。3.1.2 fsinfo 结构扇区分析
fsinfo 数据结构为fat32系统所特有,其目的是记录fat32系统上剩余的簇数量以及下一个空闲簇数据;以避免扫描整个磁盘搜索导致的时间浪费。
fsinfo数据偏移可从引导扇区内的 bpb_fsinfo 参数获取,此处为 1,因此 fsinfo 数据偏移为1个扇区,对应512byte,0x200地址处。fsinfo数据结构如下:
内容如下:
3.1.3 引导扇区剩余扇区
fat32引导扇区总共有三个512byte的扇区构成。bpb、bs、fsinfo字段已使用了2个扇区,还剩有一个扇区未使用,字段为0,如下图所示,需要注意的是,此扇区在偏移值510处依旧存在尾部签名0xaa55。
引导扇区剩余字段,为非有效字段,采用0x00填充。
3.1.4 备份引导扇区
相比fat12/16,fat32系统上存在引导扇区的备份,此块区域偏移参考引导扇区内bpb_bkbootsec字段,当前引导扇区内此参数值为6, 因此在当前文件系统内,备份引导扇区的偏移为 6号扇区,对应偏移地址为 bpb_bkbootsec * bpb_bytspersec = 6 * 512byte = 3072byte = 0xc00
3.1.5 保留区剩余区域
在fat32系统中,保留区除了 bpb区域、fsinfo区域以及这两个区域的备份区域外,还有一部分区域,目前我没找到此区域的作用,我理解为此块区域是作为某种引导程序,数据内容如下:
关于此块区域,欢迎大家在评论区讨论!
此外,还有一处区域的存在也欢迎大家讨论,即fsinfo扇区后面的一个扇区,只有看到尾部签名,其他数据为空,目前也未找到此处有关说明,后续清楚后会在此补充,亦欢迎大家在评论区讨论!
3.2 分区偏移及大小计算
知道bpb参数内容之后,便可以进行分区偏移及大小计算了!
各分区偏移地址及大小如下:
关于fat区,通常存在一个以上的fat,如此处所格式化的sd卡便存在两个fat,对应的偏移地址和大小如下:
注意:在fat32系统中,根目录区不存在,但依旧存在根目录,不过是根目录作为数据区的一部分!
3.3 fat区分析:
fat32系统与fat12/16系统在fat区数据一个显著差别是:fat32每条fat条目占32bit,fat16占16个bit,fat12占12bit。关于此部分更详细描述,可参考上一篇:fat文件系统详解(点击跳转!) 的 4.3 章节!
3.3.1 fat1
fat1偏移地址:0x22 2c00
数据内容如下:
3.3.2 fat2
fat2是fat1的备份,偏移地址:0x31 1600
数据内容与fat1一致,如下:
3.4 数据区分析:
偏移地址:0x40 0000
由参数bpb_rootclus可知,数据区第一个簇是2号簇。
打开数据区的第一个簇,里面存放的内容便是根目录的内容!这也就是为什么fat32没有根目录区,但依旧存在根目录的实现方式。数据内容如下:
之后我们看到3号簇的内容:
数据字段如下图所示,由于在上一篇博文中已对长短文件名每个字段进行过细致分析,此处不再做过度分析,仅抽取关键字段进行分析,如下图所示:
之后切换到4号簇和5号簇,可以查看到对应数据:
从6号簇开始便没有在使用,均为空闲簇,对应上 fsinfo 结构内 fsi_nxt_free 字段的内容。
4. 总结相比fat16系统,fat32文件系统在保留区有了更多的设计:
1)增加了引导扇区的备份,异常掉电等情况下可恢复性更强;
2)增加了fsinfo结构,对于大容量flash访问将更加高效;
此外fat32系统取消了根目录区,将根目录移至数据区,根目录与普通目录本来就没有什么区别,确实也不用单独分一个区存放,提高了一致性。
关于数据的存储思想,依旧保持不变:fat区内的fat条目通过簇链记录扇区使用情况及文件占用的扇区情况;数据区内目录和文件都作为文件,通过目录这一类特殊文件,描述文件属性以及实际文件内容存放的簇的方式,将整个文件管理起来。
综上,便是fat32格式文件系统的详细解析,欢迎大家评论区进行积极讨论与反馈!!!
曲面时代成过去?柔性显示屏成未来新宠
电信、联通分区共建一张5G接入网,有助于降低5G网络建设和运维成本
智能热阻断深共晶电解质助力高安全锂金属电池
08-09嵌入式开发从业人员大调查
基于Zedboard FPGA的VGA图像信号采集系统的设计
FAT32文件系统详细分析 (格式化SD nand/SD卡)
健身房戴什么耳机比较好,运动蓝牙耳机性价比之王分享
爱普科斯圆片式超声波传感器的特点及应用介绍
节能安全引领潮流 智能车辆引爆车载通信需求
新一代基于人工智能技术的柔性网络系统架构与关键技术
世界上首个天地一体化的广域量子通信网络成功组建 可抵御所有已知黑客攻击
局部放电的检测方法有哪些
射极跟随器的原理 射极跟随器电路图及波形
运动手表气密性防水检测是怎么做的
上海季丰电子通过ISO9001:2015审核
日本媒体挖出一款第三方x86 CPU 插槽设计亮了
为什么我国民用电压是220V,有的国家是110V?
腾讯的大模型价值观:实用主义
从可视化呈现看智慧电网有多「智能」
使用 OpenVINO™ 工具包进行停车场监控