一种boot程序的启动方法和相关装置制造方法

文档序号:6511068阅读:252来源:国知局
一种boot程序的启动方法和相关装置制造方法
【专利摘要】本发明实施例公开了一种boot程序的启动方法和相关装置,当检测到该boot启动请求时,首先判断在Nand?flash中当前操作的第一物理块是否为坏块,当第一物理块不是坏块时再读取该第一物理块中存储的第一boot数据,接下来判断读取到的第一boot数据是否有数据错误,当读取到的第一boot数据有数据错误时,从第一备份块中重新读取第一boot数据,再判断从第一备份块中重新读取到的第一boot数据是否有数据错误,当从第一备份块中重新读取到的第一boot数据没有数据错误之后,按照对第一boot数据相同的处理方式继续处理启动boot程序需要读取的其它boot数据,直到完成boot程序启动。
【专利说明】一种boot程序的启动方法和相关装直
【技术领域】
[0001]本发明涉及计算机【技术领域】,尤其涉及一种boot程序的启动方法和相关装置。
【背景技术】
[0002]Nand flash (与非闪存)是一种flash内存,Nand flash存储器因具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3 (Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)随身听记忆卡、体积小巧的U盘等。
[0003]目前在boot(系统引导)程序启动中经常会选用Nand flash,通常只需要一片Nandflash就可以启动boot程序,由于Nand flash具有容量大的特点,既可以用于启动程序又可以用于存储数据,可以减低产品的成本。
[0004]现有技术中使用Nand flash启动boot程序的方法,主要包括如下步骤:
[0005]首先读取boot数据,然后使用ECC (Error Checking and Correcting,差错校验纠正)算法判断boot数据是否存在错误,若boot数据存在错误,则直接反馈boot启动失败,若所有boot数据经过EEC算法判断都没有错误,才能成功启动boot。
[0006]但是本发明的发明人在实现本发明的过程中发现,现有的所有flash器件都会受到位交换现象的困扰,对于Nand flash也不例外,即在Nand flash中同样存在位交换的问题,例如在使用NAND flash的过程中存储单元的某个比特位可能会发生翻转或被报告翻转从而使存储的数据改变了,若改变的数据超过了 EEC算法的纠错能力,这就会导致boot程序启动失败。
[0007]另外,在Nand flash器件出厂时就存在随机分布的坏块问题,坏块是不能使用的物理块,在使用Nand flash的过程中同样也可能随机的出现坏块问题,而因Nand flash随机出现坏块也能够导致数据错误,造成boot程序启动失败。

【发明内容】

[0008]本发明实施例提供了一种boot程序的启动方法和相关装置,用于提高boot程序从Nash flash启动成功的概率。
[0009]为解决上述技术问题,本发明实施例提供以下技术方案:
[0010]第一方面,本发明实施例提供了一种boot程序的启动方法,包括:
[0011]当检测到boot启动请求时,判断在与非闪存Nand flash中操作的第一物理块是否为坏块;
[0012]若所述第一物理块不是坏块,读取所述第一物理块中存储的第一 boot数据;
[0013]判断读取到的第一 boot数据是否有数据错误;
[0014]若读取到的第一 boot数据有数据错误,从所述第一物理块对应的第一备份块中重新读取第一 boot数据,其中,所述第一备份块为对所述第一物理块中的数据进行备份的一个物理块;[0015]判断从所述第一备份块中重新读取到的第一 boot数据是否有数据错误,若从所述第一备份块中重新读取到的第一 boot数据没有数据错误,则按照前述对第一 boot数据相同的处理方式继续处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
[0016]结合第一方面,在第一方面的第一种可能的实现方式中,所述判断在与非闪存Nand flash中操作的第一物理块是否为坏块,包括:
[0017]读取所述第一物理块的坏块标记BB信息;
[0018]根据所述BB信息判断所述第一物理块是否为坏块。
[0019]结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述判断在与非闪存Nand flash中操作的第一物理块是否为坏块之后还包括:
[0020]若所述第一物理块是坏块,判断在所述Nand flash中操作的第二物理块是否为坏块;
[0021]若所述第二物理块是坏块,继续判断在所述Nand flash中操作的第三物理块是否为坏块,若在Nand flash中判定有N个连续的物理块都为坏块,反馈boot程序启动失败,其中,所述N为预置的boot启动门限,所述N为非零自然数。
[0022]结合第一方面或第一方面的第一种或第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述判断读取到的第一 boot数据是否有数据错误,包括:
[0023]使用差错校验纠正EEC算法对所述读取到的第一 boot数据进行纠错校验,若使用EEC算法对读取到的第一 boot数据校验失败,则判定读取到的第一 boot数据有数据错误。
[0024]结合第一方面或第一方面的第一种或第二种或第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述从所述第一物理块对应的第一备份块中重新读取第一boot数据包括:
[0025]使用所述Nand flash内置的指针定位到所述第一物理块中有数据错误的第一boot数据的地址;
[0026]将所述Nand flash内置的指针跳到所述第一备份块中与定位到的地址相同的地址;
[0027]从所述第一备份块中与定位到的地址相同的地址开始,重新读取第一 boot数据。
[0028]结合第一方面或第一方面的第一种或第二种或第三种可能的实现方式,在第一方面的第五种可能的实现方式中,所述从所述第一物理块对应的第一备份块中重新读取第一boot数据包括:
[0029]获取所述第一物理块中有数据错误的第一 boot数据所在的页page的身份识别码ID ;
[0030]从所述第一备份块中查找与有数据错误的第一 boot数据所在的页的ID相同的页;
[0031]根据在所述第一备份块中查找到的页重新读取第一 boot数据。
[0032]结合第一方面或第一方面的第一种或第二种或第三种或第四种或第五种可能的实现方式,在第一方面的第六种可能的实现方式中,所述判断从所述第一备份块中重新读取到的第一 boot数据是否有数据错误之后还包括:[0033]若从所述第一备份块中重新读取到的第一 boot数据有数据错误,从所述第一物理块对应的第二备份块中再次读取所述第一 boot数据,所述第二备份块为对第一物理块中的数据进行备份的另一个物理块;
[0034]然后判断从所述第二备份块中再次读取到的第一 boot数据是否有数据错误,若从所述第二备份块中再次读取到的第一 boot数据没有数据错误,则触发执行按照前述对第一 boot数据相同的处理方式继续处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
[0035]结合第一方面或第一方面的第一种或第二种或第三种或第四种或第五种或第六种可能的实现方式,在第一方面的第七种可能的实现方式中,所述继续处理启动boot程序需要读取的其它boot数据,包括:
[0036]在所述第一备份块中继续处理除所述第一 boot数据之外的其它boot数据;
[0037]或,跳回到所述第一物理块,继续处理所述第一 boot数据之外的其它boot数据。
[0038]第二方面,本发明实施例提供了一种boot程序的启动装置,包括:
[0039]坏块判断模块,用于当检测到boot启动请求时,判断在与非闪存Nand flash中操作的第一物理块是否为坏块;
[0040]数据读取模块,用于当所述第一物理块不是坏块时,读取所述第一物理块中存储的第一 boot数据;
[0041]错误判断模块,用于判断读取到的第一 boot数据是否有数据错误;
[0042]所述数据读取模块,还用于当读取到的第一 boot数据有数据错误时,从所述第一物理块对应的第一备份块中重新读取第一 boot数据,其中,所述第一备份块为对所述第一物理块中的数据进行备份的一个物理块;
[0043]所述错误判断模块,还用于判断从所述第一备份块中重新读取到的第一 boot数据是否有数据错误;当从所述第一备份块中重新读取到的第一 boot数据没有数据错误时,则按照前述对第一 boot数据相同的处理方式,继续触发所述数据读取模块和所述错误判断模块,处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
[0044]结合第二方面,在第二方面的第一种可能的实现方式中,所述坏块判断模块,具体用于读取所述第一物理块的坏块标记BB信息;根据所述BB信息判断所述第一物理块是否为坏块。
[0045]结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述boot程序的启动装置,还包括:反馈模块,其中,
[0046]所述坏块判断模块,还用于当所述第一物理块是坏块时,判断在所述Nand flash中操作的第二物理块是否为坏块;
[0047]所述坏块判断模块,还用于当所述第二物理块是坏块时,继续判断在所述Nandflash中操作的第三物理块是否为坏块;
[0048]所述反馈模块,用于当在Nand flash中判定有N个连续的物理块都为坏块时,反馈boot程序启动失败,其中,所述N为预置的boot启动门限,所述N为非零自然数。
[0049]结合第二方面或第二方面的第一种或第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述错误判断模块,具体用于使用差错校验纠正EEC算法对所述读取到的第一 boot数据进行纠错校验,若使用EEC算法对读取到的第一 boot数据校验失败,则判定读取到的第一 boot数据有数据错误。
[0050]结合第二方面或第二方面的第一种或第二种或第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述数据读取模块,包括:
[0051]指针定位子模块,用于使用所述Nand flash内置的指针定位到所述第一物理块中有数据错误的第一 boot数据的地址;
[0052]指针指向子模块,用于将所述Nand flash内置的指针跳到所述第一备份块中与定位到的地址相同的地址;
[0053]第一数据读取子模块,用于从所述第一备份块中与定位到的地址相同的地址开始,重新读取第一 boot数据。
[0054]结合第二方面或第二方面的第一种或第二种或第三种可能的实现方式,在第二方面的第五种可能的实现方式中,所述数据读取模块,包括:
[0055]页获取子模块,用于获取所述第一物理块中有数据错误的第一 boot数据所在的页page的身份识别码ID ;
[0056]查找子模块,用于从所述第一备份块中查找与有数据错误的第一 boot数据所在的页的ID相同的页;
[0057]第二数据读取子模块,用于根据在所述第一备份块中查找到的页重新读取第一boot数据。
[0058]结合第二方面或第二方面的第一种或第二种或第三种或第四种或第五种可能的实现方式,在第二方面的第六种可能的实现方式中,所述数据读取模块,还用于所述错误判断模块判断从所述第一备份块中重新读取到的第一 boot数据有数据错误时,从所述第一物理块对应的第二备份块中再次读取所述第一 boot数据,所述第二备份块为对第一物理块中的数据进行备份的另一个物理块;
[0059]所述错误判断模块,还用于判断从所述第二备份块中再次读取到的第一 boot数据是否有数据错误;当从所述第二备份块中再次读取到的第一 boot数据没有数据错误时,则触发执行所述数据读取模块和所述错误判断模块,处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
[0060]结合第二方面或第二方面的第一种或第二种或第三种或第四种或第五种或第六种可能的实现方式,在第二方面的第七种可能的实现方式中,所述数据读取模块,还用于在所述第一备份块中继续读取除所述第一boot数据之外的其它boot数据;或,跳回到所述第一物理块,继续读取所述第一 boot数据之外的其它boot数据;
[0061]所述错误判断模块,还用于在所述第一备份块中继续判断除所述第一 boot数据之外的其它boot数据是否有数据错误;或,跳回到所述第一物理块,继续判断所述第一boot数据之外的其它boot数据是否有数据错误。
[0062]从以上技术方案可以看出,本发明实施例具有以下优点:
[0063]在本发明实施例中,用户在发起boot启动请求后,当检测到该boot启动请求时,首先判断在Nand flash中当前操作的第一物理块是否为坏块,当第一物理块不是坏块时再读取该第一物理块中存储的第一 boot数据,接下来判断读取到的第一 boot数据是否有数据错误,当读取到的第一 boot数据有数据错误时,从第一备份块中重新读取第一 boot数据,再判断从第一备份块中重新读取到的第一 boot数据是否有数据错误,当从第一备份块中重新读取到的第一 boot数据没有数据错误之后,按照对第一 boot数据相同的处理方式继续处理启动boot程序需要读取的其它boot数据,直到完成boot程序启动。由于对Nandflash中当前操作的第一物理块进行了坏块判断,故可以避免因为Nand flash在出厂时或使用过程中出现的坏块问题而导致的boot程序启动失败问题,而且可以在读取到的第一 boot数据存在数据错误时从第一物理块对应的第一备份块中重新读取到第一 boot数据,这样就可以在发现数据错误时就行补救,重新读取的第一 boot数据仍然可以用于启动boot程序,这相比于现有技术在出现数据错误时直接反馈boot失败相比,能够提高boot程序成功启动的概率。
【专利附图】

【附图说明】
[0064]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的技术人员来讲,还可以根据这些附图获得其他的附图。
[0065]图1为本发明实施例提供的一种boot程序的启动方法的流程方框示意图;
[0066]图2为本发明实施例提供的在boot程序的启动过程中跳过坏块的实现方式流程图;
[0067]图3为本发明实施例提供的在boot程序的启动过程中使用备份块启动boot程序的实现方式流程图;
[0068]图4_a为本发明实施例提供的一种boot程序的启动装置的组成结构示意图;
[0069]图4_b为本发明实施例提供的另一种boot程序的启动装置的组成结构示意图;
[0070]图4-c为本发明实施例提供的一种数据获取模块的组成结构示意图;
[0071]图4-d为本发明实施例提供的另一种数据获取模块的组成结构示意图;
[0072]图5为本发明实施例提供的另一种boot程序的启动装置的组成结构示意图。
【具体实施方式】
[0073]本发明实施例提供了一种boot程序的启动方法和相关装置,用于提高boot程序从Nash flash启动成功的概率。
[0074]为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域的技术人员所获得的所有其他实施例,都属于本发明保护的范围。
[0075]本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本发明的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
[0076]本发明boot程序的启动方法的一个实施例,可应用于从Nand flash可靠的启动boot程序中,可以包括:当检测到boot启动请求时,判断在Nand flash (与非闪存)中操作的第一物理块是否为坏块;若上述第一物理块不是坏块,读取上述第一物理块中存储的第一 boot数据;判断读取到的第一 boot数据是否有数据错误;若读取到的第一 boot数据有数据错误,从上述第一物理块对应的第一备份块中重新读取第一 boot数据,其中,上述第一备份块为对上述第一物理块中的数据进行备份的一个物理块;判断从上述第一备份块中重新读取到的第一 boot数据是否有数据错误,若从上述第一备份块中重新读取到的第一boot数据没有数据错误,则按照前述对第一 boot数据相同的处理方式继续处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
[0077]本发明实施例提供的一种boot程序的启动方法,请参阅如图1所示,具体可以包括如下步骤:
[0078]101、当检测到boot启动请求时,判断在Nand flash中操作的第一物理块是否为坏块。
[0079]在本发明实施例中,用户在发起boot启动请求后,检测用户发起的boot启动请求,若成功检测到boot启动请求,首先对在Nand flash中当前操作的物理块进行判断,以在Nand flash中当前操作的物理块为“第一物理块”为例进行详细说明,对第一物理块是否为坏块进行判断,其中,坏块指的是不能正常使用的物理块,坏块不能保证数据的正确性及可靠性,为不能使用的物理存储块。
[0080]需要说明的是,现有技术中在检测到用户的boot启动请求后,直接读取boot数据,当发现boot数据中存在数据错误时直接反馈boot程序启动失败,也就是说现有技术中对boot数据存在数据错误无法进行补救,直接反馈boot程序启动失败会导致boot程序成功的概率较低,另外,Nand flash器件作为存储介质的特性决定不可避免的会存在坏块问题,具体的,通常对于Nand flash器件来说,存在坏块的概率是2%左右,如此大的坏块概率会极大的影响到boot程序成功启动的概率。另外Nand flash器件在多次的使用过程中同样也会随机的出现坏块问题,这种坏块问题也会进一步的加剧boot程序启动失败的概率。[0081 ] 为了能够提高boot程序成功启动的概率,本发明实施例中,在检测到用户的boot启动请求后,并不是直接读取数据,而是先对Nand flash中当前操作的物理块进行坏块判断,只有当前操作的物理块是好块的情况下才触发步骤102执行,这就从根本上可以克服因为坏块导致的boot程序启动失败的问题,本发明实施例中先对Nand flash中当前操作的物理块进行坏块判断,这是有别于现有技术的实现方式,并且这种先判断坏块的方式是在克服了常用的技术手段导致的技术偏见的情况下提出的实现方式,可以从根本上提高boot程序启动成功的概率。
[0082]并且本发明实施例中,只是对Nand flash中当前操作的物理块进行坏块判断,单个物理块的坏块判断并不会影响到boot程序启动的速度,但是可以极大的避免boot程序启动失败。本发明实施例中可以由CPU (Central Processing Unit,中央处理器)发出的指令来决定应该在Nand flash中操作哪个物理块,本发明实施例中为了便于描述将在Nandflash中当前操作的物理块定义为“第一物理块”,当然也可以采用其它的描述方式,例如“特定物理块”或“某一个物理块”等等,此处仅作说明。
[0083]在本发明的一些实施例中,步骤101判断在Nand flash中操作的第一物理块是否为坏块,具体可以包括如下步骤:
[0084]Al、读取上述第一物理块的坏块标记(BB,Bad Block)信息;[0085]A2、根据上述BB信息判断上述第一物理块是否为坏块。
[0086]其中,步骤Al中可以首先获取到物理块的坏块标记信息,当一个物理块成为坏块时,可以在物理块上进行坏块标记,标记为坏块的物理块就是不能正常使用的物理块。步骤A2在获取到第一物理块的BB信息之后,就可以根据该BB信息判断第一物理块是否为坏块,例如对一个物理块(block)的页(page)中空闲(spare)区的第I个字节标志用于表示坏块标记,若坏块标记为FF (11111111)时表不第一物理块是好块,即第一物理块不是坏块,若坏块标记不是FF,则表该第一物理块是坏块。
[0087]需要说明的是,本发明实施例中判断第一物理块是否为坏块的方式并不局限于使用坏块标记的方式,还可以有其它的实现方式,例如:直接使用Nand flash中预先制定的一个block中特定的存储位置来表示,若该存储位置为空则可以表示物理块为好块,当该存储位置有数据存储时表示物理块为坏块。故基于本发明实施例提供的实现方式还可以有其它的判断坏块的方法,此处不做限定。
[0088]需要说明的是,在本发明实施例中,步骤101判断在Nand flash中操作的第一物理块是否为坏块之后,还可以包括如下步骤:
[0089]B1、若上述第一物理块是坏块,判断在上述Nand flash中操作的第二物理块是否为坏块;
[0090]B2、若上述第二物理块是坏块,继续判断在上述Nand flash中操作的第三物理块是否为坏块,若在Nand flash中判定有N个连续的物理块都为坏块,反馈boot程序启动失败,其中,上述N为预置的boot启动门限。
[0091]其中,步骤BI中当第一物理块是坏块时,表示第一物理块已经不能正常使用,故不再从第一物理块中读取boot数据,而是重新选择对在Nand flash中操作的另一个物理块进行坏块判断,为便于描述将在Nand flash中操作的另一个物理块定义为“第二物理块”,其中对第二物理块的坏块判断采用的方式可以参阅前述实施例中对第一物理块的坏块判断方式,此处不再赘述。
[0092]通过步骤BI中对第二物理块是否为坏块进行判断后,若第二物理块不是坏块,则可以读取第二物理块中存储的boot数据,需要说明的是,本发明实施例中步骤102至106中描述的对第一物理块中第一 boot数据的处理方式,通过步骤101中对第一物理块的坏块判断若第一物理块为坏块,且通过步骤BI中对第二物理块的坏块判断若第二物理块为好块,则后续步骤102至106中描述的就应该为对第二物理块的处理,也就是说将对步骤102至步骤106中处理对象从第一物理块替换为第二物理块即可,此处仅作说明。
[0093]对于步骤B2中判断第二物理块为坏块时,再次执行步骤BI,不同的是处理对象对在Nand flash中操作的另一个物理块进行坏块判断,为便于描述将在Nand flash中操作的另一个物理块定义为“第三物理块”,通过这种对Nand flash中的多个物理块的坏块判断,从而判断出Nand flash中不是坏块的物理块,以免在读取物理块中存储的boot数据出现数据错误而导致boot程序启动失败,可以解决因为坏块导致的boot程序启动失败问题,提高boot程序启动的成功率。
[0094]步骤B2中当第三物理块也是坏块时可以继续判断第四物理块是否为坏块,直到从Nand flash中找到不是坏块的物理块为止。需要说明的是,为了提高boot程序的启动效率,可以设定一个boot启动门限,以boot启动门限为N为例,其中N为非零自然数,当在Nand flash中判定有N个连续的物理块都是坏块时,不再进一步的读取Nand flash中的其它物理块,直接反馈boot程序启动失败。
[0095]102、若上述第一物理块不是坏块,读取上述第一物理块中存储的第一 boot数据。
[0096]在本发明实施例中,只有当第一物理块不是坏块时才读取该第一物理块中存储的第一 boot数据,可以理解的是,本发明实施例中对坏块的判断是一个循环的过程,当第一物理块为坏块时需要判断Nand flash中的第二物理块是否坏块,直到从Nand flash中找到不是坏块的物理块为止,步骤102中是对Nand flash中是好块的物理块执行的读取数据,只不过步骤102中是将第一物理块作为处理对象进行描述的,在实际应用中,需要具体根据对Nand flash只物理块的坏块判断结果来决定将哪个物理块作为处理对象,此处仅作说明。
[0097]在本发明的一些实施例中,一个Nand flash通常由很多个块(Block)组成,块的大小一般是128KB或256KB或512KB或IMB等等。每个块里面又包含了很多页(page),其中页的大小具体可以为2KB或4KB或8KB或16KB等等。需要说明的是,在本发明实施例中,Nand flash是以字节(Byte)位作为最小读取的单位,故本发明实施例中读取第一物理块中存储的第一 boot数据可以是几个字节,或者是前半页或者是后半页,还可以是一页等等,具体需要结合应用场景来决定读取第一物理块中存储的第一 boot数据的数据量。
[0098]103、判断读取到的第一 boot数据是否有数据错误。
[0099]在本发明实施例中,从第一物理块读取到第一 boot数据之后,判断从第一物理块读取到的第一 boot数据是否有数据错误,当第一 boot数据有数据错误时,触发步骤104执行,当第一 boot数据没有数据错误时,可以继续读取启动boot程序所需要读取的其它boot数据,例如,启动boot程序需要使用两个物理块分别为blockl和block2,在读取到blockl中的bootl后发现没有数据错误,然后读取blockl中的boot2,再判断boot2是否有数据错误,若有同样执行步骤104,若boot2也没有数据错误,继续读取blockl中的数据,当blockl读完后,继续读取block2中的boot数据,直到boot程序启动完毕。
[0100]在本发明实施例中,常用的Nand flash器件从内部存储单元看,可以分成SLC(Single Level Cell,单 bit 存储单兀)和 MLC(Multi_Level Cell,多 bit 存储单兀)两种,其中SLC的Nand flash具有较高稳定性,但MLC的Nand flash的稳定性较差。对于MLC的Nand flash的一个存储单元中存放2bit,相比于SLC (—个cell中只存Ibit),增多了电平阈值,增大了出现bit翻转的几率。所以在使用MLC的Nand flash时,由于其可靠性较低,在使用时必须提高其稳定性,尽量降低在使用过程中出现数据错误的概率。
[0101]需要说明的是,在本发明的一些实施例中,步骤103判断读取到的第一 boot数据是否有数据错误,具体可以包括:
[0102]使用差错校验纠正(EEC,Error Checking and Correcting)算法对上述读取到的第一 boot数据进行纠错校验,若使用EEC算法对读取到的第一 boot数据校验失败,则判定读取到的第一 boot数据有数据错误。
[0103]104、若读取到的第一 boot数据有数据错误,从上述第一物理块对应的第一备份块中重新读取第一 boot数据。
[0104]其中,上述第一备份块为对上述第一物理块中的数据进行备份的一个物理块。
[0105]在本发明实施例中,为了防止在boot程序过程中出现数据错误,可以对启动boot程序使用的boot数据进行备份,例如对于第一物理块中存储的boot数据,可以进行备份,将备份的boot数据存储到另一个物理块中,本发明实施例中将存储备份boot数据的物理块称之为“第一备份块”。
[0106]现有技术中在判断出读取的boot数据出现数据错误时会反馈boot程序启动失败,或者使用ECC校验失败时会反馈boot程序启动失败,基于前述内容的分析可知,Nandflash在使用的过程中会出现存储单元的某些比特位可能会发生翻转从而使存储的数据改变,这种改变的数据超过ECC的最大纠错能力时会导致读取到的boot数据出现数据错误,本发明实施例中为了避免读取到的第一 boot数据出现数据错误时导致的boot程序启动失败,可以从上述第一物理块对应的第一备份块中重新读取第一 boot数据,则通过备份重新读取第一 boot数据的方式会提高boot程序启动成功的概率。
[0107]需要说明的是,在本发明的一些实施例中,步骤104从上述第一物理块对应的第一备份块中重新读取第一 boot数据,包括:
[0108]Cl、使用上述Nand flash内置的指针定位到第一物理块中有数据错误的第一boot数据的地址;
[0109]C2、将上述Nand flash内置的指针跳到第一备份块中与定位到的地址相同的地址;
[0110]C3、从上述第一备份块中与定位到的地址相同的地址开始,重新读取第一 boot数据。
[0111]其中,通过步骤Cl首先找到第一物理块中有数据错误的第一 boot数据的地址,由于第一备份块是对第一物理块中存储的数据的备份,故步骤C2中就可以通过Nand flash内置的指针指向第一备份块中与定位到的地址相同的地址,最后通过步骤C3就可以从第一备份块中重新读取到第一 boot数据了。
[0112]在本发明的另一些实施例中,步骤104从上述第一物理块对应的第一备份块中重新读取第一 boot数据还可以采取其它的实现方式,具体可以包括:
[0113]C4、获取上述第一物理块中有数据错误的第一 boot数据所在的页(page)的身份识别码(ID, IDentity);
[0114]C5、从上述第一备份块中查找与有数据错误的第一 boot数据所在的页的ID相同的页;
[0115]C6、根据在上述第一备份块中查找到的页重新读取第一 boot数据。
[0116]其中,通过步骤C4首先找到第一物理块中有数据错误的第一 boot数据所在的页的ID,由于第一备份块是对第一物理块中存储的数据的备份,故步骤C5中就可以通过第一备份块中找到页的ID相同的页,最后通过步骤C6就可以从第一备份块中重新读取到第一boot数据了。
[0117]105、判断从上述第一备份块中重新读取到的第一 boot数据是否有数据错误。
[0118]在本发明实施例中,从第一备份块读取到第一 boot数据之后,判断从第一备份块中重新读取到的第一 boot数据是否有数据错误,其中步骤105判断重新读取到的第一 boot数据是否有数据错误与前述内容的步骤103中对第一 boot数据是否有数据错误的判断方式相类似,此处不再赘述。若从第一备份块中重新读取到的第一 boot数据没有数据错误时,触发步骤106执行。[0119]106、若从上述第一备份块中重新读取到的第一 boot数据没有数据错误,则按照前述对第一 boot数据相同的处理方式继续处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
[0120]在本发明实施例中,步骤106描述的是步骤105中判断从第一备份块中重新读取到的第一 boot数据没有数据错误时,可以对启动boot程序需要读取的其它boot数据进行处理,其处理的方式可以是和对第一 boot数据相同的处理方式,也就是说,将启动boot程序需要读取的其它boot数据作为处理动作的描述方式重新执行步骤102至步骤106,与步骤102至步骤106不同的地方在于,步骤102至步骤106中以对第一 boot数据的处理进行说明的,当重新执行步骤102至步骤106时需要以对启动boot程序需要读取的其它boot数据为对象进行处理。
[0121]在本发明的一些实施例中,前述步骤106中描述的继续处理启动boot程序需要读取的其它boot数据,可以包括:
[0122]在第一备份块中继续处理除第一 boot数据之外的其它boot数据;
[0123]或,跳回到第一物理块,继续处理第一 boot数据之外的其它boot数据。
[0124]也就是说,本发明实施例中,当第一物理块中存储的第一 boot数据存在数据错误时,可以从第一备份块中重新读取到第一 boot数据,当重新读取到的boot数据经判断没有数据错误时,由于第一物理块和第一备份块中存储的boot数据相同,故可以继续使用第一备份块来读取除第一 boot数据之外的其它boot数据,当然也可以调回到第一物理块中继续处理第一 boot数据之外的其它boot数据。通过这两种方式,可以提高读取boot数据的灵活性。
[0125]需要说明的是,在本发明的另一些实施例中,步骤105判断从上述第一备份块中重新读取到的第一 boot数据是否有数据错误之后,当重新读取到的第一 boot数据没有数据错误时,本发明实施例还可以包括如下步骤:
[0126]若从上述第一备份块中重新读取到的第一 boot数据有数据错误,从上述第一物理块对应的第二备份块中再次读取上述第一 boot数据,上述第二备份块为对第一物理块中的数据进行备份的另一个物理块;
[0127]然后判断从上述第二备份块中再次读取到的第一 boot数据是否有数据错误,若从上述第二备份块中再次读取到的第一 boot数据没有数据错误,则触发执行按照前述对第一 boot数据相同的处理方式继续处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
[0128]也就是说,为了防止在boot程序过程中出现数据错误,可以对启动boot程序使用的boot数据进行备份,例如对于第一物理块中存储的boot数据,可以进行双备份,将备份的boot数据存储到两个物理块中,本发明实施例中将存储备份boot数据的物理块分别称之为“第一备份块”和“第二物理块”,当从第一备份块重新读取的第一 boot数据存在数据错误时,再次从第二物理块中读取第一 boot数据,通过双备份的方式可以进一步的提高boot程序启动成功的概率。
[0129]通过前述实施例的描述可知,用户在发起boot启动请求后,当检测到该boot启动请求时,首先判断在Nand flash中当前操作的第一物理块是否为坏块,当第一物理块不是坏块时再读取该第一物理块中存储的第一 boot数据,接下来判断读取到的第一 boot数据是否有数据错误,当读取到的第一 boot数据有数据错误时,从第一备份块中重新读取第一boot数据,再判断从第一备份块中重新读取到的第一 boot数据是否有数据错误,当从第一备份块中重新读取到的第一 boot数据没有数据错误之后,按照对第一 boot数据相同的处理方式继续处理启动boot程序需要读取的其它boot数据,直到完成boot程序启动。由于对Nand flash中当前操作的第一物理块进行了坏块判断,故可以避免因为Nand flash在出厂时或使用过程中出现的坏块问题而导致的boot程序启动失败问题,而且可以在读取到的第一 boot数据存在数据错误时从第一物理块对应的第一备份块中重新读取到第一boot数据,这样就可以在发现数据错误时就行补救,重新读取的第一 boot数据仍然可以用于启动boot程序,这相比于现有技术在出现数据错误时直接反馈boot失败相比,能够提高boot程序成功启动的概率。
[0130]为便于更好的理解和实施本发明实施例的上述方案,下面举例相应的应用场景来进行具体说明。
[0131]请参阅如图2所示,为本发明实施例提供的在boot程序的启动过程中跳过坏块的实现方式流程图,可以包括:
[0132]SO1、当检测到用户发起的boot启动请求时,开始对Nand flash中的物理块进行操作。
[0133]S02、读取坏块标记信息。
[0134]S03、判断在Nand flash中当前操作的物理块是否为坏块,如果当前操作的物理块不是坏块,执行步骤S04,如果当前操作的物理块是坏块,执行步骤S05。
[0135]S04、如果当前物理块的坏块标记信息是FF,则说明当前物理块是好块,然后开始在当前物理块中读取boot数据,如果在当前物理块中读取boot数据时需要访问新的物理块,则触发步骤S06执行。
[0136]S05、如果当前物理块的坏块标记信息不是FF,则说明当前物理块为坏块,判断在Nand flash中被判定为坏块的连续的物理块个数,若被判定为坏块的连续的物理块个数小于boot启动门限(即N)触发执行步骤S07,若被判定为坏块的物理块个数大于或等于N触发执行步骤S08。
[0137]需要说明的是,本发明的一些实施例中坏块标识信息可以具体存放在Nand flash的空闲(spare)区的第一个字节(byte)。所以当启动boot程序时,读取spare区的第一个byte就可以进行坏块判断。根据器件的可靠性定义连续坏块次数的要求,例如配置为5,则连续5个块为坏块时,认为boot程序启动失败。如果Nand flash随机出现坏块的概率为2%,则连续5个物理块都为坏块的概率为2%X 2%X 2%X 2%X 2%=3.2 X 1(T9,则这样的boot程序启动失败的概率已经很低了,能够满足对Nand flash器件的可靠性要求。
[0138]S06、在当前物理块中读取boot数据时如果需要访问新的物理块,则触发步骤S02再次进行坏块检测,查找下一个好块。
[0139]S07、统计在Nand flash中被判定为坏块的连续的物理块个数增加1,然后触发步骤S02再次对在Nand flash中操作的另一个数据块进行坏块检测。
[0140]S08、当被判定为坏块的连续的物理块个数大于或等于N,则超过了 Nand flash器件的可靠性容忍限制,反馈boot程序启动失败。
[0141]通过如上步骤S02至S07的循环多次,直到将启动boot程序需要读取的全部boot数据读取完之后,boot程序启动完成。
[0142]通过如图2所示的流程图就可以排除因为坏块导致的boot程序启动失败问题。对于在好块的读取过程中也出现的读数据错误情况,此处实施例中以通过双镜像启动方式为例来进行说明,即对当前物理块中存储的boot数据进行了备份,请参阅如图3所示,为本发明实施例提供的在boot程序的启动过程中判断读取到的boot数据是否有数据错误的实现方式流程图,可以包括:
[0143]P01、当判断当前物理块不是坏块时,启动boot程序,首先读取当前物理块的boot数据,如图3中,以读取当前物理块为good blockO为例,假如读取到的good blockO的第M页,M为自然数。
[0144]P02、经过ECC算法校验纠错,判断第M页的boot数据是否有数据错误。如果发现纠错失败,触发步骤P03执行,如果没有发现第M页的boot数据有数据错误,触发执行步骤P04。
[0145]P03、跳到当前物理块的备份块(例如good blockl),对备份块中的相同页(即跳到备份块的第M页)再次读取boot数据,然后执行步骤P05。
[0146]其中,Nand flash的一个物理块包括有好多页,例如一个物理块有多个64个页或128个页或256等等。相同页是指在物理块中的相同页号,比如都是第M个页。
[0147]P04、如果没有发现第M页的boot数据有数据错误,则继续读取good blockO的第(M+1)页的boot数据,然后触发步骤P02再次执行,即判断第(M+1)页的boot数据是否有数据错误。
[0148]需要说明的是,在本发明的一些实施例中,此处以读取完第M页后继续读取第(M+1)页为例进行说明的,在实际应用中,在读完第M页后还可以读取其他页的boot数据,此处仅作说明。
[0149]其中,读出备份块的第M页的boot数据后,回到原来的物理块(即good blockO)进行后续启动,只有在原物理块出现错误时才会跳到备份块进行读取boot数据。
[0150]P05、读取到备份块的第M页的boot数据后,判断第M页的boot数据是否有数据错误。如果发现纠错失败,则执行步骤P06,如果没有发现第M页的boot数据有数据错误,触发执行步骤P04。
[0151]P06、反馈boot程序启动失败。
[0152]通过前述的举例说明可知,使用这种boot程序的启动方式,可以极大的消除在读boot数据时出现的数据错误导致boot程序启动失败的概率。只有在备份块的相同page也不可纠错时才会导致boot程序启动失败,通过前述的分析可知,这样的概率已经很小,足够满足对Nand flash器件的可靠性要求。并且本发明实施例中当出现数据错误时,只需要多读一个page的数据(即备份块中存储的同一个block中相同page的数据),可以有效的保证boot程序启动的速度。
[0153]通过前述的举例说明可知,结合跳坏块和双镜像启动的方法来提高boot程序启动的可靠性。跳坏块功能可以很好的保证在使用Nand flash时,不会因为坏块而导致boot程序启动失败。双镜像启动可以从备份块读取相同位置的数据,再次降低ECC失败导致的boot程序启动失败的概率。通过上面的提高可靠性方法,可以保证在使用Nand flash,即使是MLC Nand flash时也能很好的保证可靠性,同时只需要两个block就能达到ECC纠错失败的情况下可靠的启动boot程序。
[0154]需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
[0155]为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相
关装置。
[0156]请参阅图4-a所示,本发明实施例提供的一种boot程序的启动装置400,可以包括:坏块判断模块401、数据读取模块402、错误判断模块403,其中,
[0157]坏块判断模块401,用于当检测到boot启动请求时,判断在与非闪存Nand flash中操作的第一物理块是否为坏块;
[0158]数据读取模块402,用于当所述第一物理块不是坏块时,读取所述第一物理块中存储的第一 boot数据;
[0159]错误判断模块403,用于判断读取到的第一 boot数据是否有数据错误;
[0160]所述数据读取模块402,还用于当读取到的第一 boot数据有数据错误时,从所述第一物理块对应的第一备份块中重新读取第一 boot数据,其中,所述第一备份块为对所述第一物理块中的数据进行备份的一个物理块;
[0161]所述错误判断模块403,还用于判断从所述第一备份块中重新读取到的第一 boot数据是否有数据错误;当从所述第一备份块中重新读取到的第一 boot数据没有数据错误时,则按照前述对第一 boot数据相同的处理方式,继续触发所述数据读取模块和所述错误判断模块,处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
[0162]在本发明的一些实施例中,所述坏块判断模块401,具体用于读取所述第一物理块的坏块标记BB信息;根据所述BB信息判断所述第一物理块是否为坏块。
[0163]在本发明的一些实施例中,请参阅如图4_b所示,本发明实施例提供的boot程序的启动装置400,还包括:反馈模块404,其中,
[0164]所述坏块判断模块401,还用于当所述第一物理块是坏块时,判断在所述Nandflash中操作的第二物理块是否为坏块;
[0165]所述坏块判断模块401,还用于当所述第二物理块是坏块时,继续判断在所述Nandflash中操作的第三物理块是否为坏块;
[0166]所述反馈模块404,用于当在Nand flash中判定有N个连续的物理块都为坏块时,反馈boot程序启动失败,其中,所述N为预置的boot启动门限,所述N为非零自然数。
[0167]在本发明的一些实施例中,错误判断模块403,具体用于使用差错校验纠正EEC算法对所述读取到的第一 boot数据进行纠错校验,若使用EEC算法对读取到的第一 boot数据校验失败,则判定读取到的第一 boot数据有数据错误。
[0168]在本发明的一些实施例中,请参阅如图4-c所示,本发明实施例提供的数据读取模块402,包括:
[0169]指针定位子模块4021,用于使用所述Nand flash内置的指针定位到所述第一物理块中有数据错误的第一 boot数据的地址;[0170]指针指向子模块4022,用于将所述Nand flash内置的指针跳到所述第一备份块中与定位到的地址相同的地址;
[0171]第一数据读取子模块4023,用于从所述第一备份块中与定位到的地址相同的地址开始,重新读取第一 boot数据。
[0172]在本发明的另一些实施例中,请参阅如图4-d所示,本发明实施例提供的数据读取模块402,包括:
[0173]页获取子模块4024,用于获取所述第一物理块中有数据错误的第一 boot数据所在的页page的身份识别码ID ;
[0174]查找子模块4025,用于从所述第一备份块中查找与有数据错误的第一 boot数据所在的页的ID相同的页;
[0175]第二数据读取子模块4026,用于根据在所述第一备份块中查找到的页重新读取第一 boot数据。
[0176]在本发明的一些实施例中,所述数据读取模块402,还用于所述错误判断模块判断从所述第一备份块中重新读取到的第一 boot数据有数据错误时,从所述第一物理块对应的第二备份块中再次读取所述第一 boot数据,所述第二备份块为对第一物理块中的数据进行备份的另一个物理块;
[0177]所述错误判断模块403,还用于判断从所述第二备份块中再次读取到的第一 boot数据是否有数据错误;当从所述第二备份块中再次读取到的第一 boot数据没有数据错误时,则触发执行所述数据读取模块和所述错误判断模块,处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
[0178]在本发明的另一些实施例中,所述数据读取模块402,还用于在所述第一备份块中继续读取除所述第一 boot数据之外的其它boot数据;或,跳回到所述第一物理块,继续读取所述第一 boot数据之外的其它boot数据;
[0179]所述错误判断模块403,还用于在所述第一备份块中继续判断除所述第一 boot数据之外的其它boot数据是否有数据错误;或,跳回到所述第一物理块,继续判断所述第一boot数据之外的其它boot数据是否有数据错误。
[0180]由前述如图4-a至图4-d中所示的实施例可知,用户在发起boot启动请求后,当检测到该boot启动请求时,首先坏块判断模块判断在Nand flash中当前操作的第一物理块是否为坏块,当第一物理块不是坏块时数据读取模块再读取该第一物理块中存储的第一boot数据,接下来错误判断模块判断读取到的第一 boot数据是否有数据错误,当读取到的第一 boot数据有数据错误时,数据读取模块从第一备份块中重新读取第一 boot数据,错误判断模块再判断从第一备份块中重新读取到的第一 boot数据是否有数据错误,当从第一备份块中重新读取到的第一 boot数据没有数据错误之后,按照对第一 boot数据相同的处理方式继续处理启动boot程序需要读取的其它boot数据,直到完成boot程序启动。由于对Nand flash中当前操作的第一物理块进行了坏块判断,故可以避免因为Nand flash在出厂时或使用过程中出现的坏块问题而导致的boot程序启动失败问题,而且可以在读取到的第一 boot数据存在数据错误时从第一物理块对应的第一备份块中重新读取到第一boot数据,这样就可以在发现数据错误时就行补救,重新读取的第一 boot数据仍然可以用于启动boot程序,这相比于现有技术在出现数据错误时直接反馈boot失败相比,能够提高boot程序成功启动的概率。
[0181]本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质存储有程序,该程序执行包括上述方法实施例中记载的部分或全部步骤。
[0182]接下来介绍本发明实施例提供的另一种boot程序的启动装置,请参阅图5所示,boot程序的启动装置500包括:
[0183]输入装置501、输出装置502、处理器503和存储器504 (其中boot程序的启动装置500中的处理器503的数量可以一个或多个,图5中以一个处理器为例)。在本发明的一些实施例中,输入装置501、输出装置502、处理器503和存储器504可通过总线或其它方式连接,其中,图5中以通过总线连接为例。
[0184]其中,处理器503,用于执行如下步骤:当检测到boot启动请求时,判断在与非闪存Nand flash中操作的第一物理块是否为坏块;若所述第一物理块不是坏块,读取所述第一物理块中存储的第一 boot数据;判断读取到的第一 boot数据是否有数据错误;若读取到的第一 boot数据有数据错误,从所述第一物理块对应的第一备份块中重新读取第一boot数据,其中,所述第一备份块为对所述第一物理块中的数据进行备份的一个物理块;判断从所述第一备份块中重新读取到的第一 boot数据是否有数据错误,若从所述第一备份块中重新读取到的第一 boot数据没有数据错误,则按照前述对第一 boot数据相同的处理方式继续处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
[0185]在本发明的一些实施例中,处理器503具体用于执行以下步骤:读取所述第一物理块的坏块标记BB信息;根据所述BB信息判断所述第一物理块是否为坏块。
[0186]在本发明的一些实施例中,处理器503还用于执行以下步骤:所述判断在与非闪存Nand flash中操作的第一物理块是否为坏块之后,若所述第一物理块是坏块,判断在所述Nand flash中操作的第二物理块是否为坏块;若所述第二物理块是坏块,继续判断在所述Nand flash中操作的第三物理块是否为坏块,若在Nand flash中判定有N个连续的物理块都为坏块,反馈boot程序启动失败,其中,所述N为预置的boot启动门限,所述N为非零自然数。
[0187]在本发明的一些实施例中,处理器503具体用于执行以下步骤:使用差错校验纠正EEC算法对所述读取到的第一 boot数据进行纠错校验,若使用EEC算法对读取到的第一boot数据校验失败,则判定读取到的第一 boot数据有数据错误。
[0188]在本发明的一些实施例中,处理器503具体用于执行以下步骤:使用所述Nandflash内置的指针定位到所述第一物理块中有数据错误的第一 boot数据的地址;将所述Nand flash内置的指针跳到所述第一备份块中与定位到的地址相同的地址;从所述第一备份块中与定位到的地址相同的地址开始,重新读取第一 boot数据。
[0189]在本发明的一些实施例中,处理器503具体用于执行以下步骤:获取所述第一物理块中有数据错误的第一 boot数据所在的页page的身份识别码ID ;从所述第一备份块中查找与有数据错误的第一 boot数据所在的页的ID相同的页;根据在所述第一备份块中查找到的页重新读取第一 boot数据。
[0190]在本发明的一些实施例中,处理器503还用于执行以下步骤:判断从所述第一备份块中重新读取到的第一 boot数据是否有数据错误之后,若从所述第一备份块中重新读取到的第一 boot数据有数据错误,从所述第一物理块对应的第二备份块中再次读取所述第一 boot数据,所述第二备份块为对第一物理块中的数据进行备份的另一个物理块;然后判断从所述第二备份块中再次读取到的第一 boot数据是否有数据错误,若从所述第二备份块中再次读取到的第一 boot数据没有数据错误,则触发执行按照前述对第一 boot数据相同的处理方式继续处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
[0191]在本发明的一些实施例中,处理器503还用于执行以下步骤:在所述第一备份块中继续处理除所述第一 boot数据之外的其它boot数据;或,跳回到所述第一物理块,继续处理所述第一 boot数据之外的其它boot数据。
[0192]由前述实施例可知,用户在发起boot启动请求后,当检测到该boot启动请求时,首先坏块判断模块判断在Nand flash中当前操作的第一物理块是否为坏块,当第一物理块不是坏块时数据读取模块再读取该第一物理块中存储的第一 boot数据,接下来错误判断模块判断读取到的第一 boot数据是否有数据错误,当读取到的第一 boot数据有数据错误时,数据读取模块从第一备份块中重新读取第一 boot数据,错误判断模块再判断从第一备份块中重新读取到的第一 boot数据是否有数据错误,当从第一备份块中重新读取到的第
一boot数据没有数据错误之后,按照对第一 boot数据相同的处理方式继续处理启动boot程序需要读取的其它boot数据,直到完成boot程序启动。由于对Nand flash中当前操作的第一物理块进行了坏块判断,故可以避免因为Nand flash在出厂时或使用过程中出现的坏块问题而导致的boot程序启动失败问题,而且可以在读取到的第一 boot数据存在数据错误时从第一物理块对应的第一备份块中重新读取到第一 boot数据,这样就可以在发现数据错误时就行补救,重新读取的第一 boot数据仍然可以用于启动boot程序,这相比于现有技术在出现数据错误时直接反馈boot失败相比,能够提高boot程序成功启动的概率。
[0193]另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0194]通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM, Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0195]综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
【权利要求】
1.一种boot程序的启动方法,其特征在于,包括: 当检测到boot启动请求时,判断在与非闪存Nand flash中操作的第一物理块是否为坏块; 若所述第一物理块不是坏块,读取所述第一物理块中存储的第一 boot数据; 判断读取到的第一 boot数据是否有数据错误; 若读取到的第一 boot数据有数据错误,从所述第一物理块对应的第一备份块中重新读取第一 boot数据,其中,所述第一备份块为对所述第一物理块中的数据进行备份的一个物理块; 判断从所述第一备份块中重新读取到的第一 boot数据是否有数据错误,若从所述第一备份块中重新读取到的第一 boot数据没有数据错误,则按照前述对第一 boot数据相同的处理方式继续处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
2.根据权利要求1所述的方法,其特征在于,所述判断在与非闪存Nandflash中操作的第一物理块是否为坏块,包括: 读取所述第一物理块的坏块标记BB信息; 根据所述BB信息判断所述第一物理块是否为坏块。
3.根据权利要求1或2所述的方法,其特征在于,所述判断在与非闪存Nandflash中操作的第一物理块是否为坏块之后还包括: 若所述第一物理块是坏块,判断在所述Nand flash中操作的第二物理块是否为坏块; 若所述第二物理块是坏块,继续判断在所述Nand flash中操作的第三物理块是否为坏块,若在Nand flash中判定有N个连续的物理块都为坏块,反馈boot程序启动失败,其中,所述N为预置的boot启动门限,所述N为非零自然数。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述判断读取到的第一boot数据是否有数据错误,包括: 使用差错校验纠正EEC算法对所述读取到的第一 boot数据进行纠错校验,若使用EEC算法对读取到的第一 boot数据校验失败,则判定读取到的第一 boot数据有数据错误。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述从所述第一物理块对应的第一备份块中重新读取第一 boot数据包括: 使用所述Nand flash内置的指针定位到所述第一物理块中有数据错误的第一 boot数据的地址; 将所述Nand flash内置的指针跳到所述第一备份块中与定位到的地址相同的地址; 从所述第一备份块中与定位到的地址相同的地址开始,重新读取第一 boot数据。
6.根据权利要求1至4中任一项所述的方法,其特征在于,所述从所述第一物理块对应的第一备份块中重新读取第一 boot数据包括: 获取所述第一物理块中有数据错误的第一 boot数据所在的页page的身份识别码ID ; 从所述第一备份块中查找与有数据错误的第一 boot数据所在的页的ID相同的页; 根据在所述第一备份块中查找到的页重新读取第一 boot数据。
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述判断从所述第一备份块中重新读取到的第一 boot数据是否有数据错误之后还包括: 若从所述第一备份块中重新读取到的第一 boot数据有数据错误,从所述第一物理块对应的第二备份块中再次读取所述第一 boot数据,所述第二备份块为对第一物理块中的数据进行备份的另一个物理块; 然后判断从所述第二备份块中再次读取到的第一 boot数据是否有数据错误,若从所述第二备份块中再次读取到的第一 boot数据没有数据错误,则触发执行按照前述对第一boot数据相同的处理方式继续处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
8.根据权利要求1至7中任一项所述的方法,其特征在于,所述继续处理启动boot程序需要读取的其它boot数据,包括: 在所述第一备份块中继续处理除所述第一 boot数据之外的其它boot数据; 或,跳回到所述第一物理块,继续处理所述第一 boot数据之外的其它boot数据。
9.一种boot程序的启动装置,其特征在于,包括: 坏块判断模块,用于当检测到boot启动请求时,判断在与非闪存Nand flash中操作的第一物理块是否为坏块; 数据读取模块,用于当所述第一物理块不是坏块时,读取所述第一物理块中存储的第一 boot数据; 错误判断模块,用于判断读取到的第一 boot数据是否有数据错误; 所述数据读取模块,还用于当读取到的第一 boot数据有数据错误时,从所述第一物理块对应的第一备份块中重新读取第一 boot数据,其中,所述第一备份块为对所述第一物理块中的数据进行备份的一个物理块; 所述错误判断模块,还用于判断从所述第一备份块中重新读取到的第一 boot数据是否有数据错误;当从所述第一备份块中重新读取到的第一 boot数据没有数据错误时,则按照前述对第一 boot数据相同的处理方式,继续触发所述数据读取模块和所述错误判断模块,处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
10.根据权利要求9所述的装置,其特征在于,所述坏块判断模块,具体用于读取所述第一物理块的坏块标记BB信息;根据所述BB信息判断所述第一物理块是否为坏块。
11.根据权利要求9或10所述的装置,其特征在于,所述boot程序的启动装置,还包括:反馈模块,其中, 所述坏块判断模块,还用于当所述第一物理块是坏块时,判断在所述Nand flash中操作的第二物理块是否为坏块; 所述坏块判断模块,还用于当所述第二物理块是坏块时,继续判断在所述Nand flash中操作的第三物理块是否为坏块; 所述反馈模块,用于当在Nand flash中判定有N个连续的物理块都为坏块时,反馈boot程序启动失败,其中,所述N为预置的boot启动门限,所述N为非零自然数。
12.根据权利要求9至11中任一项所述的装置,其特征在于,所述错误判断模块,具体用于使用差错校验纠正EEC算法对所述读取到的第一 boot数据进行纠错校验,若使用EEC算法对读取到的第一 boot数据校验失败,则判定读取到的第一 boot数据有数据错误。
13. 根据权利要求9至12中任一项所述的装置,其特征在于,所述数据读取模块,包括: 指针定位子模块,用于使用所述Nand flash内置的指针定位到所述第一物理块中有数据错误的第一 boot数据的地址; 指针指向子模块,用于将所述Nand flash内置的指针跳到所述第一备份块中与定位到的地址相同的地址; 第一数据读取子模块,用于从所述第一备份块中与定位到的地址相同的地址开始,重新读取第一 boot数据。
14.根据权利要求9至13中任一项所述的装置,其特征在于,所述数据读取模块,包括: 页获取子模块,用于获取所述第一物理块中有数据错误的第一 boot数据所在的页page的身份识别码ID ; 查找子模块,用于从所述第一备份块中查找与有数据错误的第一 boot数据所在的页的ID相同的页; 第二数据读取子模块,用于根据在所述第一备份块中查找到的页重新读取第一 boot数据。
15.根据权利要求9至14中任一项所述的装置,其特征在于,所述数据读取模块,还用于所述错误判断模块判断从所述第一备份块中重新读取到的第一 boot数据有数据错误时,从所述第一物理块对应的第二备份块中再次读取所述第一 boot数据,所述第二备份块为对第一物理块中的数据进行备份的另一个物理块; 所述错误判断模块,还用于判断从所述第二备份块中再次读取到的第一 boot数据是否有数据错误;当从所述第二备份块中再次读取到的第一 boot数据没有数据错误时,则触发执行所述数据读取模块和所述错误判断模块,处理启动boot程序需要读取的其它boot数据直到boot程序启动完毕。
16.根据权利要求9至15中任一项所述的装置,其特征在于,所述数据读取模块,还用于在所述第一备份块中继续读取除所述第一boot数据之外的其它boot数据;或,跳回到所述第一物理块,继续读取所述第一 boot数据之外的其它boot数据; 所述错误判断模块,还用于在所述第一备份块中继续判断除所述第一 boot数据之外的其它boot数据是否有数据错误;或,跳回到所述第一物理块,继续判断所述第一 boot数据之外的其它boot数据是否有数据错误。
【文档编号】G06F9/445GK103473098SQ201310410749
【公开日】2013年12月25日 申请日期:2013年9月10日 优先权日:2013年9月10日
【发明者】喻丙旭 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1