CN101477469A - 一种启动代码的可靠性读取方法、写入方法和装置 - Google Patents

一种启动代码的可靠性读取方法、写入方法和装置 Download PDF

Info

Publication number
CN101477469A
CN101477469A CNA2009100086321A CN200910008632A CN101477469A CN 101477469 A CN101477469 A CN 101477469A CN A2009100086321 A CNA2009100086321 A CN A2009100086321A CN 200910008632 A CN200910008632 A CN 200910008632A CN 101477469 A CN101477469 A CN 101477469A
Authority
CN
China
Prior art keywords
code
file
piece
nand flash
message identification
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2009100086321A
Other languages
English (en)
Inventor
姬瑞勤
闻文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou H3C Technologies Co Ltd
Original Assignee
Hangzhou H3C Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou H3C Technologies Co Ltd filed Critical Hangzhou H3C Technologies Co Ltd
Priority to CNA2009100086321A priority Critical patent/CN101477469A/zh
Publication of CN101477469A publication Critical patent/CN101477469A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

本发明公开了一种启动代码的可靠性读取方法、写入方法和装置。其将启动代码划分为多个文件,为Nand Flash中存储启动代码的每个块分别设置信息标识,该信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在总存储块中的相对偏移,并根据该信息标识对Nand Flash中用于保存启动代码的块进行读写操作。通过使用本发明,可以根据Nand Flash中每个块的信息标识对块内存储的BootRom启动代码进行管理,使得BootRom启动代码的启动、读取或修改不受NandFlash的坏块率和坏块分布的影响,保证了设备的正常启动。

Description

一种启动代码的可靠性读取方法、写入方法和装置
技术领域
本发明涉及通信技术领域,特别涉及一种启动代码的可靠性读取方法、写入方法和装置。
背景技术
目前,通信设备中BootRom(Boot Read Only Memory,启动只读存储器)启动代码一般采用两段式结构:基本段代码和扩展段代码。其中,基本段代码主要完成CPU(Central Processing Unit,中央处理单元)、内存、串口、Flash(闪存)等驱动的初始化,以及从存储BootRom启动代码的装置上读取扩展段代码,并引导扩展段代码的启动。扩展段代码主要完成上层应用程序的引导和启动,例如:可以支持文件系统、解压缩、网口驱动、TFTP(Trivial FileTransferProtocol,简单文件传输协议)或FTP(File Transportation Protocol,文件传输协议)等。根据硬件不同,还可以支持硬盘、USB(Universal SerialBus,通用串行总线)、CF(Compact Flash,压缩闪存)卡等驱动。
通信设备一般使用Nand Flash(与非闪存器)保存BootRom启动代码。NandFlash(与非闪存器)内部存储单元的结构为块页结构,一般情况下每个块(Block)由64个页(Page)组成,Nand Flash以块为单位进行擦除,以页为单位进行读写。根据页大小的不同,Nand Flash又分为512字节页和2048字节页两种。以2048字节页的Nand Flash为例,每个存放数据的页都包括一个64字节的OOB(Out OfBand,Nand Flash上用来存储管理信息的空间)与其对应,通过维护OOB里保存的信息来对NandFlash中存储的内容进行管理。2048字节页的Nand Flash中每个Page的结构如下表1所示:
表1  2048字节页的Nand Flash中每个Page的结构
 
主存储区(2048字节) OOB数据区(64字节)
512字节页的Nand Flash中,每个存放数据的页都包括一个16字节的OOB。512字节页的Nand Flash中每个Page的结构与上表1所示的2048字节页的NandFlash中每个Page的结构相似,只是区域长度不同,在此不进行重复介绍。
Nand Flash的块中除了存储有基本段代码和扩展段代码外,在扩展段代码之后还可能存在记录了BootRom启动信息的标志区,为了安全起见,还可能存在扩展段备份和标志区备份。上电启动时,通信设备就可以从Nand Flash中固定块上的固定地址读取基本段代码和扩展段代码,以及之后可能存在的标志区、扩展段备份和标志区备份。然而,Nand Flash本身特性只能保证其第一个块是好块,该第一个块用以保存基本段代码,进而确保基本段代码无论在何时均可以正常启动。但是Nand Flash除第一个块之外的其他块均存在坏掉的可能。且对于不同的设备,Nand Flash的坏块率和坏块分布都不相同,因此如果按照现有技术,从某一固定的块和固定的地址去读取BootRom启动代码,显然极有可能将导致扩展段代码和标志区不能正常启动。例如:当基本段代码引导扩展段代码时,需要从第n个块读取扩展段代码并启动。当把BootRom启动代码加载到一台设备的Nand Flash中时,该设备的Nand Flash的第n个块可能恰好是坏块,从而导致该设备的扩展段代码无法正常启动。这与通信领域需要电信级的可靠性相比,显然不能满足需求。
发明内容
本发明提供一种启动代码的可靠性读取方法、写入方法和装置,以实现代码的读取和修改不依赖于其具体存在于哪个Nand Flash的Block上,进而解决不同的通信设备中Nand Flash具有不同的坏块率和坏块分布不同对代码启动的影响。
为达到上述目的,本发明提供一种启动代码的可靠性读取方法,包括:
步骤1,获取与非闪存器Nand Flash中每个块的信息标识,所述信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在所述总存储块中的相对偏移;
步骤2,根据所述Nand Flash中每个块的信息标识,从所述Nand Flash的块中读取各文件的代码,组成启动代码。
其中,所述步骤2具体包括:
根据所述每个块的信息标识,获取具有相同文件标识的块;
将所述具有相同文件标识的块中的代码,根据所述每个块在所述总存储块中的相对偏移进行依次读取,得到所述文件标识对应的文件;
将具有不同文件标识的各文件读取完成后,将所述各文件的代码组成启动代码。
其中,所述文件至少包括基本段和/或扩展段代码,还可以包括扩展段代码备份、标志区、标志区备份中的一种或多种,所述不同的文件具有不同的文件标识。
其中,所述Nand Flash中任一块内的代码具有相同的文件标识,具有不同文件标识的代码存储在不同块中。
本发明还提供一种启动代码的可靠性写入方法,包括:
步骤1,将启动代码划分为多个文件并为启动代码中的文件分配NandFlash中空闲的好块;
步骤2,将所述启动代码中的文件写入所述分配到的好块,并在所述好块中添加信息标识,所述信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在所述总存储块中的相对偏移。
其中,所述步骤2具体包括:
根据待写入代码的信息标识判断所述Nand Flash中是否存在存储有与所述待写入代码具有相同文件标识的代码的块;
存在时,删除所述存储有与所述待写入代码具有相同文件标识的代码的块中的内容,并将待写入代码写入所述获取到的好块,并在所述好块中添加信息标识;
不存在时,将待写入代码写入所述获取到的好块,并在所述好块中添加信息标识。
其中,所述文件至少包括基本段和/或扩展段代码,还可以包括扩展段代码备份、标志区、标志区备份中的一种或多种,所述不同的文件具有不同的文件标识。
其中,所述Nand Flash中任一块内的代码具有相同的文件标识,具有不同文件标识的代码存储在不同块中。
本发明还提供一种启动代码的读取装置,包括:
信息标识获取单元,用于获取与非闪存器Nand Flash中每个块的信息标识,所述信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在所述总存储块中的相对偏移;
启动代码获取单元,与所述信息标识获取单元连接,用于根据所述信息标识获取单元获取的Nand Flash中每个块的信息标识,从所述Nand Flash的块中读取各文件的代码,组成启动代码。
其中,所述启动代码获取单元包括:
块获取子单元,用于根据所述每个块的信息标识,获取具有相同文件标识的块;
文件获取子单元,与所述块获取子单元连接,用于将所述块获取子单元获取的具有相同文件标识的块中的代码,根据所述每个块在所述总存储块中的相对偏移进行依次读取,得到所述文件标识对应的文件;
启动代码获取子单元,与所述文件获取子单元连接,用于在所述文件获取子单元将具有不同文件标识的各文件读取完成后,将所述各文件的代码组成启动代码。
其中,所述文件至少包括基本段和/或扩展段代码,还可以包括扩展段代码备份、标志区、标志区备份中的一种或多种,所述不同的文件具有不同的文件标识。
其中,所述Nand Flash中任一块内的代码具有相同的文件标识,具有不同文件标识的代码存储在不同块中。
本发明还提供一种启动代码的写入装置,包括:
块分配单元,用于将启动代码划分为多个文件并为启动代码中的文件分配Nand Flash中空闲的好块;
启动代码写入单元,与所述块分配单元连接,用于将启动代码中的文件写入所述块分配单元分配的好块,并在所述好块中添加信息标识,所述信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在所述总存储块中的相对偏移。
其中,所述启动代码写入单元包括:
判断子单元,用于根据待写入代码的信息标识判断所述Nand Flash中是否存在存储有与所述待写入代码具有相同文件标识的代码的块;存在时通知删除子单元,不存在时通知写入子单元;
删除子单元,与所述判断子单元连接,用于根据所述判断子单元的通知,删除所述存储有与所述待写入代码具有相同文件标识的代码的块中的内容,并通知写入子单元;
写入子单元,与所述判断子单元和删除子单元连接,用于根据所述判断子单元或删除子单元的通知,将待写入代码写入所述获取到的好块,并在所述好块中添加信息标识。
其中,所述文件至少包括基本段和/或扩展段代码,还可以包括扩展段代码备份、标志区、标志区备份中的一种或多种,所述不同的文件具有不同的文件标识。
其中,所述Nand Flash中任一块内的代码具有相同的文件标识,具有不同文件标识的代码存储在不同块中。
与现有技术相比,本发明具有以下优点:
通过使用本发明,可以根据Nand Flash中每个块的信息标识对块内存储的BootRom启动代码进行管理,使得BootRom启动代码的启动、读取或修改不受Nand Flash的坏块率和坏块分布的影响,保证了设备的正常启动。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
图1为本发明启动代码的可靠性读取方法的流程图;
图2为本发明应用场景中对Nand Flash上启动代码进行读取操作的流程示意图;
图3为本发明启动代码的可靠性写入方法的流程图;
图4为本发明应用场景中对Nand Flash上启动代码进行写入操作的流程示意图;
图5为应用本发明方法的启动代码读取装置的结构示意图;
图6为应用本发明方法的启动代码写入装置的结构示意图。
具体实施方式
下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供一种启动代码的可靠性读取方法和写入方法,其核心思想在于:将启动代码划分为多个文件,并为Nand Flash中存储启动代码的每个块分别设置信息标识,该信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在总存储块中的相对偏移,根据该信息标识对Nand Flash中用于保存启动代码的块进行读写操作。
具体地,如图1所示,为本发明提供的启动代码的可靠性读取方法的流程图,具体包括:
步骤S101,获取Nand Flash中每个块的信息标识,该信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在总存储块中的相对偏移。
具体的,在本发明中,BootRom的启动代码除了包括基本段代码和扩展段代码外,还可能包括标志区。另外,为安全起见,还可能包括扩展段备份和标志区备份。本发明提供的方法中,将上述基本段代码、扩展段代码、标志区、扩展段备份和标志区备份分别当作一个文件来进行管理,分别设置不同的文件标识。
本发明中提供的方法中,存储代码的Nand Flash中的块中包括有信息标识,该信息标识可以保存在Nand Flash的块的OOB数据区中。具体的,一个块内的信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在所述总存储块中的相对偏移。信息标识中的内容可以如表2所示,
表2  信息标识中的内容
 
ObjectId 文件标识,用来唯一标识一段代码所属的文件
Blocknum 代码所属文件占用的总存储块数
Offset 当前块在总存储块数中的偏移量
CRC 以上字段的CRC校验和
其中,ObjectId为文件标识,用于唯一标识一段代码所属的文件。可以为基本段、扩展段、扩展段备份、标志区、标志区备份分别分配一个文件标识,通过该文件标识,可以确定当前块内存储的代码所属的文件。
Blocknum为代码所属文件占用的总存储块数,每个文件根据长度不同,可能占用一个或多个存储块。
Offset为当前块在总存储块数中的偏移量,当一个文件占用多个存储块时,可以通过Offset确定当前块在各个存储块数中的顺序和位置。
CRC为可选内容,用于存储以上字段的CRC校验和。
下面以扩展段代码为例说明如何构建OBB数据区的信息标识。譬如:对于一段扩展段代码,扩展段对应的文件标识为2,即ObjectId=2;其总共占用3个存储块,即Blocknum=3;其占用的Block为block5、block8和block10,其中block8中存储的为扩展段代码中的第一段,block10中存储到代码为扩展段代码中的第二段,block5中存储的为扩展段代码中的第三段。则对于block5,其信息标识中ObjectId=2,Blocknum=3,offset=2;对于block8,其信息标识中ObjectId=2,Blocknum=3,offset=0;对于block10,其信息标识中ObjectId=2,Blocknum=3,offset=1。
步骤S102、根据Nand Flash中每个块的信息标识,从Nand Flash的块中读取各文件的代码,组成启动代码。
具体的,仍以上述扩展段代码为例,则通过获取各块的OOB数据区中的信息标识,可以获知block 8,block 10和block 5中存储的代码构成了扩展段代码,从而通过依次组合block 8,block 10和block 5中存储的代码得到扩展段代码。对于基本段、扩展段备份、标志区以及标志区备份对应的代码,也可以以相似的方式根据各块的OOB数据区中的信息标识获得。当获得各个文件(基本段、扩展段、扩展段备份、标志区以及标志区备份)的代码后,即可组成BootRom启动代码。
本发明的一应用场景中,本发明提供的启动代码的可靠性读取方法如图2所示,包括:
步骤S201,当根据信息标识确定Nand Flash的存储块中存在待读取的启动代码时,根据存储块的信息标识确定存储块中代码所属文件占用的存储块数和每个存储块中的代码在文件中的偏移量。如果Nand Flash中不存在待读取的启动代码,则结束本次读操作。
具体地,根据预设的文件标识在Nand Flash的存储块中进行查找,如果查找到具有上述文件标识的存储块,则可以确定Nand Flash的存储块中存在待读取的启动代码,进而可以根据信息标识确定文件占用的存储块数和每个存储块中的代码在文件所占有的各存储块中的偏移。如果在Nand Flash的存储块中没有查找到上述文件标识,则可以确定该Nand Flash中不存在待读取的启动代码。
步骤S202,读取上述待读取的启动代码所在的第一个存储块。
步骤S203,判断读取上述待读取的启动代码所在的第一个存储块的操作是否成功。如果成功,则执行步骤S204;如果失败,则本次读操作失败,结束本次读操作。
步骤S204,将成功读取的存储块的数目加1。
步骤S205,判断成功读取的存储块的数目是否小于待读取的启动代码占用的总存储块数。如果小于,则执行步骤S206和步骤S207;如果成功读取的存储块数目不小于待读取的启动代码占用的总存储块数,则本次读操作成功,结束本次读操作。
步骤S206,读取上述待读取的启动代码占用的下一个存储块。
步骤S207,判断读取下一个存储块的操作是否成功。如果成功,则执行步骤S204~步骤S206;如果读取下一个存储块的操作失败,则本次读操作失败,结束本次读操作。
通过上述图2所示的步骤,可以将组成启动代码的各个文件逐个进行读取,组合得到启动代码。
本发明提供的上述启动代码的可靠性读取方法中,为Nand Flash中每个块内存储的BootRom启动代码分别设置信息标识,根据信息标识读取NandFlash块内保存的启动代码,从而实现了根据每段代码的信息标识对BootRom启动代码进行管理,使得BootRom启动代码的读取与Nand Flash中的绝对块位置无关,不受Nand Flash的坏块率和坏块分布的影响。
另外,本发明还提供一种启动代码的可靠性写入方法,如图3所示,包括:
步骤S301、将启动代码划分为多个文件并为启动代码中的文件分配NandFlash中空闲的好块;
步骤S302、将启动代码中的文件写入所述分配到的好块,并在好块中添加信息标识,所述信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在总存储块中的相对偏移。
具体的,考虑到Nand Flash中可能存在坏块且不同Nand Flash中的坏块分布不同,本发明中在向Nand Flash的好块中写入启动代码时,同时在块内记录信息标识。信息标识的内容可以参考上述表2中的内容以及相关描述,在此不进行重复说明。信息标识的存放位置可以位于Nand Flash的块内页的OOB数据区中。即在Nand Flash的块内页的主存储区(参见表1)中存储BootRom启动代码,在Nand Flash的块内页的OOB数据区中存储主存储区中代码的信息标识。
本发明的一应用场景中,本发明提供的启动代码的可靠性写入方法的流程如图4所示,包括:
步骤S401,计算启动代码中待写入文件需占用Nand Flash的总存储块数。
具体的,BootRom启动代码除了包括基本段代码和扩展段代码外,还可能包标志区。另外,为安全起见,还可能包括扩展段备份和标志区备份。本发明提供的方法中,将上述基本段代码、扩展段代码、标志区、扩展段备份和标志区备份分别当作一个文件来进行管理,分别设置不同的文件标识。
步骤S402,根据待写入代码的信息标识判断Nand Flash中是否存在存储有与待写入代码所属文件具有相同文件标识的代码的块。如果存在,则执行步骤S403;如果不存在,则执行步骤S404。
由于待写入代码具有信息标识,信息标识包括该待写入代码的文件标识,因此可以根据待写入代码的文件标识在Nand Flash中查找存储有与待写入代码属于同一文件的代码的块。另外,为保证各待写入代码文件顺利读取,在本发明中,同一个块内只可以存储属于同一文件的代码,也即同一个块内的代码都属于同一个文件,具有相同的文件标识。
步骤S403,删除存储有与待写入代码具有相同文件标识的代码的块中的内容。如果删除成功,执行步骤S404;如果删除失败,则本次写操作失败,结束本次写操作。
步骤S404,在Nand Flash中为待写入代码分配空闲的块。如果分配成功,则执行步骤S405;如果分配失败,则本次写操作失败,结束本次写操作。
其中,在进行基本段对应文件中代码的写操作时,为基本段对应文件分配的空闲块必须在Nand Flash的头部,占用第一个块。基于Nand Flash本身的特性,可以保证第一个块一定是好块。
步骤S405,将待写入代码和待写入代码的信息标识写入分配的空闲的存储块。具体的,在Nand Flash的块内页的主存储区(参见表1)中存储BootRom启动代码,在Nand Flash的块内页的OOB数据区中存储主存储区中代码的信息标识。
步骤S406,判断写操作是否成功。如果成功,则执行步骤S407;如果写操作失败(当空闲的存储块为坏块时,将导致写操作失败),则返回步骤S404,在Nand Flash中再次分配空闲的存储块,将待写入代码和待写入代码的信息标识写入再次分配的空闲的存储块。
步骤S407,将成功写入的存储块数目加1。
步骤S408,判断成功写入的存储块数目是否小于待写入代码所属文件占用的总存储块数。如果小于,则返回步骤S404;如果不小于,则确定本次写操作成功,结束本次写操作。
通过上述图4提供的方法,可以将组成启动代码的各个文件逐个写入到Nand Flash的空闲块好中。使得组成启动代码的各个文件分别存储到不同的存储块中。
使用本发明提供的上述方法对Nand Flash进行写入操作时,不必考虑坏块的位置和坏块的分布,直接以页为单位进行加载,在Nand Flash的块内页的主存储区(参见表1)中存储BootRom启动代码,在Nand Flash的块内页的OOB数据区中存储主存储区中代码的信息标识。在遇到坏块时直接跳过并重新分配空闲块,往Nand Flash的下一个好块上写入即可。从而解决了由于Nand Flash的坏块分布不同造成BootRom启动代码存在的绝对存储块位置不同,导致BootRom启动代码无法启动的问题。
本发明提供的上述启动代码的可靠性写入方法中,在向Nand Flash中的块内写入BootRom启动代码时,为块内存储的BootRom启动代码分别设置信息标识,从而实现了根据块的信息标识对BootRom启动代码进行管理。在之后的读取过程中,可以根据该信息标识读取Nand Flash块内保存的启动代码,使得BootRom启动代码的读写位置与Nand Flash中的绝对块位置无关,不受Nand Flash的坏块率和坏块分布的影响。
如图5所示,为本发明提供的一种启动代码的读取装置的结构示意图,包括Nand Flash41,还包括:
信息标识获取单元42,与Nand Flash 41连接,用于获取Nand Flash 41中每个块的信息标识,该信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在总存储块中的相对偏移。该信息标识的内容可以参考上述表2中的内容以及相关描述,在此不进行重复说明。信息标识的存放位置可以位于Nand Flash的块内页的OOB数据区中。
启动代码获取单元43,与Nand Flash 41和信息标识获取单元42连接,用于根据信息标识获取单元42获取的Nand Flash 41中每个块的信息标识,从Nand Flash 41的块中读取各文件的代码,组成启动代码。
本发明的一个具体实现中,该启动代码获取单元43可以进一步包括:
块获取子单元431,用于根据信息标识获取单元42获取的每个块的信息标识,获取具有相同文件标识的块;
文件获取子单元432,用于将块获取子单元431获取的具有相同文件标识的块中的代码,根据所述每个块在总存储块中的相对偏移进行依次读取,得到该文件标识对应的文件;
启动代码获取子单元433,用于在文件获取子单元432将具有不同文件标识的各文件读取完成后,将所述各文件的代码组成启动代码。
上述描述中涉及的文件至少包括基本段和扩展段,还可以包括扩展段备份、标志区、标志区备份中的一种或多种,其中不同的文件具有不同的文件标识。
本发明提供的上述启动代码的读取装置中,为Nand Flash中每个块内存储的BootRom启动代码分别设置信息标识,根据信息标识读取Nand Flash块内保存的启动代码,从而实现了根据每段代码的信息标识对BootRom启动代码进行管理,使得BootRom启动代码的读取与Nand Flash中的绝对块位置无关,不受Nand Flash的坏块率和坏块分布的影响。
如图6所示,为本发明提供的一种启动代码的写入装置的结构示意图,包括Nand Flash 51,还包括:
块分配单元52,与Nand Flash 51连接,用于将启动代码划分为多个文件并为启动代码中的文件分配Nand Flash 51中空闲的好块;
启动代码写入单元53,与Nand Flash 51和块分配单元52连接,用于将启动代码中的文件写入Nand Flash 51中块分配单元52分配到的好块,并在写入的好块中添加信息标识,该信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在总存储块中的相对偏移。具体的,可以在Nand Flash的块内页的主存储区(参见表1)中存储BootRom启动代码,在Nand Flash的块内页的OOB数据区中存储主存储区中代码的信息标识。
本发明的一个具体实现中,该启动代码写入单元53包括:
判断子单元531,用于根据待写入代码的信息标识判断Nand Flash 51中是否存在存储有与待写入代码具有相同文件标识的代码的块;存在时通知删除子单元532,不存在时通知写入子单元533;
删除子单元532,与判断子单元531连接,用于根据判断子单元531的通知,判断需要对之前存储的文件进行修改和更新,则删除Nand Flash 51中存储有与待写入代码具有相同文件标识的代码的块中的内容,并通知写入子单元533;
写入子单元533,与判断子单元531和删除子单元532连接,用于根据判断子单元531或删除子单元532的通知,将待写入代码写入获取到的NandFlash51中的好块,并在所述好块中添加信息标识。
上述描述中涉及的文件至少包括基本段和扩展段,还可以包括扩展段备份、标志区、标志区备份中的一种或多种,其中不同的文件具有不同的文件标识。具体的,可以在Nand Flash的块内页的主存储区(参见表1)中存储BootRom启动代码,在Nand Flash的块内页的OOB数据区中存储主存储区中代码的信息标识。
本发明提供的上述启动代码的写入装置中,在向Nand Flash中的块内写入BootRom启动代码时,为块内存储的BootRom启动代码分别设置信息标识,从而实现了根据块的信息标识对BootRom启动代码进行管理。在之后的读取过程中,可以根据该信息标识读取Nand Flash块内保存的启动代码,使得BootRom启动代码的读写位置与Nand Flash中的绝对块位置无关,不受NandFlash的坏块率和坏块分布的影响。
上述模块可以分布于一个装置,也可以分布于多个装置。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
本发明提供的启动代码的读、写操作方法和应用该方法的装置,使得BootRom启动代码中每段代码的读、写不依赖于每段代码所在的存储块,解决了不同设备的坏块率和坏块分布不同对启动的影响。并且在加载启动代码所形成的文件时,仅需把OOB数据区中保存的信息标识连同一起加载,在加载时只需跳过Nand Flash中的坏块,无需考虑坏块的分布。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。

Claims (16)

1、一种启动代码的可靠性读取方法,其特征在于,包括:
步骤1,获取与非闪存器Nand Flash中每个块的信息标识,所述信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在所述总存储块中的相对偏移;
步骤2,根据所述Nand Flash中每个块的信息标识,从所述Nand Flash的块中读取各文件的代码,组成启动代码。
2、如权利要求1所述的方法,其特征在于,所述步骤2具体包括:
根据所述每个块的信息标识,获取具有相同文件标识的块;
将所述具有相同文件标识的块中的代码,根据所述每个块在所述总存储块中的相对偏移进行依次读取,得到所述文件标识对应的文件;
将具有不同文件标识的各文件读取完成后,将所述各文件的代码组成启动代码。
3、如权利要求1或2所述的方法,其特征在于,所述文件至少包括基本段和/或扩展段代码,还可以包括扩展段代码备份、标志区、标志区备份中的一种或多种,所述不同的文件具有不同的文件标识。
4、如权利要求3所述的方法,其特征在于,所述Nand Flash中任一块内的代码具有相同的文件标识,具有不同文件标识的代码存储在不同块中。
5、一种启动代码的可靠性写入方法,其特征在于,包括:
步骤1,将启动代码划分为多个文件并为启动代码中的文件分配NandFlash中空闲的好块;
步骤2,将所述启动代码中的文件写入所述分配到的好块,并在所述好块中添加信息标识,所述信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在所述总存储块中的相对偏移。
6、如权利要求5所述的方法,其特征在于,所述步骤2具体包括:
根据待写入代码的信息标识判断所述Nand Flash中是否存在存储有与所述待写入代码具有相同文件标识的代码的块;
存在时,删除所述存储有与所述待写入代码具有相同文件标识的代码的块中的内容,并将待写入代码写入所述获取到的好块,并在所述好块中添加信息标识;
不存在时,将待写入代码写入所述获取到的好块,并在所述好块中添加信息标识。
7、如权利要求5或6所述的方法,其特征在于,所述文件至少包括基本段和/或扩展段代码,还可以包括扩展段代码备份、标志区、标志区备份中的一种或多种,所述不同的文件具有不同的文件标识。
8、如权利要求7所述的方法,其特征在于,所述Nand Flash中任一块内的代码具有相同的文件标识,具有不同文件标识的代码存储在不同块中。
9、一种启动代码的读取装置,其特征在于,包括:
信息标识获取单元,用于获取与非闪存器Nand Flash中每个块的信息标识,所述信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在所述总存储块中的相对偏移;
启动代码获取单元,与所述信息标识获取单元连接,用于根据所述信息标识获取单元获取的Nand Flash中每个块的信息标识,从所述Nand Flash的块中读取各文件的代码,组成启动代码。
10、如权利要求9所述的装置,其特征在于,所述启动代码获取单元包括:
块获取子单元,用于根据所述每个块的信息标识,获取具有相同文件标识的块;
文件获取子单元,与所述块获取子单元连接,用于将所述块获取子单元获取的具有相同文件标识的块中的代码,根据所述每个块在所述总存储块中的相对偏移进行依次读取,得到所述文件标识对应的文件;
启动代码获取子单元,与所述文件获取子单元连接,用于在所述文件获取子单元将具有不同文件标识的各文件读取完成后,将所述各文件的代码组成启动代码。
11、如权利要求9或10所述的装置,其特征在于,所述文件至少包括基本段和/或扩展段代码,还可以包括扩展段代码备份、标志区、标志区备份中的一种或多种,所述不同的文件具有不同的文件标识。
12、如权利要求11所述的装置,其特征在于,所述Nand Flash中任一块内的代码具有相同的文件标识,具有不同文件标识的代码存储在不同块中。
13、一种启动代码的写入装置,其特征在于,包括:
块分配单元,用于将启动代码划分为多个文件并为启动代码中的文件分配Nand Flash中空闲的好块;
启动代码写入单元,与所述块分配单元连接,用于将启动代码中的文件写入所述块分配单元分配的好块,并在所述好块中添加信息标识,所述信息标识包括当前块内代码所属文件的文件标识、当前块内代码所属文件占用的总存储块数量以及当前块在所述总存储块中的相对偏移。
14、如权利要求13所述的装置,其特征在于,所述启动代码写入单元包括:
判断子单元,用于根据待写入代码的信息标识判断所述Nand Flash中是否存在存储有与所述待写入代码具有相同文件标识的代码的块;存在时通知删除子单元,不存在时通知写入子单元;
删除子单元,与所述判断子单元连接,用于根据所述判断子单元的通知,删除所述存储有与所述待写入代码具有相同文件标识的代码的块中的内容,并通知写入子单元;
写入子单元,与所述判断子单元和删除子单元连接,用于根据所述判断子单元或删除子单元的通知,将待写入代码写入所述获取到的好块,并在所述好块中添加信息标识。
15、如权利要求13或14所述的装置,其特征在于,所述文件至少包括基本段和/或扩展段代码,还可以包括扩展段代码备份、标志区、标志区备份中的一种或多种,所述不同的文件具有不同的文件标识。
16、如权利要求15所述的装置,其特征在于,所述Nand Flash中任一块内的代码具有相同的文件标识,具有不同文件标识的代码存储在不同块中。
CNA2009100086321A 2009-02-06 2009-02-06 一种启动代码的可靠性读取方法、写入方法和装置 Pending CN101477469A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNA2009100086321A CN101477469A (zh) 2009-02-06 2009-02-06 一种启动代码的可靠性读取方法、写入方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNA2009100086321A CN101477469A (zh) 2009-02-06 2009-02-06 一种启动代码的可靠性读取方法、写入方法和装置

Publications (1)

Publication Number Publication Date
CN101477469A true CN101477469A (zh) 2009-07-08

Family

ID=40838191

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2009100086321A Pending CN101477469A (zh) 2009-02-06 2009-02-06 一种启动代码的可靠性读取方法、写入方法和装置

Country Status (1)

Country Link
CN (1) CN101477469A (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101902556A (zh) * 2010-08-03 2010-12-01 福建新大陆通信科技股份有限公司 一种数字电视机顶盒的数据块分区定位方法
CN102073561A (zh) * 2011-01-26 2011-05-25 浪潮电子信息产业股份有限公司 一种固态硬盘写操作纠错的方法
CN102098561A (zh) * 2010-12-14 2011-06-15 福建新大陆通信科技股份有限公司 一种机顶盒flash存储器各区域块分布配置的方法
CN102541969A (zh) * 2011-03-29 2012-07-04 深圳市江波龙电子有限公司 基于fat文件系统的文件保护方法、系统及存储器
CN103324493A (zh) * 2012-03-20 2013-09-25 安凯(广州)微电子技术有限公司 基于nand flash的系统开机提速方法及系统
CN109254799A (zh) * 2018-08-29 2019-01-22 新华三技术有限公司 引导程序的启动方法、装置及通信设备
CN109408145A (zh) * 2018-10-18 2019-03-01 郑州云海信息技术有限公司 一种处理器启动方法、装置、系统和计算机可读存储介质
CN110109708A (zh) * 2019-04-25 2019-08-09 深圳忆联信息系统有限公司 一种控制器NandBoot机制的方法及其系统
CN110825714A (zh) * 2019-11-08 2020-02-21 珠海奔图电子有限公司 文件存储控制方法及其装置、文件存储装置、电子装置
CN111061514A (zh) * 2019-10-30 2020-04-24 翱捷智能科技(上海)有限公司 Flash器件、集成电路及Flash器件启动方法
CN113900680A (zh) * 2020-07-06 2022-01-07 中国移动通信集团重庆有限公司 代码管理方法、装置及计算设备

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101902556A (zh) * 2010-08-03 2010-12-01 福建新大陆通信科技股份有限公司 一种数字电视机顶盒的数据块分区定位方法
CN102098561A (zh) * 2010-12-14 2011-06-15 福建新大陆通信科技股份有限公司 一种机顶盒flash存储器各区域块分布配置的方法
CN102073561A (zh) * 2011-01-26 2011-05-25 浪潮电子信息产业股份有限公司 一种固态硬盘写操作纠错的方法
CN102541969B (zh) * 2011-03-29 2015-04-29 深圳市江波龙电子有限公司 基于fat文件系统的文件保护方法、系统及存储器
CN102541969A (zh) * 2011-03-29 2012-07-04 深圳市江波龙电子有限公司 基于fat文件系统的文件保护方法、系统及存储器
CN103324493B (zh) * 2012-03-20 2016-10-05 安凯(广州)微电子技术有限公司 基于nand flash的系统开机提速方法及系统
CN103324493A (zh) * 2012-03-20 2013-09-25 安凯(广州)微电子技术有限公司 基于nand flash的系统开机提速方法及系统
CN109254799A (zh) * 2018-08-29 2019-01-22 新华三技术有限公司 引导程序的启动方法、装置及通信设备
CN109408145A (zh) * 2018-10-18 2019-03-01 郑州云海信息技术有限公司 一种处理器启动方法、装置、系统和计算机可读存储介质
CN109408145B (zh) * 2018-10-18 2022-02-18 郑州云海信息技术有限公司 一种处理器启动方法、装置、系统和计算机可读存储介质
CN110109708A (zh) * 2019-04-25 2019-08-09 深圳忆联信息系统有限公司 一种控制器NandBoot机制的方法及其系统
CN111061514A (zh) * 2019-10-30 2020-04-24 翱捷智能科技(上海)有限公司 Flash器件、集成电路及Flash器件启动方法
CN110825714A (zh) * 2019-11-08 2020-02-21 珠海奔图电子有限公司 文件存储控制方法及其装置、文件存储装置、电子装置
CN113900680A (zh) * 2020-07-06 2022-01-07 中国移动通信集团重庆有限公司 代码管理方法、装置及计算设备

Similar Documents

Publication Publication Date Title
CN101477469A (zh) 一种启动代码的可靠性读取方法、写入方法和装置
US6459644B2 (en) Semiconductor memory device with block alignment function
CN101627373B (zh) 通过预擦除机制的存储器设备性能增强
CN116088760A (zh) 存储器系统及控制方法
CN108710578B (zh) 基于闪存的数据存储方法和装置
EP1771862B1 (en) Method and device to improve usb flash write performance
CN104008061A (zh) 内存回收方法及装置
CN106844583B (zh) 一种在NOR Flash上建立FAT文件系统的优化方法
CN106557427B (zh) 共享内存数据库的内存管理方法及装置
CN101430700B (zh) 文件系统管理装置和方法以及存储装置
CN101582089B (zh) 一种嵌入式设备的文件管理方法及系统
US6675278B1 (en) Method and apparatus for managing memory
CN101510332B (zh) 一种智能卡中存储空间的管理方法和装置
US20070260837A1 (en) Method of dynamic memory management for a portable data storage device
CN102037456A (zh) 由主机进行的存储卡的标识
JP2010515128A (ja) 不揮発性メモリにおけるデータを管理する方法
CN108170456B (zh) 电子设备的固件升级方法及装置
US20110004719A1 (en) Memory Element
CN112965661A (zh) 数据存储方法、装置、设备及存储介质
CN104182352A (zh) 用于访问4gb以上物理内存地址空间的方法及装置
CN107422987B (zh) 一种在非易失性存储器中存储数据的方法及装置
CN103377132A (zh) 管理存储器空间的方法、存储器控制器与存储器储存装置
CN114911716A (zh) 一种动态的、离散的、碎片化的嵌入式系统nand flash使用方法
CN115543859A (zh) 多分区ssd的磨损均衡优化方法、装置、设备及介质
KR101376268B1 (ko) 단말기의 메모리 할당 장치 및 방법

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20090708