嵌入式系统的文件操作方法
技术领域
本发明涉及文件保护方法,尤其是涉及嵌入式系统中保护文件安全的文件操作方法。
背景技术
嵌入式系统的Flash存储器一般设置分区:引导加载程序(boofloader)分区、内核(kernel)分区、根文件系统(rootfs)分区,甚至还设有应用分区(usrfs),需要读写的文件根据存放在根文件系统分区或应用分区。当然,个别嵌入式系统的Flash存储器设有专门的分区用于存放需要读写的文件,应用程序在该分区中直接对文件进行读写操作。
另外,嵌入式设备的文件系统(以下简称嵌入式文件系统)在使用中需要读写的文件很少,且需要进行读写操作的文件(比如配置文件),存放在嵌入式系统中挂载了Flash存储器分区的目录中,或存放在Flash存储器的专门分区中。
因此,目前嵌入式系统的对文件操作存在如下缺陷:
1、容易出现存放文件的分区被损坏、甚至文件系统被破坏。
现有文件系统中需要读写的文件如果都分开存在Flash存储器分区的目录或根文件系统分区,对这些文件的读写操作在某些情况下可能会导致整个分区被破坏,甚至导致整个文件系统被破坏。即使设有专门的分区存放需要进行读写操作的文件,由于现有的方法是整个文件可进行读写操作的,如果嵌入式系统的底层驱动不稳定或文件系统不稳定或其他原因会导致读写文件操作时整个分区被损坏、文件丢失等严重后果。
2、现有对文件系统的修复方法比较麻烦,所需时间也比较长。
如果需要进行读写操作的文件丢失,现有的修复方法可能是在Flash存储器上保存该分区的文件系统镜像的备份,或者从网络上下载一个文件镜像烧录至该分区。
发明内容
本发明提出一种嵌入式系统的文件操作方法,通过将需要修改数据和不修改数据分开以文件方式分开保存,仅仅对需要修改的数据文件进行写操作,从而避免了破坏嵌入式设备的文件系统。
本发明采用了如下技术方案来实现:一种嵌入式系统的文件操作方法,其包括步骤:
将嵌入式系统中需要进行读写的操作数据存放在Flash存储器的可读写分区,且将Flash存储器的其他分区设置为只读分区;
从只读分区中将第一文件复制到内存,在内存中生成第二文件;
从可读写分区读取操作数据,以该操作数据更新第二文件;
由应用程序的应用需要修改第二文件中的数据,以修改后的第二文件对可读写分区中操作数据进行对应更新处理。
其中,所述嵌入式系统的文件操作方法还包括步骤,监控对可读写分区进行读写操作是否正常的,若不正常,则:
a、擦除可读写分区的信息;
b、在可读写分区中新建需要进行读写的操作数据的各个字段名,且各个字段名的参数值取初始值或默认值;
c、根据内存中修改后的第二文件中各个字段名的参数值对可读写分区中操作数据包含的各个字段名的参数值进行对应进行更新处理。
其中,对可读写分区中操作数进行更新处理的步骤包括:
根据第二文件中被修改参数值的字段名,在可读写分区的操作数据中查找对应的字段名;
若找到该字段名,则将该字段名的参数值替换为第二文件中相应字段名的参数值;
若未找到该字段名,则在可读写分区中先新建字段名,且将该字段名的参数值替换为第二文件中相应字段名的参数值。
其中,第一文件包括多个标准格式文件,每个标准格式文件是将一个或多个需要进行读写操作的文件按文件模板配置而成。
其中,每个标准格式文件具有不同的文件名。
其中,包含在同一个标准格式文件中的任意两个字段名均不相同。
其中,操作数据以字符串格式存储在可读写分区中。
其中,操作数据以数据文件格式存储在可读写分区中。
与现有技术相比,本发明具有如下有益效果:
本发明可以保证嵌入式设备中的文件系统不被频繁的写文件而破坏掉,即使写操作时破坏了可读写分区,但可读写分区的信息可以在下次使用时根据内存中保存信息再生,而无需修复可读写分区。因此,本发明保证了文件系统的不会被破坏,提高了嵌入式设备的文件安全性能。
附图说明
图1是本发明Flash存储器与内存交互信息的流程示意图;
图2是本发明文件操作的流程示意图。
具体实施方式
本发明提出一种在嵌入式设备的Flash存储器中,将需要读写的文件中要修改数据和不修改数据分开以文件方式保存;不需要修改的数据文件设置为只读,而需要修改的数据文件先在嵌入式设备的内存中进行修改,再更新至Flash存储器的可读写分区。
在嵌入式设备的文件系统中,需要进行读写操作的文件一般包含:系统配置文件、版本文件、服务器地址记录文件或用户上次操作记录文件等。配置文件中一般存放IP地址、用户名和密码等用户信息。版本文件一般存放版本号和更新时间等。其他文件一般存放服务器地址、升级服务器地址等。为了方便应用程序的查找,这些文件在记录的时候一般都会有固定的格式,一般以字段名加等号的形式出现,比如:
Usrname=xxx
Passwd=xxxx
IP=xxx.xxx.xxx.xxx
如图1所示,将Flash存储器1中,除开可读写分区外,其他分区均设置成只读。而所有要进行读写操作的文件按文件模板配置成标准格式文件,并将标准格式文件中各参数(对应前述提到的字段名)赋上初始值。比如,将用户名、密码、IP地址和升级服务器地址的信息赋上初始值,按文件模板配置在一个名为usr.conf的标准格式文件中,该文件格式:
Usrname=xxx
Passwd=xxx
Ip=0.0.0.0
Upgradeserver=0.0.0.0
在嵌入式设备中,每个应用程序具有特定的功能,因此,每个应用程序需要使用哪些标准格式文件是确定的,在运行过程中可能涉及标准格式文件中哪些数据修改也是可预知的。故,本发明把各个标准格式文件中需要进行修改的操作数据存放在Flash存储器1的一个特定的可读写分区中。比如,该可读写分区中记录各个标准格式文件中需要进行修改的操作数据,其存储格式如下:
Usr.conf“Username=xxxxx,Passwd=xxxx,IP=xxx.xxx.xxx.xxx,...”
xxx.conf“Server=...,...”
比如,上述实例中操作数据含义为:在Usr.conf文件中,字段名为Username、Passwd、IP需要进行修改操作,且记录了该每个字段名的最新参数值;在xxx.conf文件中,字段名为Server需要进行修改操作。当然,操作数据在可读写分区中以字符串、文件或其他方便读写的方式存储。但注意不要有重复的关键字,如:各个标准格式文件的文件名不能重复,且同一个标准格式文件中不要有重复的字段关键字。
由于Flash存储器1中,除可读写分区以后,其他分区的文件系统为只读,因而,需要借助嵌入式设备的内存2对可读写分区中的标准格式文件进行修改操作。结合图2所示,嵌入式设备的应用程序对各个标准格式文件操作方式如下:
步骤S1:嵌入式设备开机后,将Flash存储器1的应用分区中的应用程序读入内存2,且从根文件系统分区将应用程序需要读写的各个标准格式文件A复制到内存,在内存中记为标准格式文件B。
步骤S2:应用程序从标准格式文件B中读取各个字段信息,并记录下字段名和参数值。
步骤S3:读取数据时判断可读写分区是否正常,数据是否合法。若是,转入步骤S4,否则转入步骤S7。
步骤S4:由应用程序向可读写分区读取的对应字段名的操作数据,以便于依据此操作数据中每个字段名的对应值更新标准格式文件B,使更新后的标准格式文件B成为应用程序的可操作文件。
步骤S5:查找该分区中是否有所找字段名,若是,转入步骤S6,否则转入步骤S8。
步骤S6:找到该字段名,用所取得的参数值更新文件B中对应字段名的参数值,生成标准格式文件C。
步骤S7:则擦除该可读写分区。
步骤S8:在可读写分区中新建该字段并把标准格式文件B中该字段名的参数值做为初始值赋给该字段名。
步骤S9:在运行应用程序的过程中,应用程序根据使用需要修改文件C中的信息。比如,应用程序为一个用于提供用户修改用户名和密码的应用程序,其根据用户输入的用户名和密码,在内存2中修改文件C中字段名分别为“用户名”和“密码”的对应参数值。修改后的字段名的参数值需要写到可读写分区中。
步骤S10:操作可读写分区是否成功,若是,转入步骤S11,否则转入步骤S12。
步骤S11:根据修改的操作数据的字段名来查找可读写分区的对应的字段名,并将该字段名的参数值按标准格式文件C修改。
步骤S12:擦除可读写分区。
步骤S13:在刚擦除的可读写分区中创建修改的操作数据的字段,并把新的操作数据赋给这个字段。
由于本发明将需要修改的数据与不需要修改的数据分别以不同文件方式保存,在Flash存储器仅仅将保存需要修改的数据的可读写分区设置为可读可写的,其他分区均设置为只读的。每次启动嵌入式设备时,从可读写分区读取操作数据在内存中更新标准格式文件B而形成应用程序可以使用的操作文件;而当应用程序在运行过程中修改了标准格式文件B时,仅仅需要将修改的信息更新至可读写分区。这样,可以保证嵌入式设备中的文件系统不被频繁的写文件而破坏掉,即使写操作时破坏了可读写分区,但可读写分区的信息可以在下次使用时根据内存中保存信息再生,而无需修复可读写分区。因此,本发明保证了文件系统的不会被破坏,提高了嵌入式设备的文件安全性能。