Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10119
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2015-11-15 10:12
文章分类
文章存档

2015年(5)

我的朋友

分类: Windows平台

2015-11-18 11:12:26

关于FAT32文件系统和在嵌入式端移植,可参考镇南的zn-FAT
本文主要说FAT32文件系统的构成。FAT16文件系统类似,主要差别在簇划分和首目录簇的区别。

FAT32文件系统的主要划分


注:
        1、在引导扇区之前,还有一个MBR区
MBR区主要是负责磁盘分区(C盘、D盘)、分区的起始扇区等等,一般在U盘或者SD卡上嵌入文件系统时,不需要分区,这个MBR也就可以省略。
        2、保留扇区的扇区数是自由的,可以设定为任意保留扇区数。我们可以设定一定数值的保留扇区数,让频繁修改的FAT区与重要信息的BPB区处于不同的BLOCK区(取决于你的FLASH),避免影响到BPB区的内容。
   

1.DBR

硬盘各分区的逻辑管理方式表现为,所有分区内的逻辑扇区都是从“0”开始编号,直至其最大值-1,涵盖整个分区,分区内的0扇区称为BOOT区。由Format命令将DOS引导记录(DBR)写到该扇区,主要功能是完成系统的自举。DOS引导扇区结构如下:

1)跳转指令“EB 58 90”(固定内容 3Byte)

2)厂商标识和DOS版本号(8Byte

3BPB(BIOS Parameter BlockBIOS参数块 53Byte)
        (4)拓展BPB(26Byte)

4DOS引导程序,负责完成DOS三个系统文件的装入(420Byte)

5)有效扇区,结束标专“55 AA”(2Byte)

硬盘DOS引导记录中BPB参数信息:

偏移量

字节数

含义

00H

3

跳转到引导代码

03H

8

厂商标识和DOS版本号

0BH

2

 

 

 

BPB参数信息

每扇区字节数

0DH

1

每簇扇区数(2的整数倍)

0EH

2

保留扇区数(FAT32一般为32

10H

1

FAT个数(通常为2

11H

2

根目录项数(早期版本允许最大目录基数)

13H

2

扇区总数(小卷,小于32MB)(FAT16系统)

15H

1

磁介质描述符(F8表示硬盘)

16H

2

FAT表所占扇区数(小卷,FAT16系统)

18H

2

每磁道扇区数

1AH

2

逻辑磁头数

1CH

2

当前分区前面隐含扇区数(系统隐含扇区)

20H

4

扇区总数(大卷,大于32MB)(FAT32系统)

FAT32区段

24H

4

每个FAT表所占扇区数(大卷,FAT32系统)

28H

2

标记

2AH

 

版本

2CH

4

引导目录第一簇,即根目录的起始簇

30H

2

FS信息扇区,BOOT本身占用的扇区数

32H

2

备份引导扇区的位置

34H

7

保留,一般为00H

40H

1

BIOS设备(从80开始,编号到8586为光驱)

41H

1

未使用

42H

1

扩展引导标记

43H

4

序列号

47H

11

卷标

52H

8

文件系统


2.文件分配表(FAT

    是DOS文件管理系统用来记录每个文件的存储位置的表格,它以链的方式存放簇号。FAT紧接着DOS引导扇区存放。磁盘上有两个FAT,一个是基本表,另一个是备份。两个表的内容相同。每个FAT所占用的扇区数取决于DOS版本、分区大小、每簇的扇区数等因素。可查BPB参数查询到。

簇号的长度由簇的多少决定,进而取决于FAT表项的位数。


文件系统簇大小划分
分区大小 FAT16簇大小 FAT32簇大小 

16MB-32MB 2KB 不支持 
32MB-127MB 2KB 512bytes 
128MB-255MB 4KB 512bytes 
256MB-259MB 8KB 512bytes 
260MB-511MB 8KB 4KB 
512MB-1023MB 16KB 4KB 
1024MB-2047MB 32KB 4KB 
2048MB-8GB 不支持 4KB 
8GB-16GB 不支持 8KB 
16GB-32GB 不支持 16KB 
32GB以上 不支持 32KB 

FAT表中,每一个登记项占用4字节,信息表项值含义如下:

 FAT簇登记项中,01号登记项是表头,簇的登记项从2号开始。

在FAT文件系统中,FAT表后面就是文件系统的DATA区。DATA区的第0和第1簇是被系统占用的,所以我们的第一个首目录簇在第二簇。FAT32与FAT16一个重要的区别就在于,FAT16的首目录簇(根目录)是不可以拓展簇的,只有一个扇区的大小(512Byte),只能存放(512/32)个文件目录项。而FAT32的首目录簇(根目录)是可以拓展的(取决于你的硬件大小)。

3.文件目录项FDT

 

根目录下的所有文件及其子目录在根目录的文件目录表中都有一个“目录登记项”。每个目录登记项用32个字节,提供有关文件和子目录的信息。FAT32文件系统目录项含义:


(1)0-7字节:文件名
(2)8-10字节:文件扩展名
(3)11字节:文件属性,按二进制定义,最高二位保留不用,0-5位分别表示只读位、隐藏位、系统位、卷标位、子目录和归档位,当11字节为“0FH”时,表示该项为长文件名记录项。为0x00-读写;0x01-只读;0x02-隐藏;0x04-系统;x08-卷标;0x10-子目录;0x20-归档。
(4)12-13字节:(仅长文件目录项有效)用来存储其对应的短文件名目录项的文件名字节校验和。
(5)14-15字节:24位二进制文件建立时间,其中高5位为小时,次6位为分钟,再次5位的倍数为秒,最后8位为单位精确到10毫秒的创建秒数。
(6)16-17字节:16位二进制文件建立日期,高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期
(7)18-19字节:16位二进制文件最新访问日期,同16-17字节。
(8)20-21字节:起始簇高16位
(9)22-23字节,16位二进制文件最新修改时间,同13-15前16位
(10)24-25字节:16位二进制文件最新修改时间,同16-17字节
(11)26-27字节:起始簇低16位
(12)28-31字节:32位文件字节长度。

注:

(1)子目录项,其长度为0,已删除目录项的首字节值为E5H

(2)文件目录项保存该文件的短文件名,长文件名用若干个长文件名目录项保存,每一项最多保存13个字符内码,首字节指明是长文件名的第几项,11字节为0FH12字节指明类型,13字节为校验和,26,27字节为零。




阅读(932) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~