打印

FAT文件系统该怎样学习

[复制链接]
7012|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
inter_zhou|  楼主 | 2009-11-13 11:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
inter_zhou|  楼主 | 2009-11-13 15:36 | 只看该作者
不要沉下去啊

使用特权

评论回复
板凳
01dxwlm| | 2009-11-13 15:56 | 只看该作者
别看那个了,不一定要看明白,能移植就好了。
我这两天也在看FAT,很多地方没看懂,可我把STM32的10KSRAM做DISK,也移植成功了一个文件系统。

使用特权

评论回复
地板
古道热肠| | 2009-11-13 16:41 | 只看该作者
哈哈,FATFS是比较高效的文件系统,就是理解起来较难,俺的应用都自己整几个函数来实现FAT功能,这样印象最深.也最能节省代码和提高速度.

使用特权

评论回复
5
BitFu| | 2009-11-13 17:02 | 只看该作者
会用就行了,不要学了。即使自己完全写代码,到时真正用时还是要用别人成熟的东西
能移植就行了。

使用特权

评论回复
6
xwj| | 2009-11-13 17:34 | 只看该作者
其实FAT还是很好理解的
1、你先由MBR(主引导扇区)找到分区表,(这个很好找,都在任何硬盘的第一个扇区里)
2、然后就可以有分区表找到每个分区的开始位置了;(这个扇区有明显的字符串标志MSDOS 5.0、MSWIN4.1或其他的OEM ID字段)
3、接着,就可以根据这个扇区的数据看到保留扇区数、每FAT扇区数,并以此找到FAT区、和根目录位置(还有个关键参数:每簇扇区数,这个后面说)
4、在根目录区保存着一个个文件、目录的信息,是很有规律的数据,文件名一目了然,而最关键的就是每个目录项中的簇号了,它指向每个文件的簇链,我们可以把它看成一个个的指针,而文件数据着放在相应的簇号对应的扇区位置里。
5、簇号是一个链表,每一个都是2字节,里面保留下一个簇的编号,而下一个又再指向下一个... 直到文件结束,用特殊符号FFF8~FFFF 表示文件结束簇;
6、知道了文件的簇号、簇链,我们把它乘以每簇扇区数,就是文件数据的真正存放位置了
FAT将磁盘空间按一定数目的扇区为单位进行划分,这样的单位称为簇。
之所以簇为单位而不以扇区为单位进行磁盘的分配,是因为当分区容量较大时,采用大小为512b的扇区管理会增加fat表的项数,对大文件存取增加消耗,文件系统效率不高,所以用更大的单位来操作。
簇的大小一般是2n (n为整数)个扇区的大小,像512B,1K,2K,4K,8K,16K,32K,64K。
最后,向你推荐一篇很详细的**,相信只要你肯仔细阅读,就可以很快理解的哦。

FAT文件系统原理.rar

255.71 KB

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
古道热肠 + 2
7
原野之狼| | 2009-11-13 18:00 | 只看该作者
老X给的资料我以前看过,写的比较容易理解。
然后再看下微软的FAT系统权威资料,结合winhex工具,分析下你自己的硬盘,慢慢琢磨就行了。

使用特权

评论回复
8
因特网用户| | 2009-11-13 18:31 | 只看该作者
mark一下

使用特权

评论回复
9
inter_zhou|  楼主 | 2009-11-14 09:31 | 只看该作者
非常感谢楼上几位朋友的回复!:)

楼上有几位朋友说不一定要看懂,会移植就行了。
对于有些模块到底需不需要看懂或是只需要移植就行了,我也很矛盾。如果没有对基本概念的正确理解移植也是比较困难的,或者移植好了,应用的时候出了问题也很难找到问题点。所以我认为还是尽量弄透彻点好。

今天是第3天看FATFS了,目前看懂50%左右。还有些概念没有连贯起来。
我现在就是结合XWJ的那份资料看的。感觉XWJ前辈上面的第5点说法有误:
5、簇号是一个链表,每一个都是2字节,里面保留下一个簇的编号,而下一个又再指向下一个... 直到文件结束,用特殊符号FFF8~FFFF 表示文件结束簇;
簇号不一定是2个字节吧,FAT12  是12BIT, FAT16  是16BIT,FAT32  是32BIT

使用特权

评论回复
10
agwtpcbox| | 2009-11-14 09:39 | 只看该作者
xwj总结得很好
学习了
同时谢谢分享

使用特权

评论回复
11
古道热肠| | 2009-11-14 10:59 | 只看该作者
理解FAT文件系统有一条规则要记牢,"目录与文件本质上是一样的管理",WinHex的最新版本超好用.

使用特权

评论回复
12
xwj| | 2009-11-14 11:44 | 只看该作者
9# inter_zhou


呵呵,2字节的当然是FAT16,这只是举个例子罢了
你能看出“簇号不一定是2个字节吧,FAT12  是12BIT, FAT16  是16BIT,FAT32  是32BIT”,说明你至少还是认真看了相关文档的,只要在大脑里建立相应的对应关系,就能很快理解了

使用特权

评论回复
13
inter_zhou|  楼主 | 2009-11-16 16:29 | 只看该作者
file:///D:/下载资料/FAT_FS/u盘数据
我用winhex打开看了一下U盘的数据,对照相关的FAT看,发现BPB的有关参数对应不上,现贴图片出来,请各位是怎么回事?

使用特权

评论回复
14
inter_zhou|  楼主 | 2009-11-16 16:31 | 只看该作者
上传图片好像很不方便:L

u盘数据.rar

24.51 KB

使用特权

评论回复
15
inter_zhou|  楼主 | 2009-11-16 16:33 | 只看该作者
上面所示图片为U盘的第一个扇区。
当我打开C盘或者其他磁盘的数据,在第一个扇区里面能够找到与之对应的BPB参数,但是不知道问什么U盘里面的那些参数的数据那么奇怪!

使用特权

评论回复
16
inter_zhou|  楼主 | 2009-11-16 16:50 | 只看该作者
更新以上问题。
找到了MBR扇区,winhex上看偏移量在4000H的地方,为什么不是不是偏移量0的起始位置呢?要怎样才能知道MBR的位置?

使用特权

评论回复
17
古道热肠| | 2009-11-18 23:05 | 只看该作者
14# inter_zhou
您那压缩包中的数据好象不是DBR,是否是MBR,该扇区中存放分区表的数据内容有效。

使用特权

评论回复
18
古道热肠| | 2009-11-18 23:06 | 只看该作者
MBR的固定位置存放有该磁盘的分区信息。

使用特权

评论回复
19
inter_zhou|  楼主 | 2009-11-19 10:29 | 只看该作者
to:古道热肠
首先感谢你的热心回复!:)
根据近一步的学习了解,图片的数据确实是MBR,后面分区表的数据是正常的。
对应FATFS代码,首先抓取第一个扇区的数据就是图片上的MBR扇区,然后根据MBR里面的参数:本分区之前的扇区数。以这个参数找到DBR,然后取得BPB相关参数。

现在疑问:
1,看过几个U盘和我电脑上F盘数据。为什么有些盘的第一个扇区是DBR有些是MBR?有什么规律吗?
2,其中U盘第一个扇区原来是MBR,我把其中总扇区数的位置改写了,也就是说人为的改变总扇区数,这样我想U盘的容量是不是会变大。后来把该U盘再次插到PC上,WINDOWS显示容量为0,格式化该U盘,再看第一个扇区的数据发现居然是DBR扇区,为什么第一个扇区的由MBR变成DBR?

使用特权

评论回复
20
古道热肠| | 2009-11-19 16:28 | 只看该作者
U盘插到电脑上会显示"固定磁盘"和"可移动磁盘"。通常前者都带有MBR,后者不带MBR,第1个扇区就是DBR,扇区的前3个字节为EB 3C 90最为常见。MBR是由FDISK命令才能动得了的,DBR是在Window能格式化改变其内容。
U盘的容量在PC机与U盘执行大容量存储器协议通讯时由相关指令获得,然后U盘的所在存储器扇区由PC机来管理。单纯地改变U盘扇区的内容无法变更容量。
Windows显示容量为0的盘,通常是初始化文件系统出错时的出错返回,此时通常要对U盘执行格式化操作才能进行下一步操作。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

272

帖子

0

粉丝