FAT32文件系统初次分析20190219

最近分析当前手上使用的SD卡文件系统,做个小的总结分析:(参考链接:https://blog.csdn.net/u010650845/article/details/60881687)

1.SD卡的存储结构如下:

深绿色:保留区含有一个重要的数据结构——DOS引导扇区(DBR)。FAT12、FAT16的保留区通常只有一个扇区,而FAT32的保留扇区要多一些,除0号扇区外,还有其他一些扇区,其中包括了DBR的备份扇区。

黄色:FAT区由两个大小相等的FAT表组成——FAT1、FAT2,FAT2紧跟在FAT1之后。

灰色:FAT12、FAT16的根目录虽然也属于数据区,但是他们并不由簇进行管理。也就是说FAT12、FAT16的根目录是没有簇号的,他们的2号簇从根目录之后开始。而FAT32的根目录通常位于2号簇。

2.使用WinHex打开TF卡:

分析:

0x00~0x02:3字节,跳转指令。
0x03~0x0A:8字节,文件系统标志和版本号,这里为MSDOS5.0。
0x0B~0x0C:2字节,每扇区字节数,0x0200=512
0x0D~0x0D:1字节,每簇扇区数,0x40=64个扇区。
0x0E~0x0F:2字节,保留扇区数,0x1134=4404
0x10~0x10:1字节,FAT表个数,0x02。
0x11~0x12:2字节,FAT32必须等于0,FAT12/FAT16为根目录中目录的个数;
0x13~0x14:2字节,FAT32必须等于0,FAT12/FAT16为扇区总数。
0x15~0x15:1字节,哪种存储介质,0xF8标准值,可移动存储介质。
0x16~0x17:2字节,FAT32必须为0,FAT12/FAT16为一个FAT 表所占的扇区数。
0x18~0x19:2字节,每磁道扇区数,只对于“特殊形状”(由磁头和柱面分割为若干磁道)的存储介质有效,0x003F=63。
0x1A~0x1B:2字节,磁头数,只对特殊的介质才有效,0x00FF=255。
0x1C~0x1F:4字节,EBR分区之前所隐藏的扇区数,0x00002000=8192。
0x20~0x23:4字节,文件系统总扇区数,0x00ECC000=15515648
0x24~0x27:4字节,每个FAT表占用扇区数,0x00000766=1894
0x28~0x29:2字节,标记,此域FAT32 特有。
0x2A~0x2B:2字节,FAT32版本号0.0,FAT32特有。
0x2C~0x2F:4字节,根目录所在第一个簇的簇号,0x02。(虽然在FAT32文件系统下,根目录可以存放在数据区的任何位置,但是通常情况下还是起始于2号簇)
0x30~0x31:2字节,FSINFO(文件系统信息扇区)扇区号0x01,该扇区为操作系统提供关于空簇总数及下一可用簇的信息。
0x32~0x33:2字节,备份引导扇区的位置。备份引导扇区总是位于文件系统的6号扇区。
0x34~0x3F:12字节,用于以后FAT 扩展使用。
0x40~0x40:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已。
0x41~0x41:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已 。
0x42~0x42:1字节,扩展引导标志,0x29。与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已
0x43~0x46:4字节,卷序列号。通常为一个随机值。
0x47~0x51:11字节,卷标(ASCII码),如果建立文件系统的时候指定了卷标,会保存在此。
0x52~0x59:8字节,文件系统格式的ASCII码,FAT32。
0x5A~0x1FD:共410字节,引导代码。
0x1FE~0x1FF:签名标志“55 AA”。
FAT文件系统将引导代码与文件形同数据结构融合在FAT32文件系统引导扇区的512字节中,90~509字节为引导代码,而FAT12/16则是62~509字节为引导代码。同时,FAT32还可以利用引导扇区后的扇区空间存放附加的引导代码。一个FAT卷即使不是可引导文件系统,也会存在引导代码。

FAT表1:

计算根目录起始扇区: 
N=保留区大小+2*FAT表大小=0x1134+2*0x00000766=8192

根据上面的公式找到根目录:

 

3.打开手上另外一张的TF卡,DBR区如图:

分析:文件系统标志和版本好为MSDOS5.0(0x03~0x0A),每个扇区字节数:0x0200=512(0x0B~0x0C),每簇扇区数:0x40=64 (0x0D),保留扇区数0x0256=598(0x0E~0x0F);FAT表个数:0x02(0x10).

每磁道扇区数:0x003F=63(0x18~0x19);磁头数:0x00FF=255(0x1A~0x1B);EBR分区之前所隐藏的扇区数:0x00002000=8192(0x1C~0x1F),文件系统总扇区数:0x01DAAC00=31108069(0x20~0x23)

每个FAT表占用的扇区数:0x00000ED5=3797(0x24~0x27),根目录所在第一个簇的簇号:0x02.

根据DBR信息计算:FAT表1为:598*512=306176 = 0x4ac00

FAT表2为:306176+3797*512=2250240 = 0x225600

根目录为:206176+3797*512*2=4194304=0x400000

将该SD卡格式化后读取根目录为:

把长文件TEST20190219103800.bin放到SD卡中:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-02-19 15:16  Better丶海殿下  阅读(689)  评论(0编辑  收藏  举报