sd卡与FAT32文件系统

sd卡与FAT32文件系统

 

先把sd卡格式化,然后新建几个文件放在里面,用于分析,sd卡中文件的存储方式。

使用工具winhex,打开磁盘sd卡。

先分析一下sd卡的第一个扇区,其中的内容为DBR(DOS BOOT RECORD c操作系统引导记录区)

DBR中BPB部分才是这一区域的核心部分,对于FAT32的实现意义很大。

每个红线部分是一个字段,要知道是什么意思,对照表看看就可以啦:

 

 

上面的长度是只占的字节数,现在就对照分析一下,

每个扇区字节数:是00 02,属于小端存数,读得时候为0x02 00,也就是512字节。

每簇的扇区数:是0x08,就是包含8个扇区,大小为 8*512 字节 = 4kB。

保留扇区数:是26 00,就是0x0026,保留38个扇区,你会看到fat表放在第38个扇区,前面的空间就只

包含了DBR,没有跟文件有关的东西,都是与sd卡本身有关的信息。

fat表数:是02,就是2个,这是fat32文件系统的特色,2个中有一个是备份的。

磁道扇区数:3f 00 就是0x003f,63,一个磁道所含的扇区数为63

磁头数:ff 00 就是0x00ff,255

sd卡所含的总扇区数: 00 a0 3a 00 就是0x003aa000 共有3842048个扇区

fat表扇区数:a1 0e 00 00,就是0x0ea1,3745个扇区

根目录簇号:02 00 00 00,就是2号,其实就是实际存储位置是fat表后面的第一个簇,8个扇区。用于存储根目录。

下面还有一个信息不是很重要。

 

下面分析fat表:

fat表示从第38个扇区开始,然后占空间3745个扇区。为什么占这么大呢,首先fat表中每4个字节描述一个簇,一个簇中有8个扇区,sd卡可用扇区数是3834520。

(3834520/8)*4/512=3744.6484375,约为3745个扇区。可用扇区数是可以查啊。winhex中的详述技术报告:

接下来看看fat表中的内容吧:

fat表是用来表示一个文件占了多大空间的,都是以簇为单位。哪怕你的文件只有一个字节,也是占一个簇,4kB的空间。或许你会觉得很浪费,不过想想,分得越细,越难查找,所以需要折中。我在sd卡中新建一个文件夹是SEUIC,SEUIC中新建VIM.txt(大小是10.02kB,占空间12KB,就是3个簇),根目录下还有一个文件TEST.txt(大小17个字节,占4KB)。那么fat表怎么表示的呢?

 

前8个字节表示这里是fat表的开始。后面的红线表示,每出现FF FF FF 0F都表示一个文件的结束,每四个字节为一个簇项,用以标记次簇的下一个簇号。依次解释下,首先sd卡中存储的是根目录区,占一个簇,簇号是2。后面是一个文件夹目录文件(SEUIC),占一个簇,簇号3。后面是文件VIM.txt,占3个簇,这里就好玩了,第一个簇号是4,你看到的05,就是标记的下一个簇号,表示这两个簇共同记录了同一个文件,所以把他们链接起来。直至第6簇结束,表示文件共占3个簇。最后又是一个只占一个簇的文件(TEST.txt)。其实这里是看不出文件名的。这里只会记录文件在sd卡中的存储。然后在目录区中描述一个文件的时候,只要记录首簇号就可以了,很方便是不是。当你在一个文件中添加内容的时候,随便写在哪个簇,并不需要连续的,然后把簇号添加进上一个簇项里面,就完成任务了。

 

下面介绍目录区:

先计算目录区所在扇区,由fat表所在第一个扇区38,加上2个fat表所占扇区数就是3745*2(别忘了又一个备份的fat表)。结果是7528,winhex在详细技术报告中也说明这个扇区是第一个数据扇区。

要看懂每个字段的意思,还是要查表的:

 

一个目录项占32个字节,就是2行喽。可以看出SEUIC的属性是子目录,起始簇号是3,这里把目录当做文件管理,但是这样的文件大小是0;

对于SEUIC子目录下的文件这里是看不到的哦。TEST.txt文件属性是归档,就是文件,起始簇号是7,字节数为17.

那么再去找VIM.txt,首先定位SEUIC所在扇区,他的簇号是3,就是目录区所在扇区加8为7536。所以要找一个文件,是一层一层剥开来得。

好吧,现在去7536扇区看看:

可以看出,VIM.txt属性是归档,首簇号是4,大小为0x28da,10458字节。你可以右击文件属性看一下,肯定是对应的啊。

那么要看VIM中的内容直接去第4簇。我们去看一下TEST.txt文件吧,这个文件比较小,在第7簇,就是7538+4*8=7568.

内容就是this is a test!!! 好吧就这么多了。

在linux文件系统中,所要建立的文件索引节点所需的数据就是来自上面的32字节的数据,他记录了文件的名字,属性,大小,地址等信息。

还有就是,文件是一层一层向下找得,那么系统启动挂载sd卡的时候只需要把跟目录区拷贝到内存中就可以了。那么查找的时候,打开一个子目录,就可以找到这个目录下的文件信息了。所以把目录当做文件看待是很有好处的。因为文件本身在哪儿并不重要。

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值