广告公司简介简短大气,大型的seo公司,如何做展示型网站,wordpress 拖拽页面FAT32 文件系统详细分析 (格式化 SD nand/SD 卡) 目录 FAT32 文件系统详细分析 (格式化 SD nand/SD 卡)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 …FAT32 文件系统详细分析 (格式化 SD nand/SD 卡) 目录 FAT32 文件系统详细分析 (格式化 SD nand/SD 卡)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.4 数据区分析 4.总结 1. 前言
文件存储到存储芯片中有 2 种形式。
1 直接按照地址的方式进行存储。
2 以文件系统的形式进行存储。
直接按照地址的方式进行存储可以通过建立一张索引表知道哪些地址存储哪些数据或者按照固定的方式进行顺序的存储。这种写入的方式好处是不需要复杂的文件系统管理但是不方便数据的交互。因为这张索引表都是自己定义的不是通用的标准。
文件系统形式进行存储就会有一套标准大家都按照这个标准来不同的设备都可以对于这个数据进行读写操作。通过文件系统的方式来存储数据好处是方便了数据的交互但是也会提高复杂程度。并且如果数据是完整的保存到存储单元中但是描述这个文件的相关文件参数损坏了这个文件也就无法正确读取到了。每一个数据都有描述文件起始地址文件大小格式等等很多参数也也就提高了文件出错的概率。 文件系统的种类也有很多比如 FATexfatNTFSext4 等等。 今天我们就先了解下 fat32 的文件系统。
2.格式化 SD nand/SD 卡
申请到雷龙发展代理的 CS 创世 贴片 SD Card (SD NAND) 样品做出测试分享一下,该公司 SD NAND 二代产品介绍可以参考如下地址http://longsto.com/product/list-39.html,有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 30BS_OEMNameMSDOS 5.0一个名字指示创建此卷的操作系统无其他作用
00 02BPB_BytsPerSec扇区大小 512 字节
04BPB_SecPerClus每次操作的最小扇区数簇 Cluster4 (与格式化时选择的大小匹配 2048 512 * 4)
16 11BPB*RsvdSecCnt保留区的扇区数0x11164374 (通过此可计算FAT 区起始地址为 4374 * 512 0x22 2C00)
02BPB*NumFATsFATs 的个数2一般此值为 2多一个用来做冗余备份解决系统异常导致第一个损坏时增大恢复的可能性表示 FAT 区有两个 FATs 备份
00 00BPB_RootEntCnt0在 FAT12/16 系统中此字段表示根目录中 32 字节目录条目数量设置此值时需注意对齐为了最大的兼容性FAT16 系统上此值应设置为 512FAT32 系统上此值应设置为 0
00 00BPB_TotSec1616 位大小区域描述 FAT 卷扇区总数0。当 FAT12/16 系统扇区数 ≥0x10000(65536)时此字段应设置为 0真实值存放在 BPB_TotSec32 字段对于 FAT32 系统此值必须为 0。(此处由于我们的总扇区数118.510241024/512 242688 65536所以此字段为 0)
F8BPB_Media 媒体类型
00 00BPB_FATSz1600一个 FAT 占用的扇区数此字段仅在 FAT12/16 系统使用FAT32 系统此字段必须为 0使用 BPB_FATSz32 字段替代。
3F 00BPB_SecPerTrk每个磁道的扇区数此字段仅与具有几何形状且仅用于 IBM PC 的磁盘 BIOS 的介质相关不用管。
FF 00BPB_NumHeads头数量此字段仅与具有几何形状且仅用于 IBM PC 的磁盘 BIOS 的介质相关不用管。
00 00 00 00BPB_HiddSec0FAT 卷之前的隐藏物理扇区数当磁盘被分区之后当前分区并不一定是从扇区头开始的
00 08 0F 00BPB_TotSec320x0F0800 985088整个卷空间大小32 位大小区域描述 FAT 卷扇区总数。 FAT12/16 系统扇区总数小于 0x10000 时此字段必须为 0真实值存放在 BPB_FATSz16FAT32 系统此字段一直有效。481M 512 * 985088
以上是 FAT12/16/32 公共字段接下来是 FAT32 独有字段
75 07 00 00BPBFATSz321909一个 FAT 占用的扇区数FAT 区总大小等于 BPB_FATSz?? * BPBNumFATs 扇区。由此可计算 FAT 区总大小1909 * 2 3818 扇区 3818 _ 512Byte 0x1D D400 Byte
00 00: BPB_ExtFlags,扩展标识字段bit70表示所有 FAT 都是镜像的和活跃的bit71表示只有 bit3-0 表示的 FAT 是有效的。
00 00BPB_FSVerFAT32 版本高字节是主版本号低字节是次版本号。
02 00 00 00BPB_RootClus2 根目录的第一个簇号此值通常为 2因为前两个簇一般用于保留。
01 00BPB_FSInfo1FSInfo 结构扇区与 FAT32 卷顶部的偏移扇区值。此值通常为 1因为其通常位于引导扇区旁边。
06 00BPB_BkBootSec6 备份引导扇区与 FAT32 卷顶部的偏移扇区值。此值通常为 6考虑最大的兼容性此值不建议为其他值。
00 00 00 00 00 00 00 00 00 00 00 00BPB_Reserved0保留
80BS_DrvNumIBM PC 的磁盘 BIOS 使用的驱动器号00h 代表软盘80h 代表固定磁盘
00BS_Reserved保留字段0
29BS_BootSig扩展引导签名表示以下存在三个字段
30 D1 B5 78BS_VolID与 BS_VolLab 一起构成卷序列号一般在格式化的时候结合时间生成
4E 4F 20 4E 41 4D 45 20 20 20 20(解析为:NO NAME “)BS_VolLab11byte 卷标当卷标不存在时此值应设置为NO NAME”
46 41 54 33 32 20 20 20BS_FilSysType始终为FAT32 对 FAT 类型的确定没有任何影响。
33 C9 … B9 01 00 00BS_BootCode32引导启动程序与平台有关不使用时填充为 0
BS_BootSign0xAA55引导签名指示这是一个有效的引导扇区
当扇区大小大于 512 字节时剩余的字段应全部使用 0x0 填充。
3.1.2 FSInfo 结构扇区分析
FSInfo 数据结构为 FAT32 系统所特有其目的是记录 FAT32 系统上剩余的簇数量以及下一个空闲簇数据以避免扫描整个磁盘搜索导致的时间浪费。
FSInfo 数据偏移可从引导扇区内的 BPB_FSInfo 参数获取此处为 1因此 FSInfo 数据偏移为 1 个扇区对应 512Byte0x200 地址处。FSInfo 数据结构如下 内容如下 3.1.3 引导扇区剩余扇区
FAT32 引导扇区总共有三个 512Byte 的扇区构成。BPB、BS、FSInfo 字段已使用了 2 个扇区还剩有一个扇区未使用字段为 0如下图所示需要注意的是此扇区在偏移值 510 处依旧存在尾部签名 0xAA55。 引导扇区剩余字段为非有效字段采用 0x00 填充。
3.1.4 备份引导扇区
相比 FAT12/16FAT32 系统上存在引导扇区的备份此块区域偏移参考引导扇区内 BPBBkBootSec 字段当前引导扇区内此参数值为 6 因此在当前文件系统内备份引导扇区的偏移为 6 号扇区对应偏移地址为 BPB_BkBootSec * BPBBytsPerSec 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 条目占 32bitFAT16 占 16 个 bitFAT12 占 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 格式文件系统的详细解析欢迎大家评论区进行积极讨论与反馈
亲爱的卡友们欢迎光临雷龙官网如果看完文章之后还是有疑惑或不懂的地方请联系我们自己去理解或猜答案是件很累的事请把最麻烦的事情交给我们来处理术业有专攻闻道有先后深圳市雷龙发展专注存储行业 13 年专业提供小容量存储解决方案。