精品基于uTenux的fatfs文件系统移植本科毕业论文.docx
- 文档编号:11091879
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:39
- 大小:43.15KB
精品基于uTenux的fatfs文件系统移植本科毕业论文.docx
《精品基于uTenux的fatfs文件系统移植本科毕业论文.docx》由会员分享,可在线阅读,更多相关《精品基于uTenux的fatfs文件系统移植本科毕业论文.docx(39页珍藏版)》请在冰豆网上搜索。
精品基于uTenux的fatfs文件系统移植本科毕业论文
本科毕业论文(设计)
题目:
基于uTenux操作系统的
FatFs文件系统移植
学院:
数学与计算机科学学院
完成日期:
2013年6月2日
基于uTenux操作系统的FatFs文件系统移植
摘要:
随着嵌入式技术的发展,尤其是ARM技术的不断更新,推出了cortex系列芯片,使得嵌入式设备的功能日益壮大,逐渐由单片机的时代过渡到微控制器的时代,对数据的访问量有了显著提高,这就要求数据操作层次清晰、透明度提高、可维护性、接口的标准化、移植性、灵活的操作和数据存储的可靠性等都提出了越来越高的要求,所以有必要引入文件系统来完成数据存储和管理的功能,为用户提供按名存取数据的接口,从而可以避免由程序开发人员直接访问内存所带来的不安全性。
本论文基于uTenux操作系统移植FatFS文件系统,详细论述了文件系统的实现原理,通过移植使得FatFS能在uTenux操作系统上运行。
实现文件和目录创建、打开、读取、写入、关闭等功能。
关键字:
微控制器;uTenux;FatFS;ARM
目录
1绪论1
1.1实时操作系统简介1
1.1.1实时操作系统的概念1
1.1.2常见的实时微控制器操作系统及其对比1
1.2嵌入式文件系统简介2
1.2.1文件系统概述2
1.2.2嵌入式文件系统一般体系结构3
1.2.3文件系统概述4
1.3嵌入式文件系统的必要性5
2uTenux实时操作系统6
3FatFS文件系统的移植7
3.1FAT协议介绍7
3.1.1FAT协议概述7
3.1.2FAT保留区8
3.1.3FAT表区10
3.1.4FAT目录区10
3.1.5FAT数据区11
3.2FatFS文件系统的配置11
3.3FatFS文件系统结构分析14
3.3.1FatFS模块结构14
3.3.2FatFS定义的结构体15
3.4SD卡接口17
3.4.1SD协议17
3.4.2SD命令18
3.5FatFS文件系统的移植19
3.5.1开发环境uT/Stdio19
3.5.2构建移植环境20
3.5.3初始化21
3.5.4读写函数23
4移植结果的测试24
5总结与展望26
参考文献28
致谢29
1绪论
1.1实时操作系统简介
1.1.1实时操作系统的概念
实时操作系统(Real-timeOperationSystem,RTOS):
系统能够及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致的运行的嵌入式操作系统。
在工业控制、航空航天、实时检测等流程控制要求非常精确的领域,必须要在指定的时间内做出指定的响应,这时就需要实时操作系统来控制。
我们常常说的嵌入式操作系统都是嵌入式实时操作系统,比如uTenux、uC/OS-II。
1.1.2常见的实时微控制器操作系统及其对比
1.uTenux微控制器操作系统
uTenux是一款优秀的开源免费的实时微控制器操作系统,是由大连悠龙软件科技有限公司开发与维护。
Tenux是由T-EngineLinux的缩写构成,Tenux具有(a)T-Engine的开源高实时性内核T-Kernel为内核;(b)Linux上丰富的开源中间件为中间件;(c)Eclipse+GNU开源开发工具为基础工具;(d)打造适合中国电子产品市场的开源嵌入式实时操作系统及方便的集成开发环境。
uTenux适用于微控制器(CortexM/ARM7,ROM:
大于64K),它的内核是uT-Kernel,具有丰富紧凑的中间件,比如FATFS、LWIP、FLTK。
适用产品:
小型物联网控制终端,比如机器人、智能仪表、小型数控机床、PLC、相机等。
它的特点有:
(1)所有源码公开、完全免费
(2)占有日本60%市场的成熟实时微内核
(3)支持函数和软中断两种方式
(4)抢占式实时多任务操作系统
(5)不需要MMU,占用ROM/RAM少
(6)可以支持所有32位ARM7/9和CortexM系列的微控制器
(7)可配置任意多个任务、任务的优先级最多255个
2.uCOS微控制器操作系统
uC/OSII(MicroControlOperationSystemTwo)是一个可以基于ROM运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统(RTOS)。
为了提供最好的移植性能,uC/OSII最大程度上使用ANSIC语言进行开发,并且已经移植到近40多种处理器体系上,涵盖了从8位到64位各种CPU(包括DSP)。
uC/OSII可以简单的视为一个多任务调度器,在这个任务调度器之上完善并添加了和多任务操作系统相关的系统服务,如信号量、邮箱等。
其主要特点有公开源代码,代码结构清晰、明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化。
内核属于抢占式,最多可以管理60个任务。
从1992年开始,由于高度可靠性、鲁棒性和安全性,uC/OSII已经广泛使用在从照相机到航空电子产品的各种应用中。
3.uTenux和ucos的对比
(1)uTenux有固定和可变尺寸内存池管理;ucos只有固定尺寸内存池。
(2)uTenux的邮箱支持消息队列和任务等待队列,因此发送多个消息都可以;ucos的邮箱只能发送一条消息,很简单。
(3)uTenux中有专门定义中断处理程序的系统调用-tk_def_int,很方便,而ucos中就没有。
(4)uTenux有Trace、Hook等调试功能,而ucosii没有。
(5)uTenux的任务堆栈等需要内存的地方,可以由系统自动分配也可以开发人员手工分配;但ucos只能手工分配。
(6)uTenux的任务、信号量等系统对象采用ID方式实现,用户看不到内部的数据结构,对于安全性比较好,使用也方便;而ucos是用户定义每个系统对象的变量。
(7)uTenux的任务间通信机制比ucos多了好几种,比如集合点端口等,而且每个通信机制都支持任务队列和消息队列。
(8)uTenuxV1.5的易用性没有ucos的强,幸好uTenux已经意识到自己的问题,向ucos的易用性学习,在模仿中超越对手。
(9)uTenux终身开源免费,无论是学习、商用、修改再发布,而ucos只有学习时是开源免费的,商用必须付费。
综上所述,学习uTenux的意义大于ucos。
1.2嵌入式文件系统简介
1.2.1文件系统概述
文件系统是操作系统的重要组成部分,用于控制对数据、文件及设备的存储[2]。
它提供对文件和目录的分层组织形式、数据缓冲以及对文件的存储权限的控制。
文件系统必须提供必要的用来创建、删除文件、读文件和写文件等相应的系统调用。
文件的存储通过目录完成,所以对目录的操作是文件系统功能的一部分,,文件系统应具有以下功能:
提供对文件和目录的分层组织形式;
建立与删除文件的能力;
文件的动态增长和数据保护。
硬盘的出现推动了针对桌面操作系统的文件系统的发展,同样,嵌入式存储设备特别是flash的出现,也推动了嵌入式文件系统的发展。
1.2.2嵌入式文件系统一般体系结构
在嵌入式文件系统中,嵌入式系统可以针对特殊的目的定制,特别是随着ASOS(为应用定制的嵌入式操作系统)的发展,对嵌入式操作系统的系统功能完整性和可伸缩性提出了更高的要求。
所以不得不采取一种灵活的系统体系结构,对于操作系统来说,文件系统是一个独立的子包含的整体,可以灵活的加载和卸载,这一切操作对操作系统内核的功能没有任何影响。
嵌入式文件系统系统体系结构从上到下一般有3层,如图1.1所示。
图1.1嵌入式操作系统体系结构
最上一层是文件系统的核心,使文件系统实现的核心算法,提供了用户可见的所有API函数,以供用户操作数据,这一层是文件系统功能的集合。
第二层是高速缓冲管理,高速缓冲区的大小直接关系到文件系统的处理效率,高效的缓冲区处理算法能大幅提高数据的处理效率;同时它为文件系统提供了与硬件无关的接口,为文件系统的层次性提供了基础。
最下面一层是设备驱动程序,涉及到具体的硬件。
设备驱动程序的另一个重要任务就是提供统一设备驱动接口。
文件系统和操作系统内核的关系主要体现在三方面:
实时时钟、信号量和中断管理。
用时钟实现外设任务的等待延时;用信号量实现外设的同步和互斥;用中断管理机制管理外设的中断处理程序。
1.2.3文件系统概述
目前,嵌入式文件系统解决方案比较多,由于嵌入式设备的多样性,相应文件系统的实现也有针对各种设备的,如只读存储器、可读存储器、Flash存储器等。
嵌入式文件系统也是要针对嵌入式操作系统的。
1.FatFS
FatFS是一个开源免费通用的文件系统模块,用于在小型嵌入式系统中实现FAT文件系统。
FatFs的编写遵循ANSIC,因此不依赖于硬件平台。
它可以嵌入到便宜的微控制器中,如8051、PIC、AVR、SH、Z80、H8、ARM等等。
它是window兼容的FAT文件系统,平台依赖性小,易于移植,代码和工作区占用非常小,有多种配置选项。
通过配置FatFS可以使得FatFS占用的RAM达到44字节,代码空间的占用可以小到2K-4K,在这样小的空间中它还能支持FAT32,这是以文件的写功能的限制为代价的。
FatFS是标准FAT文件系统的小型嵌入式文件系统,它是一个自由软件,可以用于教育、研究、商业。
在使用过程中不用担心被限制。
用户可以修改,重新发布以个人的身份。
但是必须在源代码中包含这个版权申明。
文件分配表FAT(FileAllocationTable)用来跟踪硬盘上每个文件的数据库,而FAT表存储关于簇的信息。
FAT表示microsoft在FAT文件系统中用于磁盘数据(文件)索引和定位引进的一种链式结构。
在FAT文件系统中,文件的存储依照FAT表制定的簇链式数据结构来进行。
同时,FAT文件系统将组织数据时使用的目录也抽象为文件,以简化对数据的管理。
FAT分区格式是microsoft最早支持的分区格式,依据FAT表中的每个簇链的所占位数分为FAT12、FAT16、FAT32三种形式,但其基本存储方式是相似的。
如图1.2所示。
图1.2FatFs模块结构
2.uC/FS
uC/FS是uCOS的文件系统,它是由Micrium公司新开发的一个产品,主要应用在使用uCOS内核的嵌入式系统中。
uC/FS是一个用于能提供基础访问功能的FAT格式的文件系统,是一个高效率的库,为高速、多功能及内存使用进行优化。
它用ANSIC编写,由不同的层次结构组成,包括API层、文件系统层、逻辑区块层、设备驱动和硬件层。
总之,在上述的嵌入式文件系统中,FatFS和uC/FS都用于小容量闪存设备,功能都比较齐全。
但是uC/FS是属于拥有知识产权的技术,是商业产品,而FatFS则完全是开源免费的,用户可以随时下载所有全代码,更改和再发布。
随着NANDFAlsh作为嵌入式系统中大容量存储介质的普及应用,FatFS文件系统作为开源代码的项目,得到芯片产商,项目开发人员的一致好评。
所以在本项目中选择FatFS作为目标文件系统。
1.3嵌入式文件系统的必要性
嵌入式系统过去主要用于工业控制领域,对效率的比较高,对于数据处理不够重视,引入文件系统不但没有必要而且会降低效率,所以很多嵌入式系统应用都没有加载操作系统。
随着嵌入式处理器性能的不断升级,嵌入式系统的功能不断加强,用户的需求也和功能复杂度的增加,许多嵌入式系统都面临着处理大量数据的问题;另外对于应用程序开发人员直接访问内存具有很大的风险性,需要对内存的访问进行封装。
综上所述在嵌入式操作系统内核和应用程序之间加一个文件系统成为必然趋势。
2uTenux实时操作系统
uTenux实时操作系统的体系结构如图2.1所示。
图2.1uTenux实时操作系统的体系结构
Board:
为uTenux所支持的处理器有ARM7、ARM9、CortexMx(x为0-4),用到的外设环境有通用输入输出端口(GPIO)、同步串口(SPI)、异步串口(UART)、存储设备(NandFlash/SD)、USB接口等。
uT/Kernel:
为uTenux的核心部分,主要包括了三个部分uT/OS是操作系统内核,包含了系统调用的所有API函数;uT/SM是终端函数,设备管理函数;uT/DS为调试所需要的函数,主要包括内核状态查询函数;
uT/Lib:
为操作系统移植相关部分,uT/CPU指的是系统的启动代码,执行CPU的初始化;uT/DEV这的是开发板上一系列外设的的初始化和配置文件;uT/TM指的是串口打印函数,这是为了开发人员方便使用而设置的。
StandCLib:
标准的C语言库,uTenux操作系统支持标准的C语言库。
目前支持C99标准库。
uT/Subass:
是uTenux上的一系列中间件,介于应用程序和操作系统之间。
包括GUI图形界面;FatFS文件系统;LWIP网络模块等等;
IDE/ICE:
分别表示uTenux所支持的开发环境,烧写工具等。
3FatFS文件系统的移植
3.1FAT协议介绍
3.1.1FAT协议概述
每个分区(卷)都是一个独立的文件系统;FAT文件系统将分区分为四个区域,保留区、FAT表区、目录区、数据区。
FAT表区:
FAT(FileAllocationTable)是文件分配表的简称,它是FAT文件系统最重要也是最根本的部分。
文件分配表记录了一个个链表,记录了每个文件片段的直接后继的地址,从而将一个个的文件片段连接起来,形成一个完整的文件。
一个FAT链表记录了一个完整的文件。
为了便于对数据的管理,FAT文件系统将目录也抽象为文件,这个目录下的所有文件称为这个目录文件的内容。
FAT文件系统存储文件的基本单位是簇,也就是说一个文件片段就是一个簇。
簇是文件系统中数据区的概念,一个分区(卷)中簇的多少,决定了这个文件系统中文件分配表中每个一个簇链所占用的位数,根据文件分配表每一个簇项所占用的位数将文件系统分为FAT12、FAT16、FAT32三种形式,但原理基本相同。
一个簇包含2的n次幂个扇区,每个扇区是512个字节或者是512的倍数。
扇区是在文件系统中可以统一使用的逻辑地址。
保留区:
保留区位于整个卷的最前面,记录了这个文件系统的一些基本的参数,比如扇区的大小,簇的大小,文件系统的类型,FAT表是否有备份,每张FAT表的大小,目录区的大小等。
目录区:
如果说FAT表区是记录的每个簇的直接后继的话,那么目录区则记录了这个链表的头结点,以及一些其他的文件属性,每天记录占用32个字节。
数据区:
用来以簇为单位存放文件内容。
一个文件是以链表的形式存放在卷中,数据区的每个簇都是这个链表一个结点的上内容。
综上,保留区记录了整个文件系统基本参数,以及剩余簇的数量。
FAT表区充当了一个链表的next结点。
目录区记录了每一个文件和目录的基本属性,以及每个文件的开始簇号。
数据区存放了每一个结点的内容。
每次的文件访问,文件系统都会从目录区的第一条(根目录)开始读取,查找链表进入文件或选择指定的文件。
3.1.2FAT保留区
保留区位于分区(卷)的第一个扇区,同时也属于FAT文件系统基本区域的保留区。
这个扇区又叫做“启动扇区”、“保留扇区”、“0扇区”。
众多的说法都是一个意思,该扇区是FAT卷的第一个扇区。
这个区域最重要的就是BPB(BIOSParameterBlock),FAT32的BPB内容和FAT12、FAT16的内容在BPB_Toset32区域以前完全一致,而从偏移36开始它们的内容才有所区别,这么做是为了启动扇区中存放一个完整的FAT12、FAT16或FAT32的BPB内容,以达到最好的兼容性。
表3.1FAT保留区各字段含义
名称
偏移byte
大小byte
描述
BS_jmpBoot
0
3
跳转指令,指向启动代码,有两种形式
BS_OEMName
3
8
标志字符串,建议值为“MSWIN4.1”
BPB_BytsPerSec
11
2
每个扇区的字节数,512取得最好兼容性
BPB_SecPerClus
13
1
每个簇的扇区数,必须为2的n次幂,簇大小必须小于32k
BPB_RsvdSecCnt
14
2
保留区中扇区的数目,FAT12/16为1,FAT32为32
BPB_NumFATs
16
1
FAT表的份数。
建议为2,这样就会有一个备份FAT表
BPB_RootEntCnt
17
2
在此卷中总共目录的项数,乘以32必须是512的倍数
BPB_TotSec16
19
2
此卷中扇区总数,若为0那么BPB_Tot32必须为非0
BPB_Media
21
1
存储介质的类型,固定存储介质0xF8,移动的为0xF0
BPB_FATSz16
22
2
一个FAT表所占用的扇区数,对于FAT32为0
BPB_SecPerTrk
24
2
每磁道的扇区数,用于BIOS的0x13中断
BPB_NumHeads
26
2
磁头数,用于BIOS的0x13中断
BPB_HiddSec
28
4
在卷之前的扇区数,用于BIOS的0x13中断
BPB_TotSec32
32
4
对于FAT32类型,为此卷的扇区总数
结束标志1
510
1
0x55
结束标志2
511
1
0xAA
从偏移36开始FAT12/FAT16的内容开始不同于FAT32,表3.2为FAT12/FAT16的内容:
表3.2FAT12/FAT16的内容
名称
偏移(byte)
大小
(byte)
描述
BS_DrvNum
36
1
用于BIOS中断0x13得到磁盘驱动器参数
BS_Reserved1
37
1
保留——供NT使用
BS_BootSig
38
1
扩展引导标记,用于指明后期的3个域可用
BS_VolID
39
4
卷标序列号,此域往往由日期和时间组成,用于检测磁盘
BS_VolLab
43
11
磁盘卷标,此域必须与根目录中11字长的卷标一致
BS_FilSysType
54
8
文件系统类型标记,此域为实际的字符串
FAT32的内容。
如下表3.3所示。
表3.3FAT32的内容
名称
偏移(byte)
大小
(byte)
描述
BPB_FATSz32
36
4
一个FAT表所占的扇区数
BPB_ExtFlags
40
2
Bit0-3:
不小于0的活动FAT数目
BPB_FSVer
42
2
高位为主版本号,低位为此版本号
BPB_RootClus
44
4
根目录所在的第一个簇号,通常为2
BPB_FSInfo
48
2
保留区中FAT32卷FSINFO结构所占扇区数,通常为1
BPB_BkBootSec
50
2
保留区中引导记录的备份数据所占的扇区数,通常为1
BPB_Reserved
52
12
保留
BS_DrvNum
64
1
同FAT12/16的定义
BS_Reserved1
65
1
同FAT12/16的定义
BS_BootSig
66
1
同FAT12/16的定义
BS_VolID
67
4
同FAT12/16的定义
BS_VolLab
71
11
同FAT12/16的定义
BS_FilSysType
82
8
同FAT12/16的定义,通常设为“FAT32”
3.1.3FAT表区
FAT表是文件系统一个重要的数据结构,每一个FAT表项绑定一个数据区的簇,即FAT表的表项数目与数据区的簇的数目相等,所以簇的数目决定了FAT表项所占的位数,如占12位则文件系统为FAT12,占16位则为FAT16,占32位则为FAT32,其中不允许出现其他的数字。
顺序的第一个FAT表项对应数据区的第一个簇,第二个表项对应数据区的第二个簇……。
就像每一袋鼠都有一个袋子一样,都可以用来存放自己的后继者。
簇的袋子就是对应的FAT表项。
FAT表项相当于链表的next结点,那么文件片段簇4的直接后继,就应该读取FAT表中的第4个表项,得到的值则为直接后继的簇号。
对于特殊的表项值进行了如下定义。
以FAT32为例,如表3.4所示。
表3.4FAT表区各个字段的含义
序号
FAT表项值
含义
1
0x00000000
表示本表项对应的簇为空簇,为可用簇
2
0x00000002
~0xFFFFFFEF
以用簇,表示本表项对应的下一个簇的簇号
3
0xFFFFFFF7
表示本表项对应的簇为坏簇
4
0xFFFFFFF8
置于FAT表的第一个表项,作为磁盘标识符
5
0xFFFFFFFF
设置FAT表的第二个表项,表示第一个簇被占用
6
0xFFFFFFF8
~0xFFFFFFFF
表示本表项对应的簇为最后一个节点
从表3.4可以看出,FAT表的第一和第二表项都有默认值,作为识别使用,所以文件系统没有簇0和簇1,簇的命名是直接从簇2开始的。
3.1.4FAT目录区
所有链表的根源都来自于目录区,目录区存放了一条条记录,表示各个目录和文件的基本属性。
每条记录占32个字节。
对于FAT32,目录区和数据区没有明显的界线,数据和目录是混合在一起的,每次写数据时都是先用最小的空闲簇。
每条记录的各个字段的含义如表3.5所示。
表3.5目录区各个字段的含义
名称
偏移(byte)
大小
(byte)
描述
DIR_Name
0
11
短文件名
DIR_Attr
11
1
文件属性:
只读(x01)、隐藏(0x02)、系统(0x04)、卷标(0x08)、目录(0x10)、归档(0x20)、长文件名(0x0F)
DIR_NTRes
12
1
保留给WindowNT使用
DIR_CrtTimeTenth
13
1
文件创建时间的毫秒戳,精度为2毫秒
DIR_CrtTime
14
2
文件创建时间
DIR_CrtDate
16
2
文件创建日期
DIR_LstAccDate
18
2
最后访问日期,只有日期
DIR_FstClusHI
20
2
该目录或文件的簇号的高位字
DIR_WrtTime
22
2
最后写的时间,文件被创建被认做写
DIR_WrtDate
24
2
最后写的日期,文件被创建被认做写
DIR_FstClusLO
26
2
该目录或文件簇号的低位字
DIR_FileSize
28
4
文件大小,由32-byte双字组成
3.1.5FAT数据区
文件是被分割成一个个的簇大小的片段,保存在数据区的不同地方。
簇是文件存储的基本单位,即使是一个只有一个字节的文件也要占用一个簇的空间。
3.2FatFS文件系统的配置
FatFS文件系统是高度可裁剪的,可以根据功能的需求,容量的需求,效率的需求,在ffconf.h中配置需要的功能。
函数和缓冲区的配置选项有:
_FS_TINY、_FS_READONLY、_FS_MINIMIZE、_USE_STRFUNC、_USE_MKFS、_USE_FORWARD、_USE_FASTSEEK。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 基于 uTenux fatfs 文件系统 移植 本科毕业 论文