精华内容
下载资源
问答
  • fat16文件系统

    2016-01-07 22:55:15
    支持单片机上运行的fat16文件系统,可用
  • fat16 文件系统

    2010-04-07 14:08:10
    fat16 文件系统fat16 文件系统fat16 文件系统
  • FAT16文件系统

    2017-07-04 19:53:20
    原文地址:FAT16文件系统作者:yoyoone1.基本知识 扇区:每个磁道被分为若干个弧段,这些弧段就是扇区。通常情况下,每个扇区512个字节。 簇:FAT将磁盘空间按一定数目的扇区为单位进行划分,这样的单位称为簇。簇的...
    原文地址:FAT16文件系统作者:yoyoone

    1.基本知识

    扇区:每个磁道被分为若干个弧段,这些弧段就是扇区。通常情况下,每个扇区512个字节。

    簇:FAT将磁盘空间按一定数目的扇区为单位进行划分,这样的单位称为簇。簇的大小一般为2的N次方。

     

    2.FAT16表的组织形式

        使用FAT文件系统必须具有几个部分:保留区,存放FAT的文件系统的重要参数和引导程序;FAT表,记录簇的使用情况;根目录区,记录根目录信息。

     

    Fat16的组织形式
    引导扇区 FAT1 FAT2(重复的) 根文件夹 其他文件夹及所有文件 剩余扇区
    1扇区 实际情况取大小 同FAT1 32个扇区 开始簇编号(从2开始) 不足一簇

        保留区的第一个扇区是DBR区,称为引导扇区。它是系统可访问的第一个扇区,主要包括与引导操作系统有关的引导参数和引导程序,还有与FAT文件系统有关的BPB参数

    1)DBR参数的偏移0x11处记录了根目录所占扇区的数目;偏移0x16记录了FAT表所占扇区的数据;偏移0x10记录了FAT表的副本数目。系统在得到这几项参数以后,就可以确定数据区的开始扇区偏移。
    2)FAT16文件系统从根目录所占的32个扇区之后的第一个扇区开始以簇为单位进行数据的处理,对于根目录之后的第一个簇,编号为第2簇。

    3)FAT文件系统之所以有12,16,32不同的版本之分,其根本在于FAT表用来记录任意一簇链接的二进制位数。以FAT16为例,每一簇在FAT表中占据2字节(二进制16位)。所以,FAT16最大可以表示的簇号为0xFFFF(十进制的65535)。

     

    3.FAT

        FAT表的作用是记录磁盘上簇的分配情况,系统中,会把FAT表全部读到内存中区。一个文件往往需要占用很多个簇。同一个文件不一定会完整地存放在一个连续的存储空间内,而是分成若干段,像链子一样地存放。在文件名记录中,指向文件存储的链头所在的FAT簇,而该簇的FAT表存放下一个链子的FAT簇值。

    FAT16记录项的取值含义(16进制)
    FAT16记录项的取值 对应簇的表现情况
    0000 未分配的簇
    0002~FFEF 已分配的簇
    FFF0~FFF6 系统保留
    FFF7 坏簇
    FFF8~FFFF 文件结束簇

     

    1)FAT表以"F8 FF FF FF" 开头。

    2)FAT表记录了磁盘数据文件的存储链表。

     

    4.FDT

     

        根目录区记录着SD卡里存储的所有文件和目录信息,如图所示。得到文件信息后,便可对相应文件进行操作。

     

    FAT16目录项32个字节的表示定义
    字节偏移(16进制) 字节数 定义
    0x0~0x7 8 文件名
    0x8~0xA 3 扩展名
    0xB 1 属性字节 00000000(读写)
    00000001(只读)
    00000010(隐藏)
    00000100(系统)
    00001000(卷标)
      00010000(子目录)
    00100000(归档)
    0xC~0x15 10 系统保留
    0x16~0x17 2 文件的最近修改时间
    0x18~0x19 2 文件的最近修改日期
    0x1A~0x1B 2 表示文件的首簇号
    0x1C~0x1F 4 表示文件的长度

     

    1)0x0偏移处的取值若为00H,表明目录项为空;若为E5H,表明目录项曾被使用,但对应的文件或文件夹已被删除。

     

    5.DBR

     

    表6  一个FAT16分区上的引导扇区段
    字节位移 字段长度(字节) 字段名称
    0x00 3 跳转指令(Jump Instruction)
    0x03 8 OEM ID
    0x0B 25 BPB
    0x24 26 扩展BPB
    0x3E 448 引导程序代码(Bootstrap Code)
    0x01FE 4 扇区结束标识符(0x55AA)

     

     

     

    表7  FAT16分区的BPB字段     
    字节位移 字段长度(字节) 例值 名称和定义
    0x0B 2 0x0200 扇区字节数(Bytes Per Sector) 硬件扇区的大小。本字段合法的十进制值有512、1024、2048和4096。对大多数磁盘来说,本字段的值为512
    0x0D 1 0x40 每簇扇区数(Sectors Per Cluster) 一个簇中的扇区数。由于FAT16文件系统只能跟踪有限个簇(最多为65536个)。因此,通过增加每簇的扇区数可以支持最大分区数。分区的缺省的簇的大小取决于该分区的大小。本字段合法的十进制值有 1、2、4、8、16、32、64和128。导致簇大于32KB(每扇区字节数*每簇扇区数)的值会引起磁盘错误和软件错误
    0x0e 2 0x0001 保留扇区数(Reserved Sector) 第一个FAT开始之前的扇区数,包括引导扇区。本字段的十进制值一般为1
    0x10 1 0x02 FAT数(Number of FAT)该分区上FAT的副本数。本字段的值一般为2
    0x11 2 0x0200 根目录项数(Root Entries) 能够保存在该分区的根目录文件夹中的32个字节长的文件和文件夹名称项的总数。在一个典型的硬盘上,本字段的值为512。其中一个项常常被用作卷标号(Volume Label),长名称的文件和文件夹每个文件使用多个项。文件和文件夹项的最大数一般为511,但是如果使用的长文件名,往往都达不到这个数
    0x13 2 0x0000 小扇区数(Small Sector) 该分区上的扇区数,表示为16位(<65536)。对大于65536个扇区的分区来说,本字段的值为0,而使用大扇区数来取代它
    0x15 1 0xF8 媒体描述符( Media Descriptor)提供有关媒体被使用的信息。值0xF8表示硬盘,0xF0表示高密度的3.5寸软盘。媒体描述符要用于MS-DOS FAT16磁盘,在Windows 2000中未被使用
    0x16 2 0x00FC 每FAT扇区数(Sectors Per FAT) 该分区上每个FAT所占用的扇区数。计算机利用这个数和FAT数以及隐藏扇区数来决定根目录在哪里开始。计算机还可以根据根目录中的项数(512)决定该分区的用户数据区从哪里开始
    0x18 2 0x003F 每道扇区数(Sectors Per Trark)
    0x1A 2 0x0040 磁头数(Number of head)
    0x1C 4 0x0000003F 隐藏扇区数(Hidden Sector) 该分区上引导扇区之前的扇区数。在引导序列计算到根目录和数据区的绝对位移的过程中使用了该值
    0x20 4 0x003EF001 大扇区数(Large Sector) 如果小扇区数字段的值为0,本字段就包含该FAT16分区中的总扇区数。如果小扇区数字段的值不为0,那么本字段的值为0

     

     

     

    展开全文
  • 本文主要介绍了FAT16文件系统格式说明。
  • FAT16文件系统知识

    2011-04-16 10:00:13
    FAT16文件系统知识 FAT16文件系统知识 FAT16文件系统知识
  • SD卡FAT16文件系统的学习笔记
  • SD卡FAT16文件系统

    2014-10-22 14:12:44
    SD卡FAT16文件系统介绍!
  • 基于FAT16文件系统的嵌入式温度记录器、电子技术,开发板制作交流
  • FAT16文件系统介绍

    2009-09-03 10:40:07
    基于SD卡的嵌入式文件系统 FAT16文件系统 拿出来大家分享一下
  • 嵌入式FAT16文件系统

    2008-09-03 23:45:03
    嵌入式FAT16文件系统 本文件是嵌入式FAT文件系统的说明书,嵌入式FAT文件系统开发及使用人员均可阅读本文件,以掌握文件系统原理,和使用本文件系统。
  • 单片机读写U盘FAT32或FAT16文件系统.doc
  • fat16文件系统的详细描述,便于一些小型设备中文件系统的建立
  • FAT16 文件系统格式说明FAT16 文件系统格式说明
  • FAT16文件系统说明及代码.本文件是嵌入式FAT文件系统的说明书,嵌入式FAT文件系统的开发和使用人员都可通过阅读该文件,以掌握和使用文件系统。
  • Xinnova Cortex M0 MCU FAT16 文件系统
  • FAT16文件系统简介

    千次阅读 2014-12-17 10:06:56
    本文转自:《FAT16文件系统简介》 有必要说明一下,以下对FAT16系统的介绍,很多都是参考文献。由于FAT16系统一般在U盘、MMC卡、SD卡以及一些小型存储设备上使用比较多,以后把这些小型存储设备统称为存储卡,...

    本文转自:《FAT16文件系统简介》


    有必要说明一下,以下对FAT16系统的介绍,很多都是参考文献。由于FAT16系统一般在U盘、MMC卡、SD卡以及一些小型存储设备上使用比较多,以后把这些小型存储设备统称为存储卡,这里仅局限于对存储卡的介绍,但很有针对性,而且比较全面。

    参考来源:http://www.sjhf.net/pdf/fat.pdf

    1.1 存储卡的结构

    FAT16文件系统把存储卡的划分为几个区,包括DBR扇区、保留扇区、FAT表1、FAT表2、根目录和数据区,具体结构如图1-1所示,其实保留扇区包含MBR扇区,这里把DBR标志出来是为了强调它的重要性。

     

     

    DBR扇区

     

     

    保留扇区

     

     

    FAT表1

     

     

    FAT表2

     

     

    根目录

     

     

    数据区

    图1-1 存储卡的结构图

    1.2 DBR扇区:

    DBR区(DOS BOOT RECORD)即操作系统引导记录区的意思,也称为引导扇区或启动扇区。它记录了存储卡的所有重要信息,一共512个字节,其结构如图1-2所示:

    跳转指令JUMP

    OEM厂商标志

    BPB和扩展BPB

    引导代码

    结束标志0xAA55

    图1-2 DBR结构

     

    为了更好的理解DBR扇区,下面我们可以用WinHex打开一个存储卡,看一下DBR的结构,如图1-3所示。

     

    在图1-3的最下面,可以明显的看到有“55 AA”的字样,这就是启动扇区的结束标志,它为16进制,大端格式,即把高字节放在低地址,高字节放在搞地址,读出来就是0xAA55。以下涉及的数据都是这样存储的。

     


    根据图1-2和图1-3,表1-1给出了引导扇区各个字段的定义和说明。

     

    表1-1  一个FAT16分区上的引导扇区段

    字节位移

    字段长度(字节)

    字段名称

    0x00

    3

    跳转指令(Jump Instruction)

    0x03

    8

    OEM ID

    0x0B

    25

    BPB

    0x24

    26

    扩展BPB

    0x3E

    448

    引导程序代码(Bootstrap Code)

    0x01FE

    4

    扇区结束标识符(0xAA55)

     

    2.1.2.1 跳转指令JUMP

    图1-3所列出的偏移0x00-0x02的跳转指令“EB 3C 90“,清楚地指明了引导代码的偏移位置。“jump 3CH“加上跳转指令所需的位移量2,即开始于0x3E。此段指令在不同的操作系统上和不同的引导方式上,其内容也是不同的。

    2.1.2.2 OEM厂商标志

    跳转指令之后是8 字节长的OEM ID,它是一个字符串,OEM ID标识了格式化该分区的操作系统的名称和版本号。为了保留与MS-DOS的兼容性,通常Windows格式化该盘是在FAT16磁盘上的该字段中记录了“MSDOS5.0”,如图1-3所示。

    2.1.2.3 BPB和扩展BPB

    BPB(BIOS Parameter Block)参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数、分配单元(也称之为簇)的大小等重要参数。如表1-2和表1-3所示(来自参考资料【2】)

     

    表1-2  FAT16分区的BPB字段     

    字节位移

    字段长度(字节)

    例值

    名称、定义和描述

    0x0B

    2

    0x0200

    扇区字节数(Bytes Per Sector) 硬件扇区的大小。本字段合法的十进制值有512、1024、2048和4096。对大多数磁盘来说,本字段的值为512

    0x0D

    1

    0x10

    每簇扇区数(Sectors Per Cluster) 一个簇中的扇区数。由于FAT16文件系统只能跟踪有限个簇(最多为65536个)。因此,通过增加每簇的扇区数可以支持最大分区数。分区的缺省的簇的大小取决于该分区的大小。本字段合法的十进制值有 1、2、4、8、16、32、64和128。导致簇大于32KB(每扇区字节数*每簇扇区数)的值会引起磁盘错误和软件错误

    0x0e

    2

    0x0006

    保留扇区数(Reserved Sector) 第一个FAT开始之前的扇区数,包括引导扇区。

    0x10

    1

    0x02

    FAT数(Number of FAT)该分区上FAT的副本数。本字段的值一般为2

    0x11

    2

    0x0200

    根目录项数(Root Entries) 能够保存在该分区的根目录文件夹中的32个字节长的文件和文件夹名称项的总数。在一个典型的硬盘上,本字段的值为512。其中一个项常常被用作卷标号(Volume Label),长名称的文件和文件夹每个文件使用多个项。文件和文件夹项的最大数一般为511,但是如果使用的长文件名,往往都达不到这个数。

    0x13

    2

    0x0000

    小扇区数(Small Sector) 该分区上的扇区数,表示为16位(<65536)。对大于65536个扇区的分区来说,本字段的值为0,而使用大扇区数来取代它。

    0x15

    1

    0xF8

    媒体描述符( Media Descriptor)提供有关媒体被使用的信息。值0xF8表示硬盘,0xF0表示高密度的3.5寸软盘。媒体描述符要用于MS-DOS FAT16磁盘,在Windows 2000中未被使用

    0x16

    2

    0x00F5

    每FAT扇区数(Sectors Per FAT) 该分区上每个FAT所占用的扇区数。计算机利用这个数和FAT数以及隐藏扇区数来决定根目录在哪里开始。计算机还可以根据根目录中的项数(512)决定该分区的用户数据区从哪里开始

    0x18

    2

    0x003F

    每道扇区数(Sectors Per Trark)

    0x1A

    2

    0x00FF

    磁头数(Number of head)

    0x1C

    4

    0x000000400

    隐藏扇区数(Hidden Sector) 该分区上引导扇区之前的扇区数。在引导序列计算到根目录和数据区的绝对位移的过程中使用了该值

    0x20

    4

    0x000F4C00

    大扇区数(Large Sector) 如果小扇区数字段的值为0,本字段就包含该FAT16分区中的总扇区数。如果小扇区数字段的值不为0,那么本字段的值为0

     

    表1-3   FAT16分区的扩展BPB字段           

    字节位移

    字段长度(字节)

    图8对应取值

    名称、定义和描述

    0x24

    1

    0x80

    物理驱动器号( Physical Drive Number) 与BIOS物理驱动器号有关。软盘驱动器被标识为0x00,物理硬盘被标识为0x80,而与物理磁盘驱动器无关。一般地,在发出一个INT13h BIOS调用之前设置该值,具体指定所访问的设备。只有当该设备是一个引导设备时,这个值才有意义

    0x25

    1

    0x01

    保留(Reserved) FAT16分区一般将本字段的值设置为1

    0x26

    1

    0x29

    扩展引导标签(Extended Boot Signature) 本字段必须要有能被Windows 2000所识别的值0x28或0x29

    0x27

    2

    0xABA13358

    卷序号(Volume Serial Number) 在格式化磁盘时所产生的一个随机序号,它有助于区分磁盘

    0x2B

    11

    "NO NAME"

    卷标(Volume Label) 本字段只能使用一次,它被用来保存卷标号。现在,卷标被作为一个特殊文件保存在根目录中

    0x36

    8

    "FAT16"

    文件系统类型(File System Type) 根据该磁盘格式,该字段的值可以为FAT、FAT12或FAT16

    2.1.2.4 引导代码和结束标志

    在图1-3中,偏移0x3E开始的数据为操作系统引导代码。这是由偏移0x00开始的跳转指令所指向的,此段指令在不同的操作系统上和不同的引导方式上,其内容也是不同的,这里就不对引导代码进行探讨了,因为它涉及的很多东西,且本设计并没有使用到它。

    扇区的最后两个字节存储值为0xAA55的DBR有效标志,对于其他的取值,系统将不会执行DBR相关指令。

    2.1.2 关于保留扇区

    操作系统之所以设置保留扇区,是为了对DBR作备份或留待以后升级时用。当DBR扇区被破坏导致分区无法访问时。可以用保留扇区的备份替换第0扇区来找回数据。在图1-3中,DBR偏移量0x0E位置的2个字节是0x0006,指明了保留的扇区数为6,即第一个FAT开始之前的扇区数,它包括引导扇区。

    2.1.3 FAT表和数据的存储原则

    FAT(File Allocation Table 即文件分配表)是Microsoft在FAT文件系统中用于磁盘数据(文件)索引和定位引进的一种链式结构。它有两个,为的是备份。假如把磁盘比作一本书,FAT表可以认为是相当于书中的目录,而文件就是各个章节的内容,但FAT表的表示方法与目录有些不同。

    在FAT文件系统中,文件的存储依照FAT表制定的簇链式数据结构来进行。同时,FAT 文件系统将组织数据时使用的目录也抽象为文件,以简化对数据的管理。

    图1-5所示给出了某个存储卡上FAT表的数据。

    图1-5 FAT表

     

    FAT 文件系统之所以有12,16,32 不同的版本之分,其根本在于FAT 表用来记录任意一簇链接的二进制位数。以FAT16为例,每一簇在FAT表中占据2个字节(二进制16位)。所以,FAT16最大可以表示的簇号为0xFFFF,以32K为簇的大小的话,FAT16可以管理的最大磁盘空间为:32KB×65535=2048MB,这就是为什么FAT16不支持超过2GB分区的原因。

    FAT表实际上是一个数据表,以2个字节为单位,我们暂将这个单位称为FAT记录项,从图1-5中,可以知道,前两个记录项(即前四个字节)是0x7FFFFFF8,它是FAT表的标志,通常情况,第1、2个记录项用作介质描述。从第三个记录项开始记录除根目录外的其他文件及文件夹的簇链情况。根据簇的表现情况FAT用相应的取值来描述,见表1-4。

     

    表1-4 FAT16 记录项的取值

    FAT16 记录项的取值

    对应簇的表现情况

    0x0000

    未使用的簇

    0x0002~0xFFEF

    已分配的簇

    0xFFF0~0xFFF6

    系统保留

    0xFFF8~0xFFFF

    文件结束

     

    FAT表记录项存放的数据是它下一个FAT表项的位置,我们来分析一下图1-5的FAT表,相对偏移量0x4~0x5的数据是0xFFFF,表示存储在这一簇上的文件(或目录)只占用1个簇的空间。偏移量0x6~0x7的数据是0x0004,指向了第4簇,也就是说这个文件还没有结束,它还有数据存放在第4簇,我们找到第4簇,也就是偏移量0x08~0x09的地方,数据是0x0005,这个文件的数据也没有结束,它指向了第5簇,我们这样一直找下去,直到找到偏移量为0x14~0x15的地方,数据位0xFFFF,表明这个文件到此就结束了,可以算的这个文件大小占8个簇。

    2.1.4 根目录

    FAT文件系统的目录结构其实是一颗有向的从根到叶的树,这里提到的有向是指对于FAT 分区内的任一文件(包括文件夹),均需从根目录寻址来找到。可以这样认为:目录存储结构的入口就是根目录。

    FAT 文件系统根据根目录来寻址其他文件(包括文件夹),故而根目录的位置必须在磁盘存取数据之前得以确定。FAT文件系统就是根据分区的相关DBR参数与DBR中存放的已经计算好的FAT表(2 份)的大小来确定的。格式化以后,根目录的大小和位置其实都已经确定下来了——位置紧随FAT2之后。

    FAT文件系统的一个重要思想是把目录(文件夹)当作一个特殊的文件来处理,在FAT16中,虽然根目录地位并不等同于普通的文件或者说是目录,但其组织形式和普通的目录(文件夹)并没有不同。FAT 分区中所有的文件夹(目录)文件,实际上可以看作是一个存放其他文件(文件夹)入口参数的数据表。其具体存储原理是:不管目录文件所占空间为多少簇,一簇为多少字节。系统都会以32个字节为单位进行目录文件所占簇的分配。这32个字节以确定的偏移来定义本目录下的一个文件(或文件夹)的属性,实际上是一个简单的二维表。这32个字节的各字节偏移定义如表1-5所示。

     

    表1-5 目录项字段定义

    偏移地址

    字节数

    说明

    0x00~0x07

    8

    文件名

    0x08~0x0A

    3

    扩展名

    0x0B

    1

    属 性

    00000000(读写) 00000001(只读) 00000010(隐藏) 00000100(系统) 00001000(卷标)

    00010000(目录) 00100000(归档)

    0x0C~0x15

    10

    保留

    0x16~0x17

    2

    文件最近修改时间

    0x18~0x19

    2

    文件最近修改日期

    0x1A~0x1B

    2

    文件的首簇号

    0x1C~0x1F

    4

    文件长度大小

     

    以下对表1-5中的一些取值进行说明:

    1、对于短文件名,系统将文件名分成两部分进行存储,即主文件名+扩展名。0x0~0x7 字节记录文件的主文件名,0x8~0xA记录文件的扩展名,取文件名中的ASCII码值。不记录主文件名与扩展名之间的"." 主文件名不足8 个字符以空白符(20H)填充,扩展名不足3个字符同样以空白符(20H)填充。0x0 偏移处的取值若为00H,表明目录项为空;若为E5H,表明目录项曾被使用,但对应的文件或文件夹已被删除。(这也是误删除后恢复的理论依据)。文件名中的第一个字符若为“.”或“..”表示这个簇记录的是一个子目录的目录项。“.”代表当前目录;“..”代表上级目录(在dos中,使用命令“cd ..“就是返回上一级目录)。

     

    2、偏移量0x16~0x17中的时间=小时*512+分钟*32+秒/2。偏移量0x18~0x19中的日期=(年份-1980)*512+月份*32+日。得出的结果换算成16 进制填入即可。

     

    3、偏移量0x1A~0x1B存放文件或目录的表示文件的首簇号,系统根据掌握的首簇号在FAT表中找到入口,然后再跟踪簇链直至簇尾,同时用0x1C~0x1F处字节判定有效性。就可以完全无误的读取文件。

     

    说明:由于篇幅过长,这里就不对长文件名和子目录的存储方式进行说明了。FAT16虚拟文件系统我已实现(已上传),创建的虚拟硬盘有启动扇区,保留扇区,fat表和更目录,可用WinHex工具(已上传)查看里面的内容,和一个真实硬盘没有区别,我还设计了数据恢复的功能。


    PS:


      FAT16文件系统:FAT的全称为File Allocation Table,即“文件分配表”。FAT分为16位与32位两个不同的版本。如果只说“FAT”,则专指FAT16文件系统。FAT16文件系统的兼容性好,可以被MS-DOS、 Windows及其他多种操作系统识别,但是由于不支持大于2GB的硬盘, 现在已被淘汰。
      文件系统的缺点:磁盘利用效率低
      因为在Windows系统中,磁盘文件的分配是以“簇”为单位的,一个簇只分配给一个文件使用,不管FAT16这个文件占用整个簇容量的多少。由于这个原因,即使一个很小的文件,它也要占用了一个簇,剩余的空间便全部闲置在那里,形成了磁盘空间的浪费。由于分区表容量的限制,FAT16支持的分区越大,磁盘上每个簇的容量也越大,造成的浪费也越大。
      【注意】:分区格式也被称为“文件系统”,例如,FAT16、FAT32、NTFS、 EXT2、EXT3等都属于文件系统。每个分区必须使用一种文件系统,才能存取数据。没有文件系统的分区是无法使用的。


    展开全文
  • Fat16文件系统源码

    2009-02-01 16:06:41
    关于Fat16文件系统的源码,开发手持设备的朋友可以参考,为单片机设计的.
  • SD卡上FAT32, FAT16文件系统源代码
  • fat16文件系统C语言源码

    热门讨论 2012-03-02 11:19:03
    使用C语言实现的fat16文件系统 ,包含了制作方法,是我的操作系统的课程设计,代码具有跨平台性,可以到linux系统上makefile一下就可以使用了,附件中的是在window上的编译结果和源码以及文档.如果你需要,分数也不贵,这...
  • fat16 文件系统的结构

    千次阅读 2017-03-15 15:45:44
    首先先了解下FAT16文件系统的基本结构依次为:DBR扇区、FAT表1、FAT表2、根目录和数据区。 DBR扇区:DBR是操作系统可以直接访问的第一个扇区,包括一个引导程序和一个称为BPB的本分区参数记录表。引导程序的主要任务...

    1.引言

    FAT文件系统在Windows比较常见,相对于ext系统而言,也比较简单。是学习文件系统的切入点。

    2.FAT16的基本结构

        首先先了解下FAT16文件系统的基本结构依次为:DBR扇区、FAT表1、FAT表2、根目录和数据区。

        DBR扇区:DBR是操作系统可以直接访问的第一个扇区,包括一个引导程序和一个称为BPB的本分区参数记录表。引导程序的主要任务是当MBR将系统控制权交给它时,判断本分区跟目录前两个文件是不是操作系统的引导文件。如果确定是,就将其读入内存,并把控制权交给该文件。BPB参数块记录着本分区的启始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数、分配单元的大小等重要参数。

        FAT1,FAT2:是簇的链表。在根据目录项获取文件的首簇号后,在FAT 找到对应的簇,可以找到下一个簇,一直到文件结束。对于FAT16,每个簇用16Bit来表示,而对于FAT32,使用32Bit来表示。这应该是两者之间的重要区别。

        根目录:根目录的作用就是有文件或者目录的首簇号,以及文件的长度(目录的长度是0)。FAT16中,根目录的所占空间可以根据BPB中的参数——Maximum Root Directory Entries(0x11,2bytes)。

        数据区:文件等数据待的地方。紧跟着根目录。从2号簇开始。

    3.查找文件的过程

        根据DBR中的一些参数得到FAT和根目录的位置。根据根目录得到次级目录的簇号(对于更多级的目录依此类推),来到该簇后,再根据文件名得到查到对应的文件的首簇和文件长度。根据文件长度得到文件所占的簇的数量。由首簇号到FAT查看文件的簇链表,依次得到文件的各个簇,从而也就得到了文件的全部内容。

    4.查找文件示例

        选取安卓手机中modem 分区作为对象。modem 在机台里的挂载点是firmware,可以adb  shell 进去系统之后,cd firmware看看里面的内容。里面有两个文件夹:image和verinfo。而我的目的就是要读到verinfo文件夹里面的文件ver_info.txt。将modem dd出来,然后使用winhex查看二进制文件。

    4.1 DBR

        先看通过winhex查看的结果。这个扇区里面基本上能得到大部分的文件系统的参数。(特别注意,存储是按照小端模式)

    下面的表,解释了一些主要参数的意义。


    4.2 FAT

        根据上面的参数,我们可以算出FAT1的偏移地址以及根目录的偏移值。

    FAT1偏移地址:保留扇区(FAT1之前的扇区,包括引导扇区)之后就是FAT1。因此可以得到,FAT1的偏移地址就是1个扇区的位置,也就是512。

    FAT2偏移地址:FA1偏移地址+FAT1的大小,512+21*512 = 11264


    2字节表示一个簇的状态。具体意义如下表所示:


    每个簇对应的0x0002-0xFFEF之间的值,表示要读取文件那么下一个簇的簇号。

    4.3 根目录

        根目录偏移地址: FAT2偏移地址+ FAT2的大小,11264+21*512= 22016

    下面看一下根目录的前面部分:


    看到这里,就可以看到前面提到的两个文件夹了。在根目录中,一个文件或者一个目录用32字节来表示。


        因此,可以得到,verinfo目录的首簇号是 9F 12 也就是 0x129F = 4767号簇。

    根目录的偏移地址是22016,根目录占32个扇区,所以,2号簇的位置是:22016+32*512=38400 。可以得到verinfo的偏移地址是38400 +(4767-2)*512*32 = 78108160

    看看这个位置的二进制:


        显然,接下来可以看到这个目录下面,会有ver_info.txt的文件的首簇号和文件的长度。首簇号是 A0 12 也就是0x12A0=4768。文件长度是1F 也就是31<<512*32,因此只占一个簇,不需要回去查看FAT来找到剩下的簇。

    根据簇号,又可以得到这个文件所在位置:(4768-2)*512*32+38400 = 78124544

    看看这个位置的二进制:


        到这里,也就看到了我们要查看的文件的内容。事实上,这和用mount挂载出来看到的结果是一样的,撒花~~

    看这个还是花了很多时间的。FAT16和FAT32也有所区别,但是实际上大同小异。下篇写ext2文件系统的结构。

    参考文章:http://www.xuebuyuan.com/598485.html

    http://blog.csdn.net/menghnhhuan/article/details/4270168  

    非常感谢!

    展开全文
  • 绍了 SD 卡的基本结构和技术特征,详细说明了使用 MSP430单片机和 SD 卡设计的FAT16文件系统,给出了接口电路和相应的软件系统设计。该系统适用于大容量的现场数据采集、存储,并在动态心电图记录系统中得到了应用。
  • 本文件是嵌入式FAT文件系统的说明文件,嵌入式FAT文件系统开发及使用人员均可阅读本文件,以掌握和使用本文件系统。 2. 参考文件 1) Microsoft Hardware White Paper FAT: General Overview of On-Disk Format 2) ...
  • FAT16文件系统之FAT表浅谈(三)

    千次阅读 2017-07-23 17:26:20
    FAT16文件系统的FAT表分析

    FAT16文件系统的FAT表分析

    1:FAT表的作用及结构特点

                    FAT即文件系统分配表,对于FAT文件系统来讲是非常重要的一环。其主要作用如下

    (1)      FAT文件系统一般有两份FAT,它们由格式化程序对分区进行格式化的时候创建,FAT1是活动FAT,FAT2是备份FAT。

    (2)      FAT1跟在DBR之后,FAT2跟在FAT1之后中间没有空的扇区

    (3)      FAT表由FAT表项构成的,我们把FAT表项简称为FAT项。每个FAT项的大小有12位,16位,32位,三种情况,对应的分别FAT12,FAT16,FAT32文件系统。

    (4)      每个FAT项都有一个固定的编号,这个编号是从0开始。

    (5)      FAT表的前两个FAT项有专门的用途:0号FAT项通常用来存放分区所在的介质类型,例如硬盘的介质类型为“F8”,那么硬盘上分区FAT表第一个FAT项就是以“F8”开始,1号FAT项则用来存储文件系统的肮脏标志,表明文件系统被非法卸载或者磁盘表面存在错误。

    (6)      分区的数据区每一个簇都会映射到FAT表中的唯一一个FAT项。因为0号FAT项与1号FAT项已经被系统占用,无法与数据区的族形成映射,所以从2号FAT项开始跟数据区中的第一个簇映射,正因为如此,数据区中的第一个族的编号为2,这也是没有0号簇与1号簇的原因,然后3号簇与3号FAT项映射,4号簇与4号FAT项映射。。。。。。。。。。

    (7)      分区格式化后,用户文件以簇为单位存放在数据区中,一个文件至少占用一个簇。当一个文件占用多个簇时,这些族的簇号不一定是连续的,但这些簇号在存储该文件时就确定了顺序,即每一个文件都有其特定的“簇号链”。在分区上的每一个可用的簇在FAT中有且只有一个映射FAT项,通过在对应簇号的FAT项内填入“FAT项值”来表明数据区中的该簇是已占用,空闲或者是坏簇三种状态之一。

                                            FAT表中每个FAT项可取的表项值及其含义

    FAT项值(FAT12)

    FAT项值(FAT16)

    FAT项值(FAT32)

    含义

    000H

    0000H

    00000000H

    未使用的簇

    002H – FEFH

    0002H - FFEFH

    00000002H – 0FFFFFFEH

    一个已分配的族号

    FF0H – FF6H

    FFF0H – FFF6H

    0FFFFFF0H – 0FFFFFF6H

    保留

    FF7H

    FFF7H

    0FFFFFF7H

    坏簇

    FF8H - FFFH

    FFF8H - FFFFH

    0FFFFFF8H – 0FFFFFFFH

    文件结束簇

    其中损坏的族可以在格式化过程中,由格式化程序发现并记录在相应的FAT项中。在一个簇中,有一个坏的扇区,该簇就不能使用。
    (8)FAT16文件系统的FAT项是16位的,也就是说每个FAT项占2字节。16位的FAT项最多可管理65535个簇。在Windows 2000系统之前簇最大为64个扇区,这样,采用16位FAT的系统最多只能管理32 * 65535 约于 2G的分区。现在簇大小可以达到128个扇区,这样FAT16就可以管理4G的分区了。

    (8)      综合上面的说明可以看出,FAT表的功能主要有如下:

    A:表明分区所在介质类型。FAT表的0号FAT项来表明分区所在的介质类型,该FAT项的首字节与BPB中介质描述符所对就的介质类型相同

    B:表明一个文件所占用各簇的簇链分配情况。每个簇在FAT表中映射一个FAT项,FAT项以指针的方式记录在文件的簇。

    C:标明可用簇与坏簇。坏簇是在分区格式化时发现的,并把相应的簇表的项写入FFF7H.用户不能使用。

    分区上未被使用但可用的“空簇“的FAT项值为0,



    展开全文
  • FAT16文件系统在单片机存储系统上的实现方法。
  • FAT16文件系统解析(C 版本)

    千次阅读 2018-11-10 10:36:14
    FAT16文件系统解析(C 版本)
  • fat16文件系统在单片机存储系统上的实现

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,375
精华内容 950
关键字:

fat16文件系统