基于Nand Flash/Smart Media卡的FAT文件系统实现 (毕业设计60页、24949字)
摘要:微软公司推出的FAT(File Allocation Table)文件系统是一个相当成熟的文件系统,它起源于70年代末80年代出。它最初是为小于500K的软盘驱动器设计的简单文件系统。后来被加强可以支持越来越大的存储媒体空间。当前存在3种FAT文件系统类型:FAT12,FAT16,FAT32。这些子类型的基本区别和命名的原因是磁盘上FAT机构目录项比特数的大小。FAT12的存储簇目录项有12比特,FAT16的存储簇目录项有16比特,FAT32的存储簇目录项是32比特。 随着行业发展,原有的FAT16文件系统已经不在适应公司产品越来越大的存储媒体空间,做FAT32文件系统变的很急迫。同时由于业务需要,必须实现长文件名机制,并要求不断完善。这里着重介绍FAT32实现和长文件名的实现机制。提出一些工程项目中存在的问题,和相应的解决办法。
关键词:FAT文件系统;FAT32文件系统;长文件名
Realize of FAT file system based on Nand Flash and Smart Media card
Abstract:The FAT (File Allocation Table) file system supported by Microsoft corporation is quite maturate.it has its origins in the late 1970s and early1980s. It was originally developed as a simple file system suitable for floppy disk drives less than 500K in size. Over time it has been enhanced to support larger and larger media. Currently there are three FAT file system types: FAT12, FAT16 and FAT32. The basic difference in these FAT sub types, and the reason for the names, is the size, in bits, of the entries in the actual FAT structure on the disk. There are 12 bits in a FAT12 FAT entry, 16 bits in a FAT16 FAT entry and 32 bits in a FAT32 FAT entry. Along with the profession development, original FAT16 file system is not in the adaptation with company products which have more and more big memory media space, so doing the FAT32 file system looks very urgent.Meanwhile as a result of the service need, we must realize the long filename mechanism, and requests to consummate unceasingly.Here introduces the FAT32 and the long filename realization mechanism emphatically.Proposed some existing engineering project questions, with corresponding solution.
Key words: FAT file system, FAT32 file system, long file name
目 录
第1章 绪 论 1 1.1 课题的目的和意义 1 1.2 研究范围和要达到的技术要求 1 1.3 课题在国内外的发展概况及存在的问题 1 1.4 课题的指导思想和本课题应解决的主要问题 2 第2章 FAT文件系统 3 2.1 FAT文件系统概述 3 2.2 FAT文件系统详述 4 2.2.1 关于MBR 4 2.2.2 引导扇区DBR和BPB 4 2.2.3 FAT表原理 7 2.2.4 FAT文件系统的目录结构 9 2.2.5 长文件/目录名结构 10 2.3 FAT文件系统相关说明 12 2.3.1 FAT文件系统相应的计算 12 2.3.2 FAT32和FAT16(FAT12)的区别 15 2.3.3 长文件名全面阐述 16 2.4 本章小结 18 第3章 FAT32文件系统的实现 19 3.1 SD卡(SECURE DIGITAL MEMORY CARD)的逻辑格式化 19 3.2 逻辑层设置BPB 23 3.3 逻辑层重设置FDP(FAT DISK PARAMETER STRUCTURE) 24 3.4 逻辑层底层读写函数 26 3.5 本章小结 29 第4章 FAT文件系统长文件名 30 4.1 创建目录函数 30 4.2 查找函数 37 4.3 改变当前路径函数 38 4.4 打开关闭文件函数 38 4.5 读文件函数 40 4.6 写文件函数 43 4.7 文件相关函数 44 4.7.1 文件结束检测 44 4.7.2 出错检测 44 4.7.3 清除文件错误 44 4.8 文件的随机读写 44 4.9 文件的当前位置 45 4.10 文件重命名函数 45 4.11 删除文件函数 47 4.12 删除目录函数 47 4.13 本章小结 47 第5章 调试和程序相关说明 49 5.1 调试工具 49 5.2 调试方法 50 结 论 52 致 谢 54 参考文献 55 第1章 绪 论
1.1 课题的目的和意义 熟悉公司现有产品的文件系统,使能够处理工程项目中出现的BUG 。实现兼容FAT12/FAT16/FAT32的文件系统,完善现有系统的长文件名机制。使该软件可直接用于公司相关的嵌入式产品中。培养开发人员的工程软件的思考能力、开发能力和调试能力,使能胜任公司的职务要求。 1.2 研究范围和要达到的技术要求 基于Nand Flash和SD卡的FAT12/FAT16/FAT32文件系统。实现在现有产品文件系统(FAT12/FAT16)中添加FAT32结构和完全支持长文件名。解决以前项目遗留的BUG 。 1.3 课题在国内外的发展概况及存在的问题 所谓文件系统,它是操作系统中藉以组织、存储和命名文件的结构。磁盘或分区和它所包括的文件系统的不同是很重要的,大部分应用程序都基于文件系统进行操作,在不同种文件系统上是不能工作的。常用的文件系统有很多,MS-DOS和Windows 3.x使用FAT16文件系统,默认情况下Windows 98也使用FAT16,Windows 98和Me可以同时支持FAT16、FAT32两种文件系统,Windows NT则支持FAT16、NTFS两种文件系统,Windows 2000可以支持FAT16、FAT32、NTFS三种文件系统,Linux则可以支持多种文件系统,如FAT16、FAT32、NTFS、Minix、ext、ext2、xiafs、HPFS、VFAT等,不过Linux一般都使用ext2文件系统。现在已经有新一代的Linux文件系统如SGI公司的XFS、ReiserFS、ext3文件系统等出现。 我公司用的是FAT文件系统。FAT(File Allocation Table 文件分配表)文件系统起源与70年代末80年代初,是由微软公司的MS-DOS操作系统支持的文件系统。它最初是为小于500K的软盘驱动器设计的简单文件系统。后来被加强可以支持越来越大的媒体空间。当前存在3种FAT文件系统类型:FAT12,FAT16,FAT32。这些子类型的基本区别和命名的原因是磁盘上FAT机构目录项比特数的大小。FAT12的存储簇目录项有12比特,FAT16的存储簇目录项有16比特,FAT32的存储簇目录项是32比特。FAT文件系统是一个相当成熟的文件系统。经过20多年的发展,规范标准,可靠稳定。支持各种不同大小的存储媒体。 FAT文件系统最大的缺点是,根目录和FAT固定在特定的扇区,如果这些区域出了问题,会导致整个文件系统的毁灭;另外FAT是链状的,在读写文件时,如果频繁移动文件指针(读写起点位置),可能对导致速度大幅度下降。另外低版本的FAT文件系统只支持短文件8.3格式(8字节基本部分和3字节扩展名),所以FAT长文件名的处理比较麻烦,考虑与低版本的兼容问题,容易出错。如果文件系统毁坏,包含长文件名FAT的文件系统的数据恢复比较困难。 另外,Flash介质都有写次数的寿命,比如100000次可能会损坏,这种特性在磁盘文件系统中是没有考虑的,因此无论FAT或者Linux的文件系统,在资源分配是都遵从从头到为搜索自由块给申请者使用的策略,这种策略对FLash潜在的威胁是前面的扇区可能已经写穿了,后面的扇区还是处女扇区。这个问题我们已经很好解决掉。通过在FAT文件系统和物理硬件中间添加了一个文件传输层,动态分配物理空间解决的。也就是说我们的物理扇区和逻辑扇区的对应关系不是固定的。这里不深入介绍。 1.4 课题的指导思想和本课题应解决的主要问题 工程软件,首先要稳定。本课题并不是从无到有的开发,所以要吸收前人的工作。尽量减少修改,能添加就不修改。即要继承,在原有FAT12/FAT16的基础上实现FAT32,修改添加长文件名机制。实现较好的兼容性。不能耽误整个项目的进程或影响以前的项目。 本课题是一个工程项目,是把标准转化为商业的价值。首先须解决的问题是稳定可靠,创新固然可取,实用才是重要的。软件语句要简单易读,又要能高效执行。其次缩短开发周期,不写花哨的代码垃圾。因为别人看不懂的代码是没有意义的,文挡和注释工作要做好。最重要的是解决BUG ,使得系统稳定,这是长期的工作,解决每个BUG的同时可能发现更多的BUG,踏踏实实做好每一步,完善和维护文件系统。
|