对嵌入式Linux操作系统中的UBIFS文件系统备份方法

文档序号:9417267阅读:1197来源:国知局
对嵌入式Linux操作系统中的UBIFS文件系统备份方法
【技术领域】
[0001]本发明涉及一种系统文件备份方法,尤其涉及对嵌入式Linux操作系统中的UBIFS文件系统备份方法。
【背景技术】
[0002]目前Iinux操作系统由于源码开放及技术成熟,从而大量使用在仪器仪表的软件设计中。而Iinux的文件系统也由最初的jiffs2、yaffs2等系统发展到目前的UBIFS文件系统。UBIFS是Nokia工程师在the university of Szeged大学帮助下开发的新的flashfile system。被认为是JFFS2文件系统的下一代。JFFS2运行在MTD设备之上,而UBIFS则只能工作于UBI volume之上。也可以说,UBIFS涉及了三个子系统:
[0003]1.MTD子系统,提供对flash芯片的访问接口,MTD子系统提供了 MTD device的概念,比如/dev/mtdx,MTD可以认为是raw flash ;
[0004]2.UBI subsystem,为flash device提供了 wear-leveling和 volume management功能;UBI工作在MTD设备之上,提供了 UBI volume ;UBI是MTD设备的高层次表示,对上层屏蔽了一些MTD不得不处理的问题,比如wearing以及坏块管理
[0005]3.UBIFS文件系统,工作于UBI之上。
[0006]UBIFS文件系统属于日誌型文件系统,无论速度、性能还是对NAND FLASH的损益均衡都相对于jiffs2和yafTs2有了很大的改变。但UBIFS文件系统需要经常记录日誌,因而在MTD分区时,给UBIFS部分的硬件分区不能配置为只读,必须配置为可读可写。这样在设备突然停电而系统又正在进行日誌记录时,往往由于没有操作完而中断,会造成文件系统的损坏,从而造成再次来电系统不能正常工作。
[0007]目前常规linux+UBIFS文件系统的MTD分区是这样的:将MTD分为3个区,其中第一区存放Uboot及kener,该区只读,长度8M,第二区存放UBIFS文件系统,长度16M,第三区存放应用程序及数据,第2区和第3区是可读/写的。
[0008]系统启动时,先启动UB00T,通过UB00T拉起kener、文件系统ubifs,在ubifs的shell文件启动应用程序。这里第I区是只读区,其中的文件不会损坏,因而UB00T及kener不会出问题,但UBIFS分区是可读可写区,该区间是允许写操作的,这样设备在运行中突然停电而系统又正在写UBIFS分区的话,会造成没有写完而损坏文件系统,再次上电系统无法工作。
[0009]为了避免突然停电,目前常规做法是采用可充电的备用电池,在交流电源停电后,利用备用电池,维持系统工作,应用程序检测到停电,通过Iinux的复位命令reboot关机,系统在接收到reboot命令,关闭所有操作后复位。使用了备用电池,在一定程度上减少了系统崩溃的风险,但备用电池毕竟有寿命的限制,在电池失效而又没有及时更换的时候,文件崩溃的风险就会随时发生。

【发明内容】

[0010]本发明的目的在于提供对嵌入式Linux操作系统中的UBIFS文件系统备份方法,主要针对电表等设备中的UBIFS文件系统进行备份,减少由于断电导致数据设置问题,同时也不需要额外的备用电池,在减少了设备成本的前提下对于设备的保护更为完善。
[0011]为了实现所述目的,对嵌入式Linux操作系统中的UBIFS文件系统备份方法,用于非易失存储器上,包括以下步骤:
[0012]步骤1,将MTD分为3个区;其中第一区设置空间为24M,第二区设置空间为16M,剩余空间全部留给第三区;
[0013]步骤2,将第一区设置两个功能区块,其中一块为uboot及kener存放区,该区只读,长度8M ;另一个功能区块为备份区,备份区16M空间用来存放UBIFS文件系统,作为备份;
[0014]步骤3,第二区内存放和第一区中备份区相同的UBIFS文件系统,该区为可读写区;
[0015]步骤4,在第三区内存放应用程序及数据,该区为可读写区;
[0016]步骤5,每次系统启动时记录第二区内存中UBIFS文件系统的uboot特征码;
[0017]步骤6,进行程序更新时应用程序修改第二区中UBIFS文件系统数据;在下一次系统启动时,uboot程序通过特征码对比判断该区域内容是否已经修改,如果检测到现在的特征码和记录中应用程序uboot的特征码不一致,则说明上次系统是正常启动,无需启动备份;如果特征码没有变化,判断该区间仍是uboot所写数据,说明上次系统启动后,没有进入应用程序,通过看门狗对系统再次重启,此次重启后将第一区中备份区的备份文件覆盖第二区文件,覆盖完毕后重新进行程序更新。
[0018]优选的,所述特征码选用4个字节。过长的特征码会影响判断时间,太短的特征码会导致误判率。
[0019]优选的,所述非易失存储器连接计时模块,整个系统第二次重启距离第一次重启不得小于I分钟,以后每次重启间隔不得小于半分钟,在3分钟内出现4次重启则停止作业发出报警信号。由于要确保非易失存储器的使用寿命,在工作环境不供能不稳定的情况下如果在短时间内出现大量重启,则停止作业,发出警报由人工确认下次尝试。
[0020]优选的,所述非易失存储器为铁电存储器FRAM。这样的非易失存储器性能较好。
[0021]通过这样的设置,本发明对嵌入式Linux操作系统中的UBIFS文件系统备份方法可以解决这个问题。本发明通过开辟一块只读MTD分区,用来备份UBIFS文件系统,UBOOT在检测到文件系统损坏后,用备份区文件系统覆盖工作区文件系统,从而达到修复文件系统的目的。
【附图说明】
[0022]图1是本发明对嵌入式Linux操作系统中的UBIFS文件系统备份方法的具体实施例工作流程示意图。
【具体实施方式】
[0023]为了实现备份文件系统覆盖工作区UBIFS文件,需要更改uboot程序和应用程序。核心思想是在uboot程序中对非易失存储器的某区域读取一个固定数据,而在系统正常工作后,由应用程序修改uboot在该单元所写的数据。这样系统再次启动时,uboot程序判断该特征码是否为Uboot所写数据,如果检测到的数据已经和前一次记载的发生改变了,则说明上次系统是正常启动,无需启动备份;如果判断该区间仍是Uboot所写数据,说明上次系统启动后,没有进入应用程序此时应用程序的守护进程会清“看门狗”,由“看门狗”动作造成系统再次重启,于是启动备份文件覆盖工作区文件,覆盖完毕后只是恢复到初始状况,还需要重新进行一次。
[0024]如图1所示,以uboot所写数据为(0x55)为例;当程序异常重启后,系统自行对比特征码发现
[0025]覆盖文件系统的执行过程:
[0026]1、擦除UBIFS工作区,长度:16M,首地址0x1800000
[0027]nand erase 1800000 1000000
[0028]2、读取备份工作区内容到内存的0x20040000,备份文件首地址0x800000
[0029]nand read 20040000 800000 1000000
[0030]3、将读出的备份文件内容写到工作区:
[0031]nand write, trimffs 20040000 1800000 1000000
[0032]备份恢复完毕后系统正常工作,由应用程序将FRAM的指定单元写为OxAA。这样当下次重启时检测到OxAA已经和上次记载的0x55产生变化,说明覆盖成功。这样将心的OxAA记录为当前特征码,等待下一次的程序写入。
[0033]对嵌入式Linux操作系统中的UBIFS文件系统备份方法,从采用linux+UBIFS的仪器仪表设备中随机选取了 10台样板进行试验,并且把所有样本的备用电池统一去掉。首先采用常规方法,即不对样品做任何处理,由外部设备对每台样本进行每I分钟I次的停上电操作,结果在实验24小时后就出现了 I台设备因为文件系统损坏而不能启动。而后按照本发明方法对该批设备做了改进,采用同样的实验环境,同样的实验方法,并把实验时间延长到72小时后观察,发现所有的样本仍可以正常启动工作,很明显,通过本发明,大大提高了系统的容错能力及可靠性。
【主权项】
1.对嵌入式Linux操作系统中的UBIFS文件系统备份方法,其特征在于:用于非易失存储器上,包括以下步骤: 步骤1,将MTD分为3个区;其中第一区设置空间为24M,第二区设置空间为16M,剩余空间全部留给第三区; 步骤2,将第一区设置两个功能区块,其中一块为uboot及kener存放区,该区只读,长度8M ;另一个功能区块为备份区,备份区16M空间用来存放UBIFS文件系统,作为备份;步骤3,第二区内存放和第一区中备份区相同的UBIFS文件系统,该区为可读写区;步骤4,在第三区内存放应用程序及数据,该区为可读写区; 步骤5,每次系统启动时记录第二区内存中UBIFS文件系统的uboot特征码; 步骤6,进行程序更新时应用程序修改第二区中UBIFS文件系统数据;在下一次系统启动时,uboot程序通过特征码对比判断该区域内容是否已经修改,如果检测到现在的特征码和记录中应用程序uboot的特征码不一致,则说明上次系统是正常启动,无需启动备份;如果特征码没有变化,判断该区间仍是uboot所写数据,说明上次系统启动后,没有进入应用程序,通过看门狗对系统再次重启,此次重启后将第一区中备份区的备份文件覆盖第二区文件,覆盖完毕后重新进行程序更新。2.根据权利要求1所述对嵌入式Linux操作系统中的UBIFS文件系统备份方法,其特征在于,所述特征码选用4个字节。3.根据权利要求1所述对嵌入式Linux操作系统中的UBIFS文件系统备份方法,其特征在于,所述非易失存储器连接计时模块,整个系统第二次重启距离第一次重启不得小于I分钟,以后每次重启间隔不得小于半分钟,在3分钟内出现4次重启则停止作业发出报警信号。4.根据权利要求1所述对嵌入式Linux操作系统中的UBIFS文件系统备份方法,其特征在于,所述非易失存储器为铁电存储器FRAM。
【专利摘要】本发明的目的在于提供对嵌入式Linux操作系统中的UBIFS文件系统备份方法,减少由于断电导致数据设置问题。为了实现所述目的,对嵌入式Linux操作系统中的UBIFS文件系统备份方法,用于非易失存储器上,包括以下步骤:步骤1,将MTD分区;步骤2,将第一区设置两个功能区块;步骤3,第二区内存放和第一区中备份区相同的UBIFS文件系统;步骤4,在第三区内存放应用程序及数据;步骤5,每次系统启动时记录第二区内存中UBIFS文件系统的uboot特征码;步骤6,进行程序更新时应用程序修改第二区中UBIFS文件系统数据。通过这样的设置,本发明通过开辟一块只读MTD分区,用来备份UBIFS文件系统,从而达到修复文件系统的目的。
【IPC分类】G06F11/14
【公开号】CN105138433
【申请号】CN201510641909
【发明人】马小辉, 赵强, 郭巨锋
【申请人】华立仪表集团股份有限公司
【公开日】2015年12月9日
【申请日】2015年9月30日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1