嵌入式文件系统简介
- 格式:doc
- 大小:28.50 KB
- 文档页数:5
嵌入式FAT文件系统嵌入式FAT文件系统1.总则本文件是嵌入式FAT文件系统技术资料,嵌入式FA T文件系统开发,应用人员均可通过阅读本文件,以掌握文件系统的原理,和应用。
2.参考文件1)Microsoft Hardware White Paper FAT: General Overview of On-Disk Format2)Microsoft Hardware White Paper Long Filename Specification3.命名规范1)盘符命名规范a)盘符以物理磁盘分区的先后次序分配,从C开始到Z结束2)文件命名规范(支持长文件名)a)文件名由文件名和扩展名两部分组成,其中1)短文件名长度不超过8个字符,长文件名长度不超过255个字符2)文件扩展名不超过3个字符b)文件名统一使用英文字母、数字和下划线的组合c)文件名称必须由字母开始d)文件名不区分大小写4.文件寻址路径规范1)文件寻址路径规范采用与Windows/DOS兼容的规范,其中a)在路径的开始在“:\”前面用一个英文字母表示寻址盘符,盘符从C开始到Z结束;路径以字符“\”开始,则表示从当前打开盘符根目录开始寻址;路径以字符“A”“Z”开始,第二个字符不是“:”,为相对路径,表示从文件系统的当前目录开始寻址;b)父目录与子目录之间用“\”分符,“\”后面的目录是子目录,其父目录在“\”之前。
c)文件名应放在文件寻址路径之后,相对路径文件寻址路径默认为文件系统的当前目录d)使用进入目录函数char cd_folder(char * foldername,char mode)可改变文件系统的当前目录e)路径实例--“c:\dos\program files\arv.c”表示寻址c盘根目录,dos子目录,programfiles子目录的文件avr.cf)路径最大长度占用字节数不超过260,如路径”c:\programfiles\system32\.....\Jsmart Memory Stick AVR”占用字节数不能超过260;相对路径如” system32\.....\Jsmart Memory Stick A VR”加上当前目录之和占用字节数不超过260g)文件寻址路径不区分大小写5.源程序文件规范1)fat.c—file system 源代码2)fat.h—file system include文件3)Fat_cfg.h—file system 配置文件*.h4)Types.h—数据类型重定义文件5)Flash_management_sys.h—Sector读写include文件6.其它1)兼容FAT16文件系统,长文件名,最大路径长度260个字节,符合Microsoft Longfilenamespecification。
摘要以嵌入式系统的日常应用引入,从嵌入式系统的定义与组成入手,对嵌入式系统的开展近况进展深入的介绍,介绍嵌入式软件技术的主要开展方向,并简要介绍了µc/os-II系统的移植。
一、引言不管是日常生活中经常使用的家庭自动化产品、家用电器、手提、自动柜员机(ATM),还是各行各业的办公设备、现代化医疗设备、航空电子、计算机网络设备、用于工业自动化和监测的可编程逻辑控制器(PLCs),甚至是娱乐设备的固定游戏机和便携式游戏机等都属于嵌入式系统。
嵌入式系统始于微型机时代的嵌入式应用,通过将微型机嵌入到一个对象体系中,实现对象系统的智能化控制。
随着科技的不断开展,在单片机时代,嵌入式系统以器件形态迅速进入到传统电子技术领域中,以电子技术应用工程师为主体,实现传统电子系统的智能化。
而后,随着后PC时代的到来,网络、通信技术得以开展;同时,嵌入式系统软、硬件技术有了很大的提升,形成了基于嵌入式系统软、硬件平台,以网络、通信为主的非嵌入式底层应用的计算机应用模式。
嵌入式系统通常应用于消费类、烹饪、工业、自动化、医疗、商业及军事领域。
在电信系统中,从网络级的交换机到手机终端都部署了大量的嵌入式系统;消费级电子产品诸如PDA、MP3、移动、游戏机、打印机等都部署了嵌入式系统。
二、嵌入式系统的定义及组成嵌入式系统被定义为:以应用为中心、以计算机技术为根底、软硬件可裁剪、适应应用系统,对功能、可靠性、本钱、体积、功耗严格要求的专用计算机系统区别于可以执行多重任务的通用型计算机,嵌入式系统是为某些特定任务而设计的。
有些系统那么必须满足实时性要求,以确保平安性和可用性;另一些系统那么对性能要求很低甚至不要求性能,以简化硬件、降低本钱。
嵌入式系统主要由嵌入式微处理器、外围硬件、嵌入式操作系统以及用户的应用程序等4个局部组它是集软硬件于一体的可独立工作的“器件〞,其中备成外围硬件设备和用户应用程序皆是基于不同的用户需求而有相应的不同的硬件及相关软件。
嵌⼊式Linux中常见的⽂件系统及特点1、Linux可⽀持的⽂件系统有多种,但是这么多种的⽂件系统都是基于Linux内核所提供的⽂件系统VFS的接⼝API。
因此对于Linux内核级别实现的⽂件系统只有VFS虚拟⽂件系统; 其余实现的⽂件系统都是调⽤VFS⽂件系统的API更上⼀层实现的;2、Linux⽂件系统的组成结构: 1、⽤户层:⽤户层向外提供Linux内核所⽀持⽂件系统的VFS的API接⼝ 内核层:内核实现了所说的各种⽂件系统 驱动层:驱动层是块设备的驱动程序 硬件层:硬件层是不同⽂件系统⽀持的存储器;3、Linux启动时的⽂件系统: 硬件上电启动,各项硬件初始化后,第⼀个启动的⽂件系统时RootFS根⽂件系统,如果说根⽂件系统没有起来,系统出现异常、将重启;4、常⽤的⽂件系统运⾏、存储设备有: DRAM、SDRAM以及ROM其中常使⽤flash;5、根据不同的存储介质,常见的⽂件系统有: 基于Flash(Nor、Nand)的⽂件系统有: jffs2:可读写,数据压缩、⽀持哈希表的⽂件系统,掉电保护;缺点:不适合使⽤在⼤容量的Nand Flash中,内存使⽤量太⼤极⼤降低数据操作速度; yaffs:读写速度快,占⽤内存⼩,实现内存访问异常处理;混合的垃圾回收算法;特别适合嵌⼊式设备使⽤;跨平台、⾃带Nand 芯⽚驱动 cramfs:只读的⽂件系统,执⾏速度快,内容⽆法扩充;⽂件系统健壮; romfs:简单紧凑、只读、不⽀持动态擦写;较多使⽤在uclinux系统上; 基于RAM存储介质的⽂件系统: ramdisk:将⼀部分固定⼤⼩的内存当做分区使⽤,不能真正算的上实际的⽂件系统,更像是⼀种机制,将实际的⽂件系统加载到内存中;将⼀些经常被访问的⽽⼜不会更改的⽂件放⼊到内存中,达到提⾼系统效率的⽬的;同时还负责将内核镜像与⽂件系统⼀块加载到内存中; ramfs/tmpfs :基于内存的⽂件系统,⼯作于虚拟⽂件系统层,可以创建多个⽂件系统,可以指定每个⽂件系统最⼤使⽤内存;这种⽂件系统将所有的⽂件都放在RAM中,既可以提⾼读写速度,也可以避免对flash⼤量的读写操作;⽂件系统不可以格式化,占⽤内存⼤⼩可以指定; ⽹络⽂件系统: NFS:是⼀种基于⽹络共享技术,可以在不同平台、不同机器、不同操作系统上实现⽂件共享、⽂件传输;在嵌⼊式Linux系统初始开发阶段可以⾮常⽅便⽂件传输、⽂件修改;地址异常进⼊模式描述0x0000,0000复位管理模式电平复位0x0000,0004未定义指令异常未定义模式遇到不能处理的指令,⽆法识别的指令0x0000,000c 软件中断管理模式异常发⽣时CPU处理的步骤:R13(sp),R15(PC)1、保存当前执⾏位置:LR寄存器(R14)2、保存当前执⾏状态:CPSR3、寻找中断⼊⼝,中断向量表:PC寄存器找向量地址4、执⾏中断处理完成:5、中断返回,继续执⾏:R14 <exception_mode> = return linkSPSR<exception_mode>=CPSRCPSR[4:0] =exception mode number;/* 处理器⼯作模式控制位 */CPSR[5]=0; /* 使⽤ARM指令集 */If<exception_mode> == reset or FIQ thenCPSR[6]= 1;/* 屏蔽快速中断FIQ */CPSR[7]=1; /* 屏蔽外部中断IRQ */PC=exception vector address;复位异常中断处理程序的主要功能:1、设置异常中断向量表:2、初始化数据栈和寄存器:3、初始化存储系统MMU:4、初始化关键IO设备:5、使能中断:6、处理器切换到合适的模式:7、初始化C变量跳转到应⽤程序执⾏:R14<SVC> = 设置相应的值;SPSR<SVC> = 设置相应的值;CPSR[4:0]=0b10011;/* 进⼊特权模式 */CPSR[5]=0; /* 使⽤ARM指令集 */CPSR[6] =1; /* 禁⽌相关关闭FIQ */CPSR[7] =1; /* 禁⽌IRQ */If high vectors configured thenPC=0xffff,0000;ElsePC= 0x0000,0000;其余的异常以此类推;异常的优先级:1、Reset: 优先级1(最⾼)2、Data abort:23、FIQ:34、IRQ:45、Prefetch abort:56、SWI或者undefined instruction:6(最低),软件中断异常或者未定义指令异常ARM硬件接⼝:1、程序的链接地址和程序地址:ld程序链接地址程序链接地址:是程序运⾏的起始地址;程序地址:是程序保存在硬盘中的地址;2、呵呵呵。
1.什么是嵌入式系统?举例。
嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统;水、电、煤气表的远程自动抄表,安全防火、防盗系统,其中嵌有的专用控制芯片将代替传统的人工检查,并实现更高,更准确和更安全的性能2.嵌入式发展历经四个阶段,分别说明各阶段特点。
无操作系统阶段:系统结构和功能相对单一,处理效率较低,存储容量较小,几乎没有用户接口。
简单操作系统阶段:出现了大量高可靠、低功耗的嵌入式CPU(如PowerPC等),各种简单的嵌入式操作系统开始出现并得到迅速发展实时操作系统阶段:操作系统的实时性得到了很大改善,已经能够运行在各种不同类型的微处理器上,具有高度的模块化特点和扩展性面向Internet阶段:嵌入式技术与Intemet技术的结合正在推动着嵌入式技术的飞速发展,嵌入式系统的研究和应用会出现更多的新的显著变化3.简述嵌入式三个基本要素三要素:嵌入式系统的三个基本要素是嵌入性、专用性与计算机系统。
(1)嵌入性是把软件嵌入到Flash存储器中,(2)专用性是指针对某个具体应用领域和场合,量体裁衣式的定制适用该场合的专用系统,(3)计算机系统是指必须具有计算机系统的组成,核心是计算机系统。
4.简述嵌入式的几个重要特征系统内核小专用性强系统精简高实时性的系统软件(OS) 嵌入式系统开发需要开发工具和环境使用多任务的操作系统5.一切皆是文件是。
分门别类举例介绍为什么设备文件也可以共用操作系统对所有文件(目录、字符设备、块设备、套接字、打印机等)操作,读写都可用fopen()/fclose()/fwrite()/fread()等函数进行处理。
屏蔽了硬件的区别,所有设备都抽象成文件,提供统一的接口给用户。
这就是“一切皆是文件”的思想。
因为Linux系统把任何设备都抽象为文件了.设备文件分为:字符设备,块设备,网络设备,这些在Linux里都以文件的形式存在5.目录和分区在linux和windows上的实现具体哪些不一样Windows是以驱动器的盘符为基础,每一个目录与对应的分区对应,而linux相反,文件系统是一棵树,文件和外部设备都是以文件的形式挂载在文件树上的。
fatfs copy filesFatFs (短文件系统),是一个开放源代码的嵌入式文件系统。
它专注于高效地管理磁盘上的文件和文件夹,并被广泛应用于多种嵌入式系统中,包括单片机、传感器、工业控制器等。
本文将一步一步回答如何使用FatFs在嵌入式系统中复制文件的问题。
步骤一:了解FatFs在开始之前,我们需要先了解一些FatFs的基本概念和术语。
FatFs使用文件控制块(File Control Block, FCB) 数据结构来管理文件和文件夹。
每个文件和文件夹都有一个FCB来记录其属性和位置。
FatFs使用簇(Cluster) 来组织磁盘上的数据,每个簇包含一定数量的扇区(Sector),可以存储一个或多个文件的数据。
步骤二:挂载文件系统在使用FatFs之前,我们需要先挂载文件系统。
挂载文件系统将使FatFs 能够访问和管理磁盘上的文件和文件夹。
挂载文件系统通常需要指定一个磁盘驱动器号(Drive Number),它用于区分不同的物理磁盘或存储介质。
可以通过调用`f_mount`函数来挂载文件系统,示例代码如下:cFATFS fs;f_mount(&fs, "0:", 1);上述代码中,`fs`是一个FatFs的文件系统对象,"0:"是磁盘驱动器号,1表示需要格式化磁盘。
步骤三:打开源文件和目标文件在进行文件复制操作之前,我们需要打开源文件和目标文件。
打开文件将创建一个FCB,并将源文件或目标文件关联到该FCB上。
可以使用`f_open`函数来打开文件,示例代码如下:cFIL sourceFile;FIL targetFile;f_open(&sourceFile, "source.txt", FA_READ);f_open(&targetFile, "target.txt", FA_WRITE FA_CREATE_ALWAYS);上述代码中,`sourceFile`和`targetFile`分别是源文件和目标文件的FCB 对象。
嵌入式文件系统简介
一、总体介绍
嵌入式文件系统由于功能和作用与普通桌面操作系统的文件系统不同,导致了二者在体系结构上具有很大的差异性:
普通桌面操作系统中文件系统的作用:
1.管理文件,
2.提供文件系统调用API,
3.管理各种设备,支持对设备和文件操作的一致性。
而在嵌入式文件系统中,在某些情况下,嵌入式系统可以针对特殊的目的来进行定制,特别是随着ASOS的发展,对嵌入式操作系统的系统功能规整性、可伸缩性及其灵活性提出了更高的要求。
根据文件系统的层次结构,可以将该文件系统分成四大功能块:
1.API接口模块:主要完成文件的基本操作,包含有文件的生成、删
除、打开、关闭、文件读、文件写等。
2.中间转换模块:主要完成对存取权限的检查、介质的选择、逻辑到
物理的转换。
3.磁盘分区模块:主要完成对几个主要数据结构的初始化,设置文件
系统的总体分区信息以及每个分区的几部分:空闲块管理、引导区、
FAT区、文件存储区等。
4.设备驱动模块:完成存储介质的驱动程序,包含有一个驱动程序函
数表和介质读、介质写、检查状态、执行特定命令等驱动程序。
对文件的可靠性设计主要从三个方面处理:
1.FAT表保护;
2.存储介质坏区的检测;
3.处理、数据校验。
在整个文件系统的安全性上,FAT表是重中之重,需要采取特别的维护,因为如果FAT表出错,则整个系统都将崩溃。
为了防止出现系统瘫痪,我们对FAT 表进行了备份。
当出现非正常关机的时候,重新开机以后就要进行FAT表的校验。
首先我们进行主FAT表的校验,如果主FAT表校验无误,则校验两个备份的FAT 表,若均没有错误,则不做任何工作;若发现有错误的 FAT表存在,则用正确的FAT表将错误的覆盖;若主FAT表有误,而存在有正确的备份FAT表,则用备份的FAT表将主FAT表覆盖;如果主FAT表有误,而备份的FAT表也不正确,则宣告FAT表崩溃。
此时只能重新进行分区。
此外,由于存储介质的使用寿命有限,所以我们在设计文件系统时一直本着尽可能少的对介质直接进行读写的原则。
具体做法是在内存中建立FAT表的一个映射,在文件系统起动时将FAT表读入内存。
这样,上层操作时如果涉及到对FAT表的更改,一般都先在内存FAT表映射中进行,不用涉及到介质的操作。
我们通过设置一个更新标志来确定更新时机,首次将存储介质内的FAT表读入内存时初始化该标志为假,一旦操作中生成了新的文件项或释放块而需要修改FAT
表项时,即置该标志为真。
同时我们设置一个定时器来确定更新介质上的FAT
表的时间,定时器每隔一定时间来检验更新标志,如果标志为真则将FAT表写入介质 FAT表。
当然,在关闭文件时,无论定时器是否到时,都要进行上述检验更新。
通过这样的设计,我们就可以大大减少了对存储介质上的FAT表的更新次数,也就达到了处长设备使用寿命的目的。
由于存储介质的寿命问题,随着时间的增长和使用次数的增加,个别区域会出现文件的写入读出错误,所以我们在设计文件系统时也考虑到了坏区的检验与管理。
检验某一页是否损坏的方法是:将数据写入某页后立即读出,如果读出的数据跟写入的不一致,则说明该页为坏页。
对于检验到的坏页,在空闲块管理区
中进行标记,以后进行存储区域分配时不分配这些坏页,这相当于把坏页从空闲块中删除,只要不对坏页进行读写操作,文件系统就不会出现任何问题。
二、详细设计
1、文件系统组织方式
文件系统逻辑组织为流式文件,物理组织为连续文件。
用户对于流式文件的访问是以字节为单位的。
每个文件的内部有一个读写指针,通过系统调用可以将该指针固定到文件的某一个位置处,以后的读写系统调用将从该指针所确定的位置处开始。
而用于保存文件的物理设备是划分为块页的,文件的物理结构就是要确定如何将字节保存在存储介质中。
所以说文件的物理组织形式对于文件系统的性能有着较为直接的影响,所以我们在进行文件的物理组织选择时比较慎重。
结合我们系统的实际应用情况,我们决定文件的物理组织方式采用顺序结构,这是因为我们的嵌入式应用环境要求实时性高,采集到的数据一旦以文件的方式存储在介质上很少进行改动,也即文件的长度变化不大,所以我们将逻辑文件的信息存放在外存的连续编号的物理块中。
2、文件和文件控制块FCB
为了实现对于文件的管理,系统需要掌握一组有关文件的描述信息,例如文件的名称、文件的地址、文件的建立曰期等等,这些信息组合在一起构成一个数据结构,在这里我们称之为文件控制块FCB。
FCB是文件存在的标志,其中记录着系统对于文件进行管理所需要的全部信息。
每一个文件都有一个文件控制块,它们被保存于外存空间,当系统欲访问一个文件时,应当能够根据文件名字找到它所对应的文件控制块,然后根据文件控制块中的文件位置信息找到该文件具体所存放的区域。
3、文件描述符
文件描述符由基本文件名和扩展文件名两部分构成,二者以圆点分开。
文件名由1-8个字符构成,扩展名由1-3个字符构成。
分别占据FCB中的00H- 07H 和08H-0AH两部分。
在FCB中,文件名和扩展名是左对齐放置的,剩余部分填入空格码。
当进行文件删除时,在文件目录记录项的第一字节中放入 E5H,表示该记录项是空项。
从公平没有使用过的记录项的第一字节中写入的是00H,刚刚格式化的根文件目录或刚刚生成的子文件目录的未使用文件目录记录项的开头写入的均是00H。
这个00H在文件进行检索时特别有用,主要是用来确定搜索到文件目录的什么区域就可以不用再继续搜索了。
例如,当文件检索中没有00H时,必须对全文件目录区进行检索,而一旦遇到有00H的场合,检索便宣告结束,这样可以大大缩短检索文件的时间,提高了文件检索的效率。
4、对文件的主要操作
文件系统的功能是通过一系列对文件的操作实现的。
为此,系统提供给用户一整套系统调用,用以完成创建、打开、读、写、关闭、删除文件等项工作。
对应的函数分别为:FS_FOPEN()、FS_REMOVE()、FS_FCLOSE()、FS_FREAD ()和FS_FWRITE(),各函数均通过驱动模块来实现,具体的代码此处不在罗列。
5、文件的保护机制
由于文件系统保存着用户非常重要的信息,因而如何保护信息、防止未授权使用就是所有文件系统必须要解决的重要问题之一。
但系统中的全部信息又不能完全成为私有,还必须进行文件共享,以提高资源的利用率和方便用户使用。
文件共享和保密是一个问题的两个方面。
对文件的保护保密是由对文件的共享要求起的。
在非共享环境中,不需要再做什么保护,实际上它已经是极端的完全保护情况;相反,另一种极端情况则是完成共享,而不做任何保护。
这两种情况都缺乏实用意义,一般用法是有控制的进行文件共享。
保护机制通过限制文件的存取类型来实现受控制共享。
允许或禁止对文件的存取受多种因素的限制,如
用户的身份、文件本身的性质、对文件所要进行的存取类型等。
常用的保护机制有命名、口令、存取控制、密码等,对文件的保护必须要根据实际需要和实现的可能性来选择合适的方法。
由于本文件系统主要是以FAT文件系统为基础来进行设计的,所以在对文件进行保护和共享方面同样也有FAT文件系统所具有的不足,没有一套完整的文件保护机制来完成对文件的保护,安全特性只能通过共享权限来加以实现。