一种扇区可变的小型文件系统的制作方法

专利2022-06-29  55


本发明属于嵌入式软件开发技术领域,具体涉及一种扇区可变的小型文件系统。



背景技术:

随着智能移动设备增多、嵌入式技术在各行业不断应用、工厂自动化、计算机集成制造系统技术的逐步发展以及柔性制造系统、自动化技术在企业的广泛使用和小型电器在日常生活中的智能应用,嵌入设备已经进入我们的工作、生活和娱乐等多个方面。嵌入式系统的应用的关键是嵌入式系统的软件开发,一个好的开发环境是每个mcu生产、销售公司的目标,也是mcu公司化时间、资金研发的重点;对于嵌入式软件工程师来说,mcu的软件支持是软件开发的基础,每个公司的低层软件库都不一样,而且许多还需要自己开发,这些软件将是产品质量保证的前提。

目前嵌入式系统的文件系统两大类:一类是依赖操作系统android、vxworks和windowsce的文件系统,这类文件系统由操作系统运行、管理,比较适合大系统的开发;另外一类是依赖嵌入式操作系统像ucos-ii、freertos和tinyos等、或系统不支持操作系统的文件系统,这些系统通常不支持文件系统的运行和管理,用户根据系统需要自己选择、添加文件系统到嵌入式系统软件中,许多系统都采用对大系统的裁剪,会增加对内存、eeprom、flash空间的需求,同时也会存在大量的浪费。

一种扇区可变大小的小型文件系统是适合第二种情况设计的,可以适应空间比较小的应用系统,支持带嵌入式操作系统和不带嵌入式操作系统,管理程序比较少,可以管理最小为5kb的空间,而且代码只占几kb大小。文件系统设计了一个特殊的引导扇区block0,在引导扇区中主要存放文件系统标识字、逻辑扇区大小、其他相关描述信息,比如文件系统物理扇区大小、文件系统扇区数量、文件分配表、根目录区、数据区在文件系统总扇区上的起始位置和文件系统的版本号等,如果系统需要有引导功能,还要存放引导信息,也可以是在内存的虚拟物理扇区中创建一个文件系统,那样和其他类型一样,需要包含基本的文件系统内容,如扇区大小、物理扇区数量、数据区开始位置、根目录文件开始位置等;引导扇区block0的大小为64bytes以上,通过读取前32bytes的信息,文件系统就可以获得引导扇区中主要存放文件系统基本信息,文件系统就可以正常读、写了,根据文件系统基本信息建立文件分配表、根目录区、数据区的起始位置。



技术实现要素:

本发明的目的在于提供一种扇区可变的小型文件系统。

小型系统能够应用的文件系统必须具备代码少、管理物理空间小且可变和有基本规范的文件操作等特点,嵌入式小型文件系统又是连接上位机和管理下位机数据的桥梁,一方面上位机可以采用文件的形式配置、接收下位机的数据;另一方面规范了下位机的数据处理,利用文件的打开、读/写、关闭等功能更改、添加和删除数据记录,同时增加了下位机软件开发的标准化和规范性,提高了软件的可移植性,也改善了下位机数据和嵌入式系统软件的共享性。是对嵌入式系统软件开发的文件和信息处理,适用于带mcu的小型控制、监视、数据转换和日常使用的智能等系统嵌入式设备的软件开发。

本发明涉及扇区可变的小型文件系统,包括主引导扇区结构,所述的主引导扇区结构采用基本结构数据和扩展结构数据组合而成,将文件系统结构的数据基本单位定义为扇区,一个引导扇区的内容必须存储在一个扇区内,基本结构数据的信息就是可变扇区的最小字节数,本文件系统的最小扇区大小为64bytes;扩展结构数据为需要引导、文件加密等一些特殊应用预留的数据块,如果需要文件系统具备扩展功能模块,引导扇区必须大于64bytes。文件系统的主引导扇区包含文件系统标识字、每个扇区占的字节数、文件系统总扇区数、fat表拥有的扇区数、有几张fat表、fat表项占的位数、文件系统的版本信息和基本引导标志信息;和主引导扇区相邻的是第1张fat表,管理系统的第1部分数据块;整个文件系统结构有多个fat表,每个fat表都管理属于自己那部分数据块,根据磁盘大小配置文件系统的fat表。

扇区可变的小型文件系统利用目录/文件项为用户标识的基本单位,通过目录/文件项中的绝对盘块号作为依据以查找目录/文件项其对应的首个fat号和相关链表,进而可以对盘数据块和目录/文件项的fat链表进行进一步操作。

所述文件系统的初始化和建立是整个文件系统最外层的系统处理流程,包括:文件系统引导扇区识别、建立fat链表数据结构、载入文件系统目录结构、建立目录和文件的fcb数据结构、建立文件处理的数据缓冲区、接受用户对文件和目录的操作。

所述文件系统引导扇区识别:根据是否找到引导扇区衔接的流程。如果没有找到引导扇区则将在第一个扇区创建文件系统;如果找到了引导扇区就读入引导扇区存储的各项信息并初始化打开文件信息,将引导扇区的后继扇区设定为根fat点,并计算fat的容量,设置fat表后继的扇区位置为根目录区,为目录和文件建立fcb数据结构,加载根目录结构。

所述接受用户对文件和目录的操作:为文件和目录处理建立数据缓冲区,接受对文件和目录的操作,提供对文件和目录操作的基本功能:目录的创建、删除和修改,文件的创建、删除、读/写的修改等;同时记录文件和目录的创建、修改时间,文件系统也需要对目录项和fat链表结构进行维护,标记fat的当前块和目录块;也需要记录对文件读/写的位置指针,扇区可变的小型文件系统将文件读的位置和写的位置独立标记,有助于读/写同时操作。

附图说明

图1为文件系统结构图;

图2为主引导扇区结构图。

具体实施方式

以下结合附图对本发明进行进一步的阐述。

一种扇区可变的小型文件系统,包括主引导扇区结构,主引导扇区结构采用基本结构数据和扩展结构数据组合而成,如图1和2所示,将文件系统结构的数据基本单位定义为扇区,一个引导扇区的内容必须存储在一个扇区内,基本结构数据的信息就是可变扇区的最小字节数,本文件系统的最小扇区大小为64bytes;扩展结构数据为需要引导、文件加密等一些特殊应用预留的数据块,如果需要文件系统具备扩展功能模块,引导扇区必须大于64bytes。文件系统的主引导扇区包含文件系统标识字、每个扇区占的字节数、文件系统总扇区数、fat表拥有的扇区数、有几张fat表、fat表项占的位数、文件系统的版本信息和基本引导标志信息;和主引导扇区相邻的是第1张fat表,管理系统的第1部分数据块;整个文件系统结构有多个fat表,每个fat表都管理属于自己那部分数据块,根据磁盘大小配置文件系统的fat表。

扇区可变的小型文件系统利用目录/文件项为用户标识的基本单位,通过目录/文件项中的绝对盘块号作为依据以查找目录/文件项其对应的首个fat号和相关链表,进而可以对盘数据块和目录/文件项的fat链表进行进一步操作。

文件系统的初始化和建立是整个文件系统最外层的系统处理流程,包括:文件系统引导扇区识别、建立fat链表数据结构、载入文件系统目录结构、建立目录和文件的fcb数据结构、建立文件处理的数据缓冲区、接受用户对文件和目录的操作等功能。

文件系统引导扇区识别:根据是否找到引导扇区,如果没有找到引导扇区则将在第一个扇区创建文件系统;如果找到了引导扇区就读入引导扇区存储的各项信息并初始化打开文件信息,将引导扇区的后继扇区设定为根fat点,并计算fat的容量,设置fat表后继的扇区位置为根目录区,为目录和文件建立fcb数据结构,加载根目录的结构。

创建文件或目录:根据给定的创建条件(目录或数据文件)来创建相应的文件或目录。第一步:判断当前打开文件的合法性,即是当前打开文件是否为目录?只有打开文件是目录才可以创建新的文件;第二步:判断文件名的格式是否符合数据文件和目录相应的规范?第三步:需要得到目录即是打开文件的扇区指针,以循环判断当前要创建的文件是否已经有同名同格式文件存在;第四步:要得到父目录扇区中下一块空闲的fcb区;第五步:为子文件分配扇区;第六步:需要更新父目录相关的信息和打开文件信息,经过这些过程目录/文件完成创建。

删除文件或目录:删除指定文件操作,第一步:判断输入文件名格式的合法性,特别要注意的是“.”目录和“..”是不合法的输入目录,“.”目录为代表当前目录,“..”目录为父亲目录;第二步:得到当前打开文件的盘块指针,并判断它是否为目录;第三步:在打开目录中查找目标文件是否存在;第四步:根据目标文件为数据文件还是目录调用不同的下一级函数做不同的处理,因为目录是需要循环删除的;第五步:对本目标文件所在的fat表进行更新修改,对父目录的属性进行更新,完成这些操作指定的文件才能删除。删除目录操作:需要得到当前目录的扇区指针及其所在fat,而后对当前的目录进行遍历操作,并根据是否为目录来调用不同的删除操作函数来删除当前目录的子文件,对fat表进行更新,并且在每次遍历到新的扇区时,对上一扇区在fat的标记进行初始化为未使用状态。

对指定文件写入:得到指定目标文件的fcb指针和文件数据结构,而后根据写入模式的不同将读写访问位置放置到不同的地方,如果是覆盖写还要直接改变fcb的相关项和清除打开文件的长度。具体对指定文件写入数据操作,第一步:判断文件名输入格式的合法性;第二步:判断当前的这个文件是否为数据文件,是否是可写文件;第三步:要求输入的方式如覆盖写,如继续写,根据写入的方式预处理写入的访问指针位置;第四步:初始化写入需要用到临时信息,如当前待写入的长度,写入的缓冲区;第五步:接收字符,并且当前待写入长度大于一个扇区的大小或者接收到了输入结束标记就进行缓冲区到磁盘的写入。将缓冲区的数据写入数据文件的验证,第一步:根据读写访问指针进入对应的扇区,如果发现不能进入对应的扇区则返回错误;第二步:设置写入数据需要的当前写入值;第三步:将字符串进行写入,当写满当前扇区则根据fat去获取下一扇区并设置当前扇区的读写位置为零,如果获取成功则更新扇区和fat位置,如果获取失败则去申请新的扇区,同理更新扇区和fat位置;第四步:写入完成后如果原数据文件比现更新后的数据文件要长则初始化之后剩余的无用扇区;第五步:对目标文件的fcb和打开文件fcb进行更新,完成以后对fat表进行相应的修改。

对指定文件读出:先打开指定数据文件,首先判断数据文件名输入的合法性?其后拆分数据文件名,判断是否为数据文件?利用下一级函数来打开数据文件并获得其打开文件索引,更新当前打开文件索引为此文件索引。对打开文件进行读出操作,首先判断输入的父目录打开文件索引的合法性,而后在父目录的扇区中查找到目标文件的fcb指针,申请打开文件数据结构列表空间,返回分配到的文件数据结构,利用文件的是读取数据文件的信息,第一步:判断数据文件是否为数据文件?第二步:设置访问中间变量,如临时的扇区指针,fat指针,访问的偏移量,文件总长度等;第三步:对整个数据文件进行遍历,输出扇区中内容;第四步:更新目标文件fcb信息,返回从数据块中读到的数据。

扇区可变的小型文件系统其他辅助相关功能的处理流程:

格式化扇区可变的小型文件系统:首先将第一块扇区设置成引导扇区,其次根据需要规定的fat能管理的扇区多少并将前三个扇区设置为已用标记(引导扇区,fat本身,根目录),最后初始化根目录以及初始化打开文件列表。

设置目标文件权限:这是用来设置或修改文件的权限(如:读写,隐藏。可以定义在fcb中)的功能。第一步需要检查当前打开文件为目录,即是目标文件的上一级为目录才有意义;第二步需要检查目标文件本身的合法性,如若是目录文件则没有读写这一权限一说;第三步获取目标文件的fcb指针;第四步对权限进行所需的修改。

在目录下查找指定文件:根据输入的文件名和文件类型在父目录下找到fcb指针。第一步:根据父目录的扇区得到其扇区号,根据扇区号得到其fat号(=(扇区号-1)/fat能管理的扇区数),进而得到fat位置(如fat号为0则fat即是第2个扇区,否则fat=初始盘块 (fat号*fat能管理的扇区数));第二步:循环判断有无找到目标文件,循环的原因是目录所占扇区数的不确定性;第三步:返回fcb指针。

获得目标扇区指针:本功能是获得目标扇区指针。利用绝对扇区号可以绕过fat从而直接得到扇区的指针,还可以根据扇区号得到fat的指针,将扇区和fat解耦。

获取目录下一个空闲fcb:获取一个空闲的fcb指针。第一步得到父目录的扇区指针;第二步遍历父目录扇区的fcb区得到一个空闲的fcb区并且设这个空闲的fcb为已用,返回这个fcb的指针;第三步如果第二步中没有空闲的fcb则请求新的扇区,如果扇区申请不到则申请创建新的磁盘空间,最后重新执行第一二步。

获取空闲扇区:获得空闲扇区号,遍历所有的fat表从而得到空闲的扇区号。如果找到了扇区号,就将此扇区设置为已用并放回扇区号;如果找不到空闲扇区就申请新的存储块重复上述的过程。

创建新扇区块及fat:用来创建新的存储区即是可用扇区块,首先为这个扇区块分配空间,而后初始化这个扇区的fat表,最后更新引导扇区中的信息。

更新文件最后访问时间:用来更新文件最后访问的时间。获取系统的时间并根据需要编码进而放入fcb的内容中去。

更新文件最后修改时间:用来更新文件最后修改的时间。获取系统的时间并根据需要编码进而放入fcb的内容中去。

获取空闲打开列表文件:用来获取空闲的打开列表文件。遍历打开列表,寻找一个为被使用的文件区,设为已用并返回索引。


技术特征:

1.一种扇区可变的小型文件系统,其特征在于:所述的文件系统的引导扇区采用基本结构数据和扩展结构数据组合而成,将文件系统的数据基本单位定义为扇区,一个引导扇区的内容必须存储在一个扇区内,基本结构数据的信息就是可变扇区的最小字节数,本文件系统的最小扇区大小为64bytes;扩展结构数据为需要引导、文件加密一些特殊应用预留的数据块,如果需要文件系统具备扩展功能模块,引导扇区必须大于64bytes;

文件系统的引导扇区包含文件系统标识字、每个扇区占的字节数、文件系统总扇区数、fat表拥有的扇区数、有几张fat表、fat表项占的位数、文件系统的版本信息和基本引导标志信息;和引导扇区相邻的是第1张fat表,管理系统的第1部分数据块;整个文件系统有多个fat表,每个fat表都管理属于自己那部分数据块,根据磁盘大小配置文件系统的fat表;

利用目录/文件项为用户标识的基本单位,通过目录/文件项中的绝对盘块号作为依据以查找目录/文件项其对应的首个fat号和相关链表,进而可以对盘数据块和目录/文件项的fat链表进行进一步操作;

所述的文件系统的初始化和建立是整个文件系统最外层的系统处理流程,包括:文件系统引导扇区识别、建立fat链表数据结构、载入文件系统目录结构、建立目录和文件的fcb数据结构、建立文件处理的数据缓冲区、接受用户对文件和目录的操作。

2.如权利要求1所述的一种扇区可变的小型文件系统,其特征在于:所述文件系统引导扇区识别:根据是否找到引导扇区衔接的流程;如果没有找到引导扇区则将在第一个扇区创建文件系统;如果找到了引导扇区就读入引导扇区存储的各项信息并初始化打开文件信息,将引导扇区的后继扇区设定为根fat点,并计算fat的容量,设置fat表后继的扇区位置为根目录区,为目录和文件建立fcb数据结构,加载根目录结构。

3.如权利要求2所述的一种扇区可变的小型文件系统,其特征在于:所述接受用户对文件和目录的操作:为文件和目录处理建立数据缓冲区,接受对文件和目录的操作,提供对文件和目录操作的基本功能:目录的创建、删除和修改,文件的创建、删除、读/写的修改等;同时记录文件和目录的创建、修改时间,文件系统也需要对目录项和fat链表结构进行维护,标记fat的当前块和目录块;也需要记录对文件读/写的位置指针,扇区可变的小型文件系统将文件读的位置和写的位置独立标记,有助于读/写同时操作。

技术总结
本发明涉及一种扇区可变的小型文件系统。本发明利用目录/文件项为用户标识的基本单位,通过目录/文件项中的绝对盘块号作为依据以查找目录/文件项其对应的首个fat号和相关链表,进而可以对盘数据块和目录/文件项的fat链表进行进一步操作。本发明一方面上位机采用文件的形式配置、接收下位机的数据;另一方面规范了下位机的数据处理,利用文件的打开、读/写、关闭等功能更改、添加和删除数据记录,同时增加了下位机软件开发的标准化和规范性,提高了软件的可移植性,也改善了下位机数据和嵌入式系统软件的共享性。

技术研发人员:任彧;高正宇;严宇峰
受保护的技术使用者:杭州电子科技大学
技术研发日:2020.01.08
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-30280.html

最新回复(0)