- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
FATFS文件系统剖析(全)概要1
FATFS文件系统剖析1:
FAT16:
数据按照其不同的特点和作用大致可分为5部分:MBR区、DBR区、FAT区、DIR区和DATA区,相比fat12多了DBR区
????Main boot record: MBR(0--1bdh)??????? 磁盘参数存放
???????????????????????????????? DPT(1beh--1fdh)?? 磁盘分区表
???????????????????????????????? 55,aa???????????????????? 分区结束标志
?? ?DBR(Dos Boot Record)是操作系统引导记录区的意思
??? FAT区(有两个,一个备份):对于fat16,每一个fat项16位,所以可寻址的簇项数为65535(2的16次方)。而其每簇大小不超?过32k,所以其每个分区最大容量为2G。fat32,每一个fat项32位,可寻址簇数目为2的32次方。
??? DIR区(根目录区):紧接着第二FAT表(即备份的FAT表)之后,记录着根目录下每个文件(目录)的起始单元,文件的属性等。定位文件位置时,操作系统根据DIR中的起始单元,结合FAT表就可以知道文件在硬盘中的具体位置和大小了。
??? DATA区:实际文件内容存放区。
FAT32:
??? 暂时放在这里,不讨论!
Fatfs:嵌入式fat文件系统,支持fat16,fat32。
?????? 包含有ff.h,diskio.h,integer.h,ffconf.h 四个头文件以及ff.c 文件系统实现。当然要实现具体的应用移植,自己要根据diskio.h实现其diskio。c 底层驱动。
?????????? diskio.h :??底层驱动头文件
?????????? ff.h??????? :? 文件系统实现头文件,定义有文件系统所需的数据结构
?????????? ff.c????????: ? 文件系统的具体实现
如下开始逐个文件加以分析:
integer.h :仅实现数据类型重定义,增加系统的可移植性。
ffconf.h :? 文件系统配置逐个配置,先配置实现一个最小的fat文件系统,下面来分析各配置选项:
?????????????? #define _FFCONF 8255??????//版本号??
?????????????? #define?_FS_TINY????????? ? 0????????/* 0:Normal or 1:Tiny */???//在这里与先前版本有些许变化,是通过配置头配置两种不同大小的文件系统 ,这里配置为 0。
??????????????#define _FS_READONLY???1?? //定义文件系统只读,也就不能写修改,在此定义为 1,这样文件系统会大大缩小,简化学习理解过程。
????????????? #define _FS_MINIMIZE?????3?/* 0 to 3 */?? 这个选项是用于过滤掉一些文件系统功能,为0时是全功能,3是功能实现最小
????????????? #define?_USE_STRFUNC?? 0?/* 0:Disable or 1/2:Enable */? 是否使用字符串文件接口,为0,不使用
????????????? #define?_USE_MKFS?????????0 /* 0:Disable or 1:Enable */?? 制作文件系统,这个功能实现是还要_FS_READONLY=0
??????????????#define?_USE_FORWARD? 0??/* 0:Disable or 1:Enable */??f_forward function??实现还需_FS_TINY?=1??????????????????
??????????????#define?_USE_FASTSEEK? 0???/* 0:Disable or 1:Enable */??快速查找功能???????????????
?????????????#define _CODE_PAGE?????? 936???//?? 936? - Simplified Chinese GBK (DBCS, OEM, Windows)
????????????????? #define?_USE_LFN???? 0??????? /* 0 to 3 */??? 0:不使用长文件名
????????????? #define?_MAX_LFN??? ?255??? /* Maximum LFN length to handle (12 to 255) */
???????????? ?#define?_LFN_UNICODE?? 0
文档评论(0)