一种嵌入式Linux存储分区的开发方法

文档序号:10724751阅读:239来源:国知局
一种嵌入式Linux存储分区的开发方法
【专利摘要】本发明公开一种嵌入式Linux分区与数据还原方法,包括步骤:S101、bootloader在信息区创建初始分区表;S102、bootloader根据初始分区表升级镜像程序,并根据升级的镜像数据地址更新分区表,以及将升级的镜像数据存储至备份镜像分区;S103、bootloader将分区信息传入Linux内核,Linux内核解析分区信息并将解析成功的分区信息与存储介质相关联。本发明还公开一种嵌入式Linux分区与数据还原系统及系统开发方法。相较于现有技术,本发明可实现对嵌入式Linux系统动态分区、文件系统故障还原,减少产品的维护与开发成本。
【专利说明】
一种嵌入式Li nux存储分区的开发方法[0001 ] 本案是以申请号为201310435177.X,申请日:2013年9月23号,名称为《嵌入式 Linux分区与数据还原方法、系统及系统开发方法》的专利申请为母案的分案申请。
技术领域
[0002]本发明涉及计算机应用领域,尤其涉及一种嵌入式Linux分区与数据还原方法、系统及系统开发方法。【背景技术】
[0003]嵌入式Linux系统目前广泛的使用在电子行业与微型计算机行业,其特点是开发方便、可移植性强、任务处理高效与节省硬件资源。
[0004]嵌入式Linux系统目前主要的数据存储介质有硬盘、Nandflash和iNand/SD/MMC, 其中Nandf lash由于价格低廉、存储容量大与通用性强处于行业中普遍使用的存储器。 Nandflash由于其自身的电气特性是使用充放电原理来修改数据,这必然会导致数据的存储单元,在多次修改之后产生不合格数据,这不合格数据所在的存储单元,我们俗称坏块 (invalid block),坏块的产生必然会导致Linux系统下文件系统的破损和分区不能正常使用等一系列数据存储问题。
[0005]鉴于Linux存储介质可能出现坏块的现象,而目前嵌入式行业使用Linux的分区普遍使用在Linux内核中设置默认值,会存在分区挂载失败和文件系统数据异常的风险。
【发明内容】

[0006]为解决上述问题,本发明采用的一个技术方案是:
[0007]提供一种嵌入式Linux分区与数据还原方法,包括步骤:S101、boot loader在信息区创建初始分区表,分区表用于记录镜像分区对应分区信息,镜像分区包括bootloader分区、Linux内核分区、备份镜像分区、根文件系统分区、用户文件系统分区;S102、bootloader 根据初始分区表升级镜像程序,并根据升级的镜像数据地址更新分区表,以及将升级的镜像数据存储至备份镜像分区;S103、bootloader将分区信息传入Linux内核,Linux内核解析分区信息并将解析成功的分区信息与存储介质相关联。
[0008]本发明采用的另一个技术方案是:
[0009]提供一种嵌入式Linux分区与数据还原系统开发方法,包括步骤:设置bootloader 对外人机交互接口,用于支持预设传输途径下,数据存储介质所有分区镜像的升级以及参数设置;设置bootloader数据存储介质驱动接口,用于判断坏块以及正确读写数据;在 bootloader代码中预置初始分区表,分区表保存在信息区,信息区为数据存储介质不可能出现坏块的位置设置信息区,分区表用于记录镜像分区对应分区信息,镜像分区包括 bootloader分区、Linux内核分区、备份镜像分区、根文件系统分区、用户文件系统分区;在 boot loader代码中设计坏块管理机制,当boot loader升级镜像程序判定出现坏块时,将分区的起始地址跳过坏块向后移动,将新的分区的起始地址更新至分区表。在bootloader代码中设计Linux能够识别的分区信息数据格式以将分区表传入Linux内核,分区信息包括分区号、分区名称、分区的起始地址、分区容量、分区属性;在Linux源码中添加对分区信息数据格式的解析函数,用于内核解析分区信息并将解析成功的分区信息与存储介质相关联, 其中解析过程处于early或init阶段。
[0010]本发明提供的嵌入式Linux分区与数据还原方法、系统及系统开发方法,利用 bootloader对各个镜像的管理和保护,在嵌入式Linux内核启动时传入动态分区信息,嵌入式Linux内核解析bootloader传入的分区信息并与数据存储介质关联,根文件系统只读并能够引导挂载用户文件系统,挂载失败或者用户要求还原时,擦除数据存储介质标记区并标记无效,bootloader启动时判断用户文件系统区是否无效,如果无效将其从备份区还原。 相较于现有技术,本发明增加对嵌入式Linux系统动态分区、文件系统故障还原,减少产品的维护与开发成本。【附图说明】
[0011]图1是本发明一实施方式中一种嵌入式Linux分区与数据还原系统开发方法的执行流程图;
[0012]图2是本发明一实施方式中的镜像分区示意图;
[0013]图3是本发明一实施方式中一种嵌入式Linux分区与数据还原方法的执行流程图;
[0014]图4是数据还原步骤的具体执行流程图;
[0015]图5是步骤S102的具体执行流程图;
[0016]图6是本发明一实施方式中一种嵌入式Linux分区与数据还原系统;[〇〇17]图7是图6中升级模块的功能模块图。[〇〇18]主要元件符号说明[〇〇19]嵌入式Linux动态分区与数据还原系统100;
[0020]创建模块10;
[0021]升级模块20;
[0022]关联模块30;
[0023]第一判断模块40;
[0024]复制模块50;
[0025]挂载判断模块60;
[0026]重启模块70;
[0027]下载子模块21;
[0028]升级判断子模块22;
[0029]坏块跳过子模块23;
[0030]更新子模块24。【具体实施方式】
[0031]为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。
[0032]请参阅图1,是本发明一实施方式中一种嵌入式Linux动态分区与数据还原系统开发方法的执行流程图。
[0033] —种嵌入式Linux分区与数据还原系统开发方法,包括如下步骤:[〇〇34] 步骤S301、设置bootloader对外人机交互接口,所述对外人机交互接口用于支持预设传输途径下,数据存储介质所有分区镜像的升级以及参数设置。[0〇35]步骤S302、设置bootloader数据存储介质驱动接口,所述存储介质驱动接口用于判断坏块以及正确读写数据。[〇〇36] 步骤S303、在bootloader代码中预置初始分区表,分区表保存在信息区,信息区为数据存储介质不可能出现坏块的位置设置信息区,分区表用于记录镜像分区对应分区信息。请参阅图2,是本发明一实施方式中的镜像分区示意图。在本实施方式中,镜像分区包括 bootloader分区、Linux内核分区、备份镜像分区、根文件系统分区、用户文件系统分区。 [〇〇37] 步骤S304、在bootloader代码中设计坏块管理机制,所述坏块管理机制用于当 bootloader升级镜像程序判定出现坏块时,将分区的起始地址跳过坏块向后移动,并当完成移动后将新的分区的起始地址更新至分区表。[0〇38] 步骤S305、在bootloader代码中设计Linux能够识别的分区信息数据格式,分区信息包括分区号、分区名称、分区的起始地址、分区容量、分区属性。[〇〇39] 具体地,将分区信息组包在cmdline中,其格式如下:
[0040] cmdline=mtdarry: [num], [name], [start], [size], [opt];[〇〇41 ] 其中,num表示mtd分区号,name表示mtd分区名称,start表示当前分区的起始地址,size表示分区容量,opt表示分区属性。
[0042]步骤S306、在Linux源码中添加对分区信息数据格式的解析函数,所述解析函数用于内核解析分区信息并将解析成功的分区信息与存储介质相关联,其中解析过程处于 early 或 init 阶段。
[0043]在本实施方式中,所述的一种嵌入式Linux动态分区与数据还原系统开发方法,还包括步骤:[〇〇44] 步骤S307、在bootloader代码中设计备份机制,所述备份机制用于将升级的镜像数据存储至备份镜像分区备份。
[0045]步骤S308、在根文件系统挂载用户文件系统的脚本中添加挂载失败机制,所述挂载失败机制用于当挂载失败时将用户文件系统分区标记为不合法并重启系统。[0〇46] 步骤S309、在boot loader代码中设计还原机制,所述还原机制用于在Linux内核启动之前判断用户文件系统分区是否标记为不合法,并当判定不合法时从所述备份镜像分区将升级的镜像数据复制到用户文件系统分区,然后将用户文件系统分区标记为合法。[〇〇47]其中,所述步骤S308前还包括步骤:在根文件系统中添加一个用于擦写分区的工具程序;所述“将用户文件系统分区标记为不合法”具体为:使用所述工具程序将用户文件系统分区以第〇块地址偏移擦除10个块;所述“判断用户文件系统分区是否标记为不合法” 具体为:判断用户文件系统分区的第0块地址上的数据是否被擦除,如果被擦除则判定为不合法;所述“将用户文件系统分区标记为合法”具体为将用户文件系统分区的第0块地址上的数据标记为已使用。例如,假设用户文件系统在mtd第3分区,并且属于UBI文件系统,则添加如下命令:
[0048] “ubiattch/dev/ubi_ctrl-m 3
[0049]mount-t ubifs ubil:usrfs/usr
[0050]if[$?!=〇];
[0051]then
[0052]echo“mount fail”
[0053]/etc/mtd/flash_erase/dev/mtd3 0x0 10
[0054]echo“reboot”
[0055]reboot
[0056]else
[0057]echo“mount ok”
[0058]fi;”[〇〇59]以上命令的意思是,挂载mtd3分区,如果失败则将mtd3以0地址偏移擦除10个块,然后软件重启设备。[0〇6〇]其中,所述工具程序使用开源软件mtd-utils-tools编译生成。
[0061]本发明的嵌入式Linux分区与数据还原系统开发方法,解决了系统在反复升级过程中导致数据存储介质坏块产生影响分区正常使用的问题,减少了内核源码的修改和维护;解决了文件系统破损情况无法挂载,从而需要返工维修替换数据存储介质与刷新镜像的问题,很大程度上节省了开发维护周期与成本。
[0062]下面对基于上述开发方法开发出的嵌入式Linux动态分区与数据还原系统所执行的一种嵌入式Linux动态分区与数据还原方法进行说明。
[0063]请参阅图3,是本发明一实施方式中一种嵌入式Linux分区与数据还原方法的执行流程图,包括步骤:[0〇64]步骤S101、bootloader在信息区创建初始分区表,分区表用于记录镜像分区对应分区信息,镜像分区包括bootloader分区、Linux内核分区、备份镜像分区、根文件系统分区、用户文件系统分区。
[0065]其中,所述信息区是数据存储介质不可能出现坏块的位置,所述分区信息包括各分区的起始地址、分区容量。[〇〇66]步骤S102、b〇〇tl〇ader根据初始分区表升级镜像程序,并根据升级的镜像数据地址更新分区表,以及将升级的镜像数据存储至备份镜像分区。
[0067]步骤S103、boot loader将分区信息传入Linux内核,Linux内核解析分区信息并将解析成功的分区信息与存储介质相关联。
[0068]在本实施方式中,所述的一种嵌入式Linux分区与数据还原方法还包括数据还原步骤,请参阅图4,是数据还原步骤的具体执行流程图。该数据还原步骤具体包括:[0〇69]步骤S201、boot loader在Linux内核启动之前判断用户文件系统分区是否标记为合法,若否,进入步骤S202,若是,进入步骤S203;
[0070]步骤S202、b〇〇tl〇ader从所述备份镜像分区将升级的镜像数据复制到用户文件系统分区,然后将用户文件系统分区标记为合法,进入步骤S201;
[0071]步骤S203、当Linux内核启动后,执行根文件系统挂载其他文件系统并判断是否挂载成功,若否,进入步骤S204,若是,系统正常运行;[〇〇72]步骤S204、将用户文件系统分区标记为不合法并重启系统。
[0073]其中,所述“将用户文件系统分区标记为不合法”具体步骤为:使用工具程序将用户文件系统分区以第〇块地址偏移擦除10个块;所述“判断用户文件系统分区是否标记为不合法”具体为:判断用户文件系统分区的第〇块地址上的数据是否被擦除,如果被擦除则判定为不合法;所述“将用户文件系统分区标记为合法”具体为将用户文件系统分区的第〇块地址上的数据标记为已使用。
[0074]其中,请参阅图5,是步骤S102的具体执行流程图。所述步骤S102具体包括:[0〇75]步骤S1021、bootloader将Linux内核、用户文件系统和其他数据下载到指定分区中,在此过程,如果分区头处于坏块区域,将分区的相应数据向后移动一个单元,同时更新分区表;[0〇76] 步骤S1022、当bootloader升级镜像程序时,判断是否出现坏块;[〇〇77]步骤S1023、当判定出现坏块时,将分区的起始地址跳过坏块向后移动;[〇〇78] 步骤S1024、当完成移动后,将新的分区的起始地址更新至分区表。
[0079]请参阅图6,是本发明一实施方式中一种嵌入式Linux动态分区与数据还原系统的功能模块中。所述嵌入式Linux动态分区与数据还原系统100包括创建模块10、升级模块20、 关联t旲块30。[0〇8〇]创建模块10用于使用bootloader在信息区创建初始分区表,分区表用于记录镜像分区对应分区信息,镜像分区包括bootloader分区、Linux内核分区、备份镜像分区、根文件系统分区、用户文件系统分区。[〇〇81]升级模块20用于使用bootloader根据初始分区表升级镜像程序,并根据升级的镜像数据地址更新分区表,以及将升级的镜像数据存储至备份镜像分区;[0〇82]关联模块30用于使用bootloader将分区信息传入Linux内核,Linux内核解析分区信息并将解析成功的分区信息与存储介质相关联。
[0083]其中,所述信息区是数据存储介质不可能出现坏块的位置,所述分区信息包括各分区的起始地址、分区容量。
[0084]在本实施方式中,所述的一种嵌入式Linux分区与数据还原系统100还包括第一判断模块40、复制模块50、挂载判断模块60、重启模块70。[0〇85]第一判断模块40用于使用bootloader在Linux内核启动之前判断用户文件系统分区是否标记为合法。[〇〇86]复制模块50用于当第一判断模块40判定用户文件系统未有标记为合法时,使用 bootloader从所述备份镜像分区将升级的镜像数据复制到用户文件系统分区,然后将用户文件系统分区标记为合法,然后通知第一判断模块40执行判断操作。[〇〇87]挂载判断模块60用于当第一判断模块40判定用户文件系统标记为合法时,且当 Linux内核启动后,执行根文件系统挂载其他文件系统并判断是否挂载成功,若是,系统正常运行。
[0088]重启模块70用于当挂载判断模块判定没有挂载成功时,将用户文件系统分区标记为不合法并重启系统。
[0089]请参阅图7,是图6中升级模块的功能模块图。在本实施方式中,所述升级模块20具体包括下载子模块21、升级判断子模块22、坏块跳过子模块23、更新子模块24。[0〇9〇]下载子模块21用于使用bootloader将Linux内核、用户文件系统和其他数据下载到指定分区中,在此过程,如果分区头处于坏块区域,将分区的相应数据向后移动一个单元,同时更新分区表。
[0091] 升级判断子模块22用于当bootloader升级镜像程序时,判断是否出现坏块。
[0092]坏块跳过子模块23用于当升级判断子模块当判定出现坏块时,将分区的起始地址跳过坏块向后移动。[〇〇93]更新子模块24用于当坏块跳过子模块23完成移动后,将新的分区的起始地址更新至分区表。
[0094]本发明提供的嵌入式Linux分区与数据还原方法、系统及系统开发方法,利用 bootloader对各个镜像的管理和保护,在嵌入式Linux内核启动时传入动态分区信息,嵌入式Linux内核解析bootloader传入的分区信息并与数据存储介质关联,根文件系统只读并能够引导挂载用户文件系统,挂载失败或者用户要求还原时,擦除数据存储介质标记区并标记无效,bootloader启动时判断用户文件系统区是否无效,如果无效将其从备份区还原。 相较于现有技术,本发明可实现对嵌入式Linux系统动态分区、文件系统故障还原,减少产品的维护与开发成本。
[0095]以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
【主权项】
1.一种嵌入式Linux存储分区的开发方法,其特征在于,包括步骤:设置bootloader对外人机交互接口,所述对外人机交互接口用于支持预设传输途径 下,数据存储介质所有分区镜像的升级以及参数设置;设置bootloader数据存储介质驱动接口,所述数据存储介质驱动接口用于判断坏块以 及正确读写数据;在bootloader代码中预置初始分区表,分区表保存在信息区,信息区为数据存储介质 不可能出现坏块的位置设置信息区,分区表用于记录镜像分区对应分区信息,镜像分区包 括bootloader分区、Linux内核分区、备份镜像分区、根文件系统分区、用户文件系统分区;在bootloader代码中设计坏块管理机制,所述坏块管理机制用于当bootloader升级镜 像程序判定出现坏块时,将分区的起始地址跳过坏块向后移动,将新的分区的起始地址更 新至分区表;在bootloader代码中设计Linux能够识别的分区信息数据格式,分区信息包括分区号、 分区名称、分区的起始地址、分区容量、分区属性;在Linux源码中添加对分区信息数据格式的解析函数,所述解析函数用于内核解析分 区信息并将解析成功的分区信息与存储介质相关联,其中解析过程处于early或init阶段。2.根据权利要求1所述的一种嵌入式Linux存储分区的开发方法,其特征在于,还包括 步骤:在bootloader代码中设计备份机制,所述备份机制用于将升级的镜像数据存储至备份 镜像分区备份在根文件系统挂载用户文件系统的脚本中添加挂载失败机制,所述挂载失败机制用于 当挂载失败时将用户文件系统分区标记为不合法并重启系统;在boot loader代码中设计还原机制,所述还原机制用于在Linux内核启动之前判断用 户文件系统分区是否标记为不合法,并当判定不合法时从所述备份镜像分区将升级的镜像 数据复制到用户文件系统分区,然后将用户文件系统分区标记为合法。3.根据权利要求2所述的一种嵌入式Linux存储分区的开发方法,其特征在于,还包括 步骤:在根文件系统中添加一个用于擦写分区的工具程序;所述“将用户文件系统分区标记为不合法”具体为:使用所述工具程序将用户文件系统 分区以第0块地址偏移擦除10个块;所述“判断用户文件系统分区是否标记为不合法”具体为:判断用户文件系统分区的第 0块地址上的数据是否被擦除,如果被擦除则判定为不合法;所述“将用户文件系统分区标记为合法”具体为将用户文件系统分区的第〇块地址上的 数据标记为已使用。4.根据权利要求3所述的一种嵌入式Linux存储分区的开发方法,其特征在于,所述工 具程序使用开源软件mtd-utils-tools编译生成。
【文档编号】G06F11/14GK106095620SQ201610410615
【公开日】2016年11月9日
【申请日】2013年9月23日 公开号201610410615.0, CN 106095620 A, CN 106095620A, CN 201610410615, CN-A-106095620, CN106095620 A, CN106095620A, CN201610410615, CN201610410615.0
【发明人】甘禹, 黄歆颋
【申请人】恒鸿达科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1