fatfs 文件属性_Zynq Fatfs文件系统应用笔记

Zynq Fatfs文件系统应用笔

Hello,panda

笔记介绍基于所描写叙述的Zynq Fatfs基于Xilinx xilffsv3.0和Sdpsv2.4,文件系统採用在Bare-Metal和轻量级操作系统中经常使用的FatFs,版本号为v0.10b。

在開始介绍FatFs文件系统在Zynq实现之前一定要先对FAT32文件系统有一个清晰的了解。

1 FAT32文件系统

应用笔记针对SD上的FAT32文件系统,在对文件系统作具体介绍之前,先回想一下硬盘的结构,如图1:

图1 硬盘结构

对一个机械硬盘而言。柱面、磁头、扇区确定唯一的扇区物理地址。在数据组织上来看,总是依照主引导区→引导扇区→数据→引导扇区…来排列,一块硬盘上,基本分区的最大数目为4个。大于4个的被自己主动分配为扩展分区。

SD卡的分区结构和普通磁盘类似,沿用了普通机械硬盘的大多数概念术语。

由于它无需启动,所以MBR区没有引导信息,图2是SD卡文件系统的典型结构。

图2 SD卡文件系统结构

1.1  主引导记录(MBR)

在一个硬盘中主引导分区位于硬盘的起始扇区,一共512个字节,包括了446字节的MBR和64字节的DPT,并以55 AA作为结束标志。

由于SD卡不用启动,因此MBR区域不包括引导数据,SD卡的MBR如图2所看到的,数据均为小端模式,低字节在前。

图2 SD卡MBR区域

图2所看到的为SD卡物理地址为0開始的512字节区域,红蓝线标注的数据包括了两个重要信息:

①  红线数据:表示下一个分区的扇区地址,这里是0x2000。即下一个分区从第8192个扇区開始。也就是DBR在第8192个物理分区(0逻辑分区)。

②  蓝线数据:表示总扇区数为0x01DAAC00,那么能够计算得到当前SD卡的总容量为:

ρ=0x01DAAC00*512= 14.83GB

1.2  引导扇区DBR

引导扇区DBR共512个字节。以55 AA结束,前11个字节为跳转指令和文件系统类型、版本信息。结构如图3所看到的。

图3 DBR内容

DBR为逻辑分区起始位置,须要关注下面重要信息:

①  偏移地址0x0D标记每簇的扇区数,图3显示为64,即每簇为32KB,文件系统中保存数据的最小单位为簇,仅仅要本簇中写入了当前文件的数据。它就不能够被其它文件使用。

②  偏移地址0xE~0xF标记了本分区的保留扇区数,图3中为598个,也就是说下一个分区(FAT表)的起始扇区为逻辑扇区598。

③  偏移地址0x10~0x11标记了FAT表的个数,图3显示为2个。

④  偏移地址0x24~0x27标记了FAT表的大小。图3显示为3797个。

1.3  信息分区FSINFO

信息分区FSINFO的结构很easy,用以记录文件系统中空暇簇的数量以及下一可用簇的簇号等信息,以供操作系统作为參考,常位于1号逻辑扇区。

如图4所看到的。

图4  FSINFO内容

图4中红色方框的为FSINFO签名。固定为0x61417272;蓝色方框中内容为文件系统的空簇数,依据使用情况动态变化;黑色方框为下一个空簇的位置,依据使用情况动态变化。

通常情况下,2号扇区也以55 AA结束,6号扇区是DBR的备份,7号扇区是FSINFO的备份。8号扇区是2号扇区的备份。

1.4  FAT表

从FAT表開始便是文件系统的核心内容。文件占用磁盘的最小单位是簇。即使文件仅仅有一个字节。那么它也占用一个簇的磁盘空间,大文件会占用多个簇。同一个文件的数据并非连续的存放在一段磁盘空间内,而是分成若干段,像链子一样存放。称之为文件的链式存储。为了实现文

件的链式存储。文件系统必须准确地记录哪些簇已经被文件占用,还必须为每一个已经占用的簇指明存储后继的下一个簇的簇号,对于文件的最后一簇。则要指明本簇无后继簇。这些都是由 FAT 表来保存的,FAT 表相应表项中记录着它所代表的簇的有关信息:诸如是空,是不是坏簇,是否是已经是某个文件的尾簇等。

对于FAT表而言。它的重要使命是:描写叙述簇的分配状态以及标明文件或文件夹的下一簇的簇号。

1.4.1 FAT表分析

FAT表中每簇的地址固定为32bit。按四字节对其进行划分。并由0開始进行编号。

0号和1号簇由系统保留作特殊使用,从2号簇開始相应文件系统的实际数据区的簇号,FAT表中的簇地址编号与数据区的簇号同样。

在创建文件系统(格式化)时。全部的FAT表均被清空,FAT1和FAT2的0、1号表项写入特定值,2号表项常为根文件夹,因此2号表被写入结束标志。

①  FAT32文件系统FAT表的0号表项固定为0x0FFFFFF8;

②  1号表项正常情况为0xFFFFFFFF或0x0FFFFFFF。也可能被用于记录脏标志,以说明文件系统没有被正常卸载或者磁盘表面存在错误。

③  若簇未被分配使用,则其FAT表项为0;

④  若该簇被使用,那么FAT表项值就是该文件下一个存储位置的簇号,如是文件结束簇,则写结束标志“0x0FFFFFFF”;

⑤  若该簇存在坏扇区。则用“0xF7FFFFF”标记该簇为坏簇;

⑥  新建文件夹时。仅仅为其分配一个簇的空间,相应的FAT表现写入结束标志,当文件夹超过一个簇时则在空暇区再为其追加一个簇并又一次建立FAT表链。

1.4.2   FAT表实例

图5是一个SD的FAT32文件系统FAT表,每四个字节一组表示一个簇的信息。簇号从0開始。

①  0x0FFFFFF8: FAT表起始标志;

②  0xFFFFFFFF:不用,默认值;

③  0x0FFFFFFF:根文件夹所在簇;

④  从FAT表项第3项開始记录存储文件的信息。FAT表第三项记录了存储文件的下一个簇号为4,…直到第七项结束。

图5 FAT32文件系统FAT表实例

根文件夹所在的簇为3号簇,这个偏移地址能够通过计算得出。

①  逻辑地址:保留区大小+FAT表大小*2。那么本文中描写叙述的文件系统根文件夹的位置为 598+3797*2 =8192。

即根文件夹从逻辑扇区第8192扇区開始。

②  物理地址:隐藏区域+逻辑地址。本例中隐藏区域在MBR表中能够看到是8192。那么根文件夹的物理地址就是从第16384个扇区開始。

本例中每32KB为一个簇,2号簇即存储根文件夹的实际数据区域。

1.5  根文件夹

根文件夹在文件系统建立时即已被创建。其目的就是存储文件夹(也称文件夹)或文件的文件夹项。每一个文件夹项的大小为32个字节。这32个字节能够是长文件名称文件夹项、文件文件夹项、子文件夹项等。图6是本例中根文件夹的内容。

图6 根文件夹内容

首先重点提醒图6中显示‘X’号的文件是已经删除但没有格式化的文件数据,仍然能够恢复读出,所以“关键

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值