公开/公告号CN102467522A
专利类型发明专利
公开/公告日2012-05-23
原文格式PDF
申请/专利权人 中兴通讯股份有限公司;
申请/专利号CN201010538436.8
发明设计人 陈亮;
申请日2010-11-10
分类号G06F17/30;
代理机构北京派特恩知识产权代理事务所(普通合伙);
代理人蒋雅洁
地址 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦法务部
入库时间 2023-12-18 05:12:52
法律状态公告日
法律状态信息
法律状态
2013-09-11
授权
授权
2012-07-04
实质审查的生效 IPC(主分类):G06F17/30 申请日:20101110
实质审查的生效
2012-05-23
公开
公开
技术领域
本发明涉及文件系统的自编程技术,特别是指一种基于NAND闪存 (FLASH)的文件系统的自编程方法及装置。
背景技术
NAND FLASH是FLASH的一种,其内部采用非线性宏单元模式,为固态 大容量内存的实现提供了廉价有效的解决方案。由于NAND FLASH具有容量 较大及改写速度快等优点,适用于大量数据的存储,因此,在业界得到了广泛 应用。
在嵌入式系统中,通常用NAND FLASH作为程序和数据的存储器,并利 用文件系统对NAND FLASH进行管理,所述文件系统可以是文件配置表(FAT, File Allocation Table)、闪存设备日志型文件系统(JFFS,Journalling Flash File System)、YAFFS(YetAnother Flash Filing System)等。文件系统中记录了存储 在NAND FLASH上的文件和目录信息,文件系统通过不同的数据标识识别文 件、目录及其他信息。还有一些文件及目录,文件系统通过写在NAND FLASH 的spare区的数据,也叫OOB区的数据,对其进行标识。同时,文件系统也以 二进制的形式保存在NAND FLASH中。
目前,使用较为广泛的基于NAND FLASH的编程是利用NAND FLASH 编程器、嵌入式中央处理器(CPU,Central Processing Unit)自带的NAND FLASH 编程接口、网络文件系统结合嵌入式系统的Boot Loader程序、或一些专用的编 程设备实现的。其中,NAND FLASH编程器对NAND FLASH的编程较快但是 价格昂贵,并且编程器所支持的NAND FLASH的型号有限;嵌入式CPU自带 的NAND FLASH编程接口虽然编程方便,但是不能对所有的文件系统进行编 程,并且速度较慢;使用网络文件系统结合嵌入式系统的Boot Loader程序的方 法进行文件系统编程时,需要依赖Boot Loader程序、网络文件系统服务器及网 络的功能,使用过程中需要多次的人为设定Boot Loader程序或操作系统的启动 参数和使用不同的系统命令,如此,才能将文件系统正确编程。整个过程不但 非常耗时,而且对人员要求很高,不适用于大规模生产;专用的编程设备的价 格比较昂贵,且一般需要使用网络,如此,会造成数据的泄露。
综上所述,现有的编程过程中存在耗时、对设备及技术要求过高的缺陷。
发明内容
有鉴于此,本发明的主要目的在于提供一种基于NAND FLASH的文件系 统的自编程方法及装置,以解决现有的自编程过程耗时、对设备及技术要求过 高的问题。
为达到上述目的,本发明的技术方案是这样实现的:
本发明提供了一种基于NAND FLASH的文件系统的自编程方法,该方法 包括:
解析文件系统的二进制文件,得到文件系统信息文件;
上电后,Boot Loader程序从NAND FLASH中读取并保存文件系统信息文 件的数据,检验文件系统信息文件中的文件系统信息文件的校验码、魔数、和/ 或唯一标识码是否均正确,确定均正确后,进行文件系统的编程。
上述方案中,所述解析文件系统的二进制文件,得到文件系统信息文件, 为:
根据预先配置的文件系统信息文件配置信息,设置魔数和/或唯一标识码;
利用魔数和/或唯一标识码,计算文件系统信息文件的校验码。
上述方案中,所述解析文件系统的二进制文件,得到文件系统信息文件, 进一步包括:利用文件系统的二进制文件中的数据,计算文件系统数据校验码; 和/或,
分析文件系统的二进制文件中的数据,得到文件系统信息文件。
上述方案中,在解析文件系统的二进制文件之前,该方法进一步包括:将 根文件系统的目录结构转换成文件系统的二进制文件。
上述方案中,在上电之前,该方法进一步包括:Boot Loader程序、操作系 统、文件系统信息文件及文件系统的二进制文件通过CPU自带的NAND FLASH编程接口写入NAND FLASH中。
上述方案中,所述进行文件系统的编程,为:
Boot Loader程序根据文件系统信息文件中指定的、或固定的NAND FLASH 指定的地址中读取文件系统数据;
之后将需要写入文件系统数据的区域擦除;
根据文件系统信息文件中记录的、或已约定的文件系统类型和编程方法将 系统文件数据从文件系统信息文件中指定的起始位置、或固定NAND FLASH 指定的起始位置写入NAND FLASH,直到读取到的文件系统数据全部写入;
修改所述文件系统信息文件的数据为已改写的标识。
上述方案中,当文件系统信息文件中包含文件系统数据校验码时,在将需 要写入文件系统数据的区域擦除之前,该方法进一步包括:
根据读取的文件系统数据,计算文件系统数据校验码;
将计算得到的文件系统数据校验码与文件系统信息文件中的文件系统数据 校验码进行比较,确定相同后,则将需要写入文件系统数据的区域擦除。
上述方案中,在从NAND FLASH中读取并保存文件系统信息文件的数据 之前,该方法进一步包括:
Boot Loader程序启动后,对设备进行初始化操作。
本发明还提供了一种基于NAND FLASH的文件系统的自编程装置,该装 置包括:解析单元、NAND FLASH;其中,
NAND FLASH包括Boot Loader程序单元;
解析单元,用于解析文件系统的二进制文件,得到文件系统信息文件;
NAND FLASH,用于存储文件系统信息文件;
Boot Loader程序单元,用于上电后,从NAND FLASH中读取并保存文件 系统信息文件的数据,检验文件系统信息文件中的文件系统信息文件的校验码、 魔数、和/或唯一标识码是否均正确,确定均正确后,进行文件系统的编程。
上述方案中,该装置进一步包括二进制转换单元,用于将根文件系统的目 录结构转换成文件系统的二进制文件。
上述方案中,该装置进一步包括CPU自带的NAND FLASH编程接口,用 于将Boot Loader程序、操作系统、文件系统信息文件及文件系统的二进制文件 写入NAND FLASH中。
本发明提供的基于NAND FLASH的文件系统的自编程方案,Boot Loader 程序从NAND FLASH中读取并保存文件系统信息文件的数据,检验文件系统 信息文件中的文件系统信息文件的校验码、魔数、和/或唯一标识码是否均正确, 确定均正确后,进行文件系统的编程,如此,能快速实现文件系统的编程,而 且,还能降低对编程设备及技术人员的要求,进而能降低研发和生产成本。
另外,Boot Loader程序、操作系统、文件系统信息文件及文件系统的二进 制文件通过CPU自带的NAND FLASH编程接口写入NAND FLASH中,不需 要再额外使用外界设备进行写入,如此,能保证写入NAND FLASH中的数据 的安全性。
附图说明
图1为本发明基于NAND FLASH的文件系统的自编程方法流程示意图;
图2为实施例基于NAND FLASH的文件系统的自编程方法流程示意图;
图3为本发明基于NAND FLASH的文件系统的自编程装置结构示意图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
本发明基于NAND FLASH的文件系统的自编程方法,如图1所示,包括 以下步骤:
步骤101:解析文件系统的二进制文件,得到文件系统信息文件;
这里,所述文件系统信息文件包含文件系统信息文件的校验码和魔数、和/ 或唯一标识码,进一步地,还可以包括:文件系统数据校验码和/或文件系统信 息;其中,魔数和/或唯一标识码用于标识文件系统信息文件的身份;所述文件 系统信息可以进一步包括:文件系统字节数、文件系统占用的块数量、文件系 统占用的页数量、文件系统编程方式、文件系统起始位置及其它在编程过程需 要的信息;所述文件系统数据校验码用于校验文件系统数据的正确性;
所述解析文件系统的二进制文件,得到文件系统信息文件,具体为:
根据预先配置的文件系统信息文件配置信息,设置魔数和/或唯一标识码;
利用魔数和/或唯一标识码,计算文件系统信息文件的校验码;
具体地,如果文件系统信息文件配置信息包含魔数时,则利用魔数计算文 件系统信息文件的校验码,如果文件系统信息文件配置信息包含唯一标识码时, 则利用唯一标识码计算文件系统信息文件的校验码,如果文件系统信息文件配 置信息包含魔数和唯一标识码时,则利用魔数和唯一标识码计算文件系统信息 文件的校验码;其中,计算所采用的方法可以是现有的所有的计算校验码的任 一方法,比如循环冗余校验(CRC,Cyclic Redundancy Check)法等;
可以设置魔数、和/或唯一标识码为任意字符串;
其中,依据用户需要配置文件系统信息文件配置信息,所述文件系统信息 文件配置信息包含文件系统信息文件的校验码、魔数、和/或唯一标识码、和/ 或文件系统数据校验码、和/或文件系统信息,换句话说,由配置信息的内容决 定文件系统信息文件中的数据;举个例子来说,用户要求较高的安全性,且在 后续操作中根据文件系统信息文件中的文件系统信息,进行自编程过程,则可 以配置文件系统信息文件配置信息为文件系统信息文件的校验码、魔数、唯一 标识码、文件系统数据校验码、文件系统信息;
当文件系统信息文件配置信息中包含文件系统数据校验码时,得到文件系 统信息文件的过程还可以进一步包括:
利用文件系统的二进制文件中的数据,计算文件系统数据校验码;
当文件系统信息文件配置信息中包含文件系统信息时,得到文件系统信息 文件的过程还可以进一步包括:
分析文件系统的二进制文件中的数据,得到文件系统信息;
其中,计算所采用的方法可以是现有的所有的计算校验码的任一方法,比 如CRC法等;
所述文件系统信息文件的内容包括:文件系统字节数、文件系统占用的块 数量、文件系统占用的页数量、文件系统编程方式、文件系统起始位置及其它 在编程过程需要的信息;
在解析文件系统的二进制文件之前,该方法还可以进一步包括:
将根文件系统的目录结构转换成文件系统的二进制文件;
转换的具体处理过程与现有的转化过程完全相同,转化所使用的二进制文 件的工具可以是现有的所有的二进制文件的工具,比如支持YAFFS的 mkyaffsimage工具等。
步骤102:上电后,Boot Loader程序从NAND FLASH中读取并保存文件 系统信息文件的数据,检验文件系统信息文件中的文件系统信息文件的校验码、 魔数、和/或唯一标识码是否均正确,确定均正确后,进行文件系统的编程;
具体地,Boot Loader程序会事先将魔数、和/或唯一标识码保存,在从NAND FLASH中读取并保存文件系统信息文件的数据后,将文件系统信息文件中的魔 数、和/或唯一标识码与自身保存的魔数、和/或唯一标识码进行比较,确定相同 后,则认为魔数、和/或唯一标识码正确;并且,Boot Loader程序利用文件系统 信息文件中的魔数、和/或唯一标识码,采用与解析过程相同的计算方法计算文 件系统信息文件的校验码,之后将文件系统信息文件中的文件系统信息文件的 校验码与计算得到的文件系统信息文件的校验码相比较,确定相同后,则认为 文件系统信息文件的校验码正确;其中,Boot Loader程序已事先获知计算校验 码的方法;
当确定文件系统信息文件中的文件系统信息文件的校验码、魔数、和/或唯 一标识码不正确后,则不进行任何操作;
在上电之前,该方法还可以进一步包括:
Boot Loader程序、操作系统、文件系统信息文件及文件系统的二进制文件 通过CPU自带的NAND FLASH编程接口写入NAND FLASH中;
在从NAND FLASH中读取并保存文件系统信息文件的数据之前,该方法 还可以进一步包括:
Boot Loader程序启动后,对设备进行初始化操作;其中,设备主要是NAND FLASH和内存,具体处理过程与现有的处理过程完全相同,这里不再赘述;
所述进行文件系统的编程,具体为:
Boot Loader程序根据文件系统信息文件中指定的、或固定的NAND FLASH 指定的地址中读取文件系统数据;
之后将需要写入文件系统数据的区域擦除;
根据文件系统信息文件中记录的、或已约定的文件系统类型和编程方法将 文件系统数据从文件系统信息文件中指定的起始位置、或固定NAND FLASH 指定的起始位置写入NAND FLASH,直到读取到的文件系统数据全部写入;
修改所述文件系统信息文件的数据为已改写的标识;
其中,当文件系统信息文件中包含文件系统信息时,则根据文件系统信息 文件中指定的地址中读取文件系统数据,相应的,根据文件系统信息文件中记 录的文件系统类型和编程方法将系统文件数据从文件系统信息文件中指定的起 始位置写入NAND FLASH,直到读取到的文件系统数据全部写入,即:将文件 系统信息文件中记录的所有NAND FLASH的块和页的数据全部写入;
当文件系统信息文件中包含不文件系统信息时,则根据固定的NAND FLASH指定的地址中读取文件系统数据,相应的,根据已约定的文件系统类型 和编程方法将系统文件数据从固定NAND FLASH指定的起始位置写入NAND FLASH,直到读取到的文件系统数据全部写入;
所述文件系统数据是指文件系统的二进制文件的内容;
所述需要写入文件系统数据的区域就是存放读取的文件系统数据的区域;
当文件系统信息文件中包含文件系统数据校验码时,在将需要写入文件系 统数据的区域擦除之前,该方法还可以进一步包括:
根据读取的文件系统数据,计算文件系统数据校验码;
将计算得到的文件系统数据校验码与文件系统信息文件中的文件系统数据 校验码进行比较,确定相同后,则再将需要写入文件系统数据的区域擦除,否 则,退出文件系统的编程过程;
其中,Boot Loader程序已事先获知计算校验码的方法;
修改所述文件系统信息文件的数据为已改写的标识后,在下次启动时,在 读取到所述文件系统信息文件的内容为已改写的标识后,则不会进入编程过程;
文件系统的编程结束后,Boot Loader程序加载操作系统,操作系统运行后, 文件系统即可被使用;其中,加载操作系统的具体处理过程与现有的处理过程 完全相同,这里不再赘述。
下面结合实施例对本发明再作进一步详细描述。
本实施例的应用场景是:嵌入式Linux平台中的YAFFS2文件系统的编程 过程;YAFFS2文件系统是一种能在大容量的NAND FLASH上使用的文件系 统,它能够被Linux或WinCE等操作系统所支持;Boot Loader程序采用U-BOOT 1.3.4版本,嵌入式CPU的核心为ARM926EJS,其主频为180MHz;采用 mkYAFFS2image工具将YAFFS2根文件系统的目录结构转换为YAFFS2文件系 统的二进制文件。
本实施例基于NAND FLASH的文件系统的自编程方法,如图2所示,包 括以下步骤:
步骤201:将YAFFS2根文件系统的目录结构转换为YAFFS2文件系统的 二进制文件。
步骤202:根据预先配置的文件系统信息文件配置信息,解析YAFFS2文 件系统的二进制文件,得到文件系统信息文件;
这里,预先配置的文件系统信息文件配置信息包含文件系统信息文件的校 验码、魔数、唯一标识码、文件系统数据校验码、文件系统信息;相应的,得 到的文件系统信息文件包含魔数、唯一标识码、文件系统信息文件的校验码、 YAFFS2文件系统数据校验码及YAFFS2文件系统信息的具体数据;其中,所 述文件系统信息包括:文件系统字节数、文件系统占用的块数量、文件系统占 用的页数量、文件系统编程方式、文件系统起始位置及其它在编程过程需要的 信息。
步骤203:Boot Loader程序、操作系统、文件系统信息文件及YAFFS2文 件系统的二进制文件通过CPU自带的NAND FLASH编程接口写入NAND FLASH中;
这里,操作系统为Linux;
YAFFS2文件系统的二进制文件以2048字节+64字节的方式保存的,在编 程过程中需要将2048字节写入NAND FLASH的一个页中,64字节写入该页所 对应的spare区中。
步骤204:上电后,Boot Loader程序启动后,对NAND FLASH和内存进 行初始化操作。
步骤205:Boot Loader程序从NAND FLASH中读取并保存文件系统信息 文件的数据,检验文件系统信息文件中的文件系统信息文件的校验码、魔数、 和/或唯一标识码是否均正确,如果正确,则执行步骤206,否则,执行步骤210;
这里,可以设置当不正确时通过蜂鸣或液晶屏的显示提示技术人员出错。
步骤206:Boot Loader程序根据文件系统信息文件中指定的地址中读取文 件系统数据,根据读取的YAFFS2文件系统数据,计算YAFFS2文件系统数据 校验码。
步骤207:判断计算得到的YAFFS2文件系统数据校验码与文件系统信息 文件中的YAFFS2文件系统数据校验码是否相同,如果相同,则执行步骤208, 否则,退出YAFFS2文件系统的编程过程,之后执行步骤210;
这里,可以设置当不正确时通过蜂鸣或液晶屏的显示提示技术人员出错。
步骤208:将需要写入文件系统数据的区域擦除,之后根据文件系统信息 文件中记录的文件系统类型和编程方法将系统文件数据从文件系统信息文件中 指定的起始位置写入NAND FLASH,直到文件系统信息文件中记录的所有 NAND FLASH的块和页的数据全部写入。
步骤209:完成后,修改所述文件系统信息文件的数据为已改写的标识, 之后加载操作系统,之后执行步骤210。
步骤210:结束当前处理流程。
采用上述方法,整个过程的时间为34s左右,编程完毕后且在操作系统加 载后,就可以进行应用程序的执行了。操作系统重新启动后,则不需要进入自 编程过程而直接进行加载操作系统的操作。
如果采用现有的网络文件系统(NFS,Network File System)结合U-BOOT 进行YAFFS2文件系统编程,则需要准备一台Linux服务器并启动NFS服务器。 U-BOOT启动后需要技术人员设置Linux内核的启动方式、设置NFS服务器网 络之间互连的协议(IP,Internet Protocol)地址、本机的媒体访问控制(MAC, Media Access Control)、及IP地址。操作系统内核启动成功挂载NFS文件系统 后,通过Linux的Shell命令将YAFFS2文件系统的目录写入NAND FLASH中, 之后需要技术人员再复位操作系统,之后修改U-BOOT参数,使操作系统读取 NAND FLASH上的文件系统数据,操作系统内核再次启动后才能正确识别 NAND FLASH上的YAFFS2文件系统。整个过程大概需要10分钟,并且需要 技术人员多次的设定Boot Loader程序或操作系统的启动参数和使用不同的系 统命令,才能完成整个编程。
为实现上述方法,本发明还提供了一种基于NAND FLASH的文件系统的 自编程装置,如图3所示,该装置包括:解析单元31、NAND FLASH 32;其 中,
NAND FLASH 32包括Boot Loader程序单元321;
解析单元31,用于解析文件系统的二进制文件,得到文件系统信息文件;
NAND FLASH 32,用于存储文件系统信息文件;
Boot Loader程序单元321,用于上电后,从NAND FLASH 32中读取并保 存文件系统信息文件的数据,检验文件系统信息文件中的文件系统信息文件的 校验码、魔数、和/或唯一标识码是否均正确,确定均正确后,进行文件系统的 编程。
其中,该装置还可以进一步包括二进制转换单元,用于将根文件系统的目 录结构转换成文件系统的二进制文件;
该装置还可以进一步包括:CPU自带的NAND FLASH编程接口,用于将 操作系统、文件系统信息文件及文件系统的二进制文件写入NAND FLASH 32 中;还用于将Boot Loader程序写入Boot Loader程序单元321。
所述Boot Loader程序单元321,还用于启动后,对设备进行初始化操作。
所述Boot Loader程序单元321,还用于当确定文件系统信息文件中的文件 系统信息文件的校验码、魔数、和/或唯一标识码不正确后,不进行任何操作。
所述Boot Loader程序单元321,还用于文件系统的编程结束后,加载操作 系统。
这里,本发明的所述装置中的Boot Loader程序单元的具体处理过程已在上 文中详述,不再赘述。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范 围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应 包含在本发明的保护范围之内。
机译: 基于NAND闪存的文件系统自编程方法和装置
机译: 一种NAND闪存元件的编程方法,能够通过检查字线来关闭程序
机译: 基于nand闪存的文件系统数据保存方法