静美隔音窗:振南的znFAT

来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 04:21:33

振南的znFAT

              --单片机上的FAT32文件系统

 

                 第一章 FAT32文件系统初探

一开始我们先不讲FAT32诸多的技术细节,对于一个刚刚接触FAT32的人来说,了解它的一些由来和发展历程,以及与其相关的知识,我认为是十分有必要的。当然也不乏很多人已经对FAT32有了一定的认识,或者急切想学习FAT32的具体内容,那么您就可以跳过这一章,而直入主题了。

 

第一节 从DOS说起

     要说起FAT32文件系统,追根溯源,还要从DOS时代说起。自1981年DOS被开发出来以后,经过不断的改进和发展,直到1987年,才成为一个真正优秀的、让微软立于霸主地位并为其带来巨额利润的系统。此时的DOS版本为3.3,又经过7年的时间,微软发布了DOS的闭关之作,这就是DOS7。

     即使您不是研究计算机的,您也一定听过DOS,而DOS到底是什么?DOS与FAT32文件系统又有何等的关系?可能您没有深入的研究。DOS,字面上来说,就是Disk Operating System,即磁盘操作系统。顾名思义,DOS向用户提供了在磁盘上进行相关操作的接口与服务。更通俗地讲,就是使我们通过它可以访问和操作磁盘上的目录与文件,比如创建目录、创建文件、读取文件数据、拷贝文件等等。在很大程度上,DOS及其以后的Windows能够得到极大的成功,都得益于“文件”。有人会问,操作系统可以运行软件、可以管理任务,这些与文件又有什么关系?确切的回答是,这些与文件有极为密切的联系,起码软件本身就有可能是一个EXE文件,操作系统本身也会有很多的库文件,来作为软件运行的支持,软件运行中可能会产生一些文件……基本上一切操作系统上的各种应用都会与文件有关。这就奠定了文件系统在操作系统中的重要地位,对于DOS来说,它主要的工作就是管理磁盘上的文件与目录,文件系统自然是它的重中之重,核心中的核心了!这里就引出了DOS中所使用的文件系统,这也是当今盛行的FAT32文件系统的前身,至今仍在延用,即FAT12/16。

第二节  Windows中的文件系统

在微软的MS-DOS大行其道的时候,Windows已经在研制之中了,Windows1.0在1985年11月发布出来,其实就是一个图形界面的MS-DOS,原来的命令输入方式变为了鼠标点击方式。如图1.0所示为Windows1.0的界面。  

                 

                  图1.0 Windows1.0的界面

虽然Windows1.0已经有了较为华丽的界面,但它的功能与MS-DOS基本上差不多,主要工作就是进行磁盘文件和目录的管理。其实从某种意义上来讲,MS-DOS与早期的Windows并不能算是操作系统,他们在任务管理方面仍然较弱。

Windows继1.0之后又发布了2.0、3.0,尤其是1990年发布的3.0是一个全新的版本,并取得了巨大成功,两年内销售量就达到了1000万份拷贝。随后又相继发布95、98、2000、XP等等,其中95真正使Windows大众化,首次引入了“开始”按钮和任务栏,大大方便了用户的使用,也使其成为了一种标准模式,此后的Windows中仍在延用,直到今日。98在95的基础上进一步改进,这里要说的是在这一版本中引入了较为成熟的FAT32文件系统,并马上体现出了其自身的优势。

    其实FAT32文件系统首次投入使用是在Windows95OSR2中,这个版本很少有人知道,俗称为Windows97。这也是FAT32文件系统的一次尝试,在很多方面还不是很成熟,所以微软并没有进行宣传。从这里,我们也可以看到文件系统在Windows中的份量。

纵观微软操作系统产品的发展史,从DOS到Windows,再从Windows1.0到现在的Windows7,规模越来越大,功能也越来越强大,但文件系统在其中的地位从未动摇,并且得到了极大的发展,所以我们研究FAT32文件系统是十分有意义的。

第三节  FAT32是FAT文件系统的终级演化

FAT,字面上的意思是文件分配表(File Allocation Table),它可谓是FAT文件系统的特色,也是灵魂。

其实FAT文件系统早在1977年就已经由比尔·盖茨和马斯·麦当劳发明了,为得是管理磁盘。1980年被添·彼得逊的86-DOS操作系统(86-DOS可以看作是MS-DOS的前身)采用。

FAT文件系统的最基本思想就是使用链式结构来记录文件数据的位置,这样就允许文件数据的存放可以不连续,从而极大的提高了磁盘的利用率。FAT文件系统又分为不同的版本,用后面的数字进行区别,分别有FAT12、FAT16、FAT32,不同的版本在支持的分区容量、簇大小等方面都不尽相同。

FAT12是FAT文件系统中最古老的文件系统了,在DOS3.0之前使用。它采用12位文件分配表,并因此而得名(以后的FAT文件系统都按照这样的方式在命名)。FAT12可以管理的磁盘容量是8M。这在当时,它的磁盘管理能力已经算是很强了,因为当时还没有硬盘,主要还是在软盘上应用。直到现在,我们仍然可以看到FAT12的身影。

FAT16是使用时间最长的FAT文件系统了。在DOS2.0使用的过程中,其实磁盘的容量也在不断扩大,从而造成FAT12无法管理较大容量的磁盘,这样FAT16在DOS3.0中应运而生。除了采用了16位的分区表之外,FAT16和FAT12在其他地方都非常的相似。前期的FAT16管理磁盘的能力实际只有32M,到了1987年DOS4.0的时候,FAT16发展到可以支持128M,随后又到达2G。在整整10年的时间里,存储技术得到突飞猛进的发展,磁盘容量也与日俱增。于是在1997年发布的Windows95OSR2中首次引入了FAT32文件系统,这也是本书的主角。

FAT32文件系统是FAT文件系统的最后一个产品。和它的前辈一样,这种格式采用32位的文件分配表,磁盘的管理能力大大增强。FAT32文件系统最大可以支持2T的磁盘,但在WindowsXP中实际最大只能支持32G。FAT32是对前面FAT文件系统的传承,但并不是简单加长了文件分配表项的长度,而是一个全新的产品。比如FAT32 可以重新定位根文件夹;使用文件分配表的备份副本,而不是使用默认副本;根文件夹是成为了普通的簇链,从而使得根文件夹下的文件或目录不再有数量限制……对于这些新的特性,也许你暂时还不知所云,或者不能深刻认识到它们的好处,这是因为您对FAT32文件系统还没有足够的了解。

在后面章节的学习中,您会渐渐为FAT32的巧妙设计赞叹不已!

第四节  随处可见的FAT32文件系统

在粗略的了解FAT32文件系统之后,您可能要问了,FAT32文件系统再强大,那也是计算机上的事情,与单片机底上的应用又有什么关系呢?在笔记本电脑都是奢侈品的年代,这样的质疑是有道理的,脱离开了计算机,人们确实在日常生活看不到文件系统的存在。

到了今天,嵌入式技术极速发展,手持式设备,如手机、MP3、数码相机、DV等等,比比皆是,FAT32文件系统已经早已挣脱了计算机的束缚,被应用在了更多领域之中。手机、DV中影音文件的存储与读取;MP3中音频文件的录制与播放……您觉得这些应用中是什么在起着重要的作用?那当然是文件系统!而其中占主导地位的就是FAT文件系统,而FAT32就是FAT文件系统中最经典,最强大的一个版本!

在嵌入式设备中,更确切的说,是在嵌入式微处理器及相应的存储设备中实现FAT32文件系统,意义是十分重大的。它使得在嵌入式设备上创建的文件及写入的数据,可以为Windows等支持FAT32文件系统的操作系统直接识别和读取;反之,嵌入式设备上也可以识别和读取操作系统上创建的文件及其数据。我们可以举一个简单的例子来进行说明:拿MP3来说,在Windows将MP3的存储器格式化为FAT32文件系统,并向其中拷入音频文件,比如MP3、WMA等等。将MP3从计算机上拔下后,它就可以识别出存储器上的相应文件,打开文件、读取数据送到MP3解码电路,这样就实现了音频播放。相反的,一些MP3是可以录音的,会将声音录制为WAV文件,直接记录在存储器中,如果这个WAV文件是遵循FAT32文件系统的话,那么我们可以在操作系统上直接看到MP3中的这个WAV文件,直接用WMP或MMC等播放器播放。我想只要是玩过MP3的人,一定有这种经历。

那么没有文件系统到底行不行呢?回答是,行!但这样的设备不是很专业的人估计就玩不转了。还拿上面的MP3例子来说,在录音的时候,如果MP3中没有文件系统,那么它可能采用的方式就是把声音数据直接写到存储器的物理扇区中去。这样把它放到操作系统上去之后,操作系统根本就不知道这些声音数据在哪些扇区上,更无法将它们识别为一个文件。所以虽然数据确实在存储器中,但一般人是没办法把它们读出来了。除非你是这方面的高手,知道声音数据记录到了哪些扇区,也知道如何去读取物理扇区,还要知道怎么把这些数据还原为文件,这样的工作估计没几个人会作,即使是在硬件方面很有经验的人,也要研究几天。如果真是这样,那么这样的MP3又有谁会买,MP3也绝不会像今天这样大众化,而可能只会成为少数高手眼中的玄妙之物。

总而言之,文件系统已经广泛应用于各种设备之中,正是因为文件系统的存在才使得众多的电子产品变得越来越普及,连老人和小孩都可以使用自如。那些物理上的数据,在人们面前已经变成了一个文件的图标了,要访问他,只要用手中之笔轻触即可!如图1.1,是PPC上的文件浏览器的界面。

           

           图1.1 PPC上的文件浏览器的界面

到这里我们已经了解了文件系统的重要了,可以说它是物理设备与我们的上层应用的桥梁,使我们直接以文件的方式看到数据,而不用了解数据在物理设备中的存储情况和诸多细节,让我们把更多精力放在应用层的软件开发和功能的实现上。

这里要说的是,要自己在嵌入式的微处理器上实现FAT32文件系统,也绝非是一件易事,它要求你懂得微处理器的使用和开发方法、存储设备的驱动程序开发、FAT32文件系统的运行机制、硬件及软件的测试方法等等,总之,这已经不是一个简单的Hello World!!程序了,而是一个较为复杂艰巨的工程。但即使是这样,我们也仍有信心将它作好,因为我们拥有最重要的两样东西:坚韧不拔的毅力和浓厚丰富的开发经验!!

从下一章开始,我们就真正进入到去FAT32文件系统的学习研究中了,了解FAT32文件系统中的各种技术细节以及会遇到哪些问题,大家也可以看到在znFAT中是如何将FAT32文件系统付诸实现的。