固件存储系统中数据保护的方法、设备及系统的制作方法

文档序号:6441036阅读:205来源:国知局
专利名称:固件存储系统中数据保护的方法、设备及系统的制作方法
技术领域
本发明涉及信息安全领域,特别涉及一种固件存储系统中数据保护的方法、设备及系统。
背景技术
固件(Firmware)可以被理解为“固化的软件”,广泛地存在于各种电子设备,如小型机、路由器、交换机、PC (personal computer,个人计算机)机、智能手机、数码相机、光驱、 显卡或者遥控器等电子设备。例如,针对PC机来讲,固件指主板BIOS (Basic Input/Ouput System,基本输入输出系统),主要完成上电自检、初始化和操作系统引导等功能;针对智能手机来将,固件即手机操作系统。
通常,固件被保存在电子设备内的非易失性存储器,如ROM(Read-Only Memory,只读存储器)、PROM (Progammable Read-Only Memory,可编程只读存储器)、EPROM (ErasabIe Progammable Read-Only Memory,可擦写可编程只读存储器)、EEPROM (ElectricalIy Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)或者 Flash Memory (闪存)芯片等。随着IT (Information Technology,信息技术)技术的迅速发展, 基于闪存芯片容易做大容量且可擦写等特点,在固件需要不断更新以适应持续升级的硬件环境、固件实现的功能也越来越复杂及所需存储空间越来越大的情况下,闪存芯片成为了现有电子设备最常用的固件存储器。
现有技术中,固件经常要进行RAS(Reliability,AvaiIability&Serviceability, 可靠性,可用性,服务性)事件的处理。但是,由于闪存芯片在擦写操作时有一定的失败概率,这将导致写入闪存芯片的固件数据有误,尤其在主设备数量众多且各主设备均挂载闪存芯片的情况下,主设备在读取固件时出现固件数据有误的概率将会更大。发明内容
为了保证固件数据完整性和准确性,本发明实施例提供了一种固件存储系统中数据保护的方法、设备及系统。所述技术方案如下
一种固件存储系统中数据保护的方法,所述方法包括
冗余独立闪存阵列RAIF控制器将与自身相连的N个固件存储器按照每两个固件存储器一组的规则进行分组,构成冗余独立闪存阵列,所述冗余独立闪存阵列至少包含一个镜像分组,所述镜像分组内包括互为镜像的两个固件存储器,其中,N为大于等于2的整数;
当所述RAIF控制器接收到主设备发送的写命令时,将所述写命令携带的数据写入所述冗余独立闪存阵列中镜像分组内的两个固件存储器中;
当所述RAIF控制器接收到主设备发送的读命令时,从所述冗余独立闪存阵列中镜像分组内的一个固件存储器中读取所述读命令所要求读取的数据,当所读取的数据出错时,从所述镜像分组内的另一个固件存储器中读取所述读命令所要求读取的数据。7
一种冗余独立闪存阵列RAIF控制器,所述RAIF控制器包括RAIF构建模块、写数据模块和读数据模块;
所述RAIF构建模块,用于将与所述RAIF控制器相连的N个固件存储器进行分组, 构成冗余独立闪存阵列,所述冗余独立闪存阵列至少包含一个镜像分组,所述镜像分组内包括互为镜像的两个固件存储器,其中,N为大于等于2的整数;
所述写数据模块,用于当接收到主设备发送的写命令时,将所述写命令携带的数据写入所述冗余独立闪存阵列中镜像分组内的两个固件存储器中;
所述读数据模块,用于当所述RAIF控制器接收到主设备发送的读命令时,从所述冗余独立闪存阵列中镜像分组内的一个固件存储器中读取所述读命令所要求读取的数据, 当所读取的数据出错时,从所述镜像分组内的另一个固件存储器中读取所述读命令所要求读取的数据。
一种固件存储系统,所述系统包括主设备、冗余独立闪存阵列RAIF控制器及N个固件存储器,所述N个固件存储器分别通过所述RAIF控制器与所述主设备相连,其中,N为大于等于2的整数;
所述RAIF控制器,用于将与自身相连的N个固件存储器按照每两个固件存储器一组的规则进行分组,构成冗余独立闪存阵列,所述冗余独立闪存阵列至少包含一个镜像分组,所述镜像分组内包括互为镜像的两个固件存储器;
所述主设备,用于向所述RAIF控制器发送写命令或者读命令;
所述RAIF控制器,还用于当接收到主设备发送的写命令时,将所述写命令携带的数据写入所述冗余独立闪存阵列中镜像分组内的两个固件存储器中;
所述RAIF控制器,还用于当接收到主设备发送的读命令时,从所述冗余独立闪存阵列中镜像分组内的一个固件存储器中读取所述读命令所要求读取的数据,当所读取的数据出错时,从所述镜像分组内的另一个固件存储器中读取所述读命令所要求读取的数据。
所述RAIF控制器,还用于将读取的数据返回给所述主设备。
本发明技术方案中,RAIF控制器将与其相连的N个固件存储器构建成冗余独立闪存阵列,并在写数据时,将数据同时写入到冗余独立闪存阵列中镜像分组内的两个固件存储器中,这样,在读取数据时,一旦发现从镜像分组内的一个固件存储器中所读取的数据错误时,就可以从该竞相分组中的另外一个固件存储器中读取数据,以实现数据的备份,保证数据的完整性和安全性。


为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例1提供的一种固件存储系统中数据保护的方法流程图2是本发明实施例2提供的一种固件存储系统中数据保护的方法流程图3a为本发明实施例2所提供的一种RAIF控制器所构建的冗余独立闪存阵列的示例图北为本发明实施例2所提供的另一种RAIF控制器所构建的冗余独立闪存阵列的示例图如为本发明实施例2所提供的一种RAIF控制器将未分块数据写入冗余独立闪存阵列的示例图4b为本发明实施例2所提供的一种RAIF控制器将数据分块后写入冗余独立闪存阵列的示例图fe为本发明实施例2所提供的一种RAIF控制器将未分块数据及校验值写入冗余独立闪存阵列的示例图恥为本发明实施例2所提供的一种RAIF控制器将数据分块后带校验值写入冗余独立闪存阵列的示例图6为本发明实施例2所提供的一种RAIF控制器将数据分块后带校验值写入冗余独立闪存阵列的示例图7为本发明实施例3所提供的一种冗余独立闪存阵列RAIF控制器装置框图8为本发明实施例3所提供的一种冗余独立闪存阵列RAIF控制器装置框图9为本发明实施例4所提供的一种固件存储系统示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例1
参见图1,一种固件存储系统中数据保护的方法,方法包括
步骤101 冗余独立闪存阵列RAIF控制器将与自身相连的N个固件存储器进行分组,构成冗余独立闪存阵列,其中,冗余独立闪存阵列至少包含一个镜像分组,镜像分组内包括互为镜像的两个固件存储器,N为大于等于2的整数;
步骤102 当RAIF控制器接收到主设备发送的写命令时,将写命令携带的数据写入冗余独立闪存阵列中镜像分组内的两个固件存储器中;
步骤103 当RAIF控制器接收到主设备发送的读命令时,从冗余独立闪存阵列中镜像分组内的一个固件存储器中读取读命令所要求读取的数据,当所读取的数据出错时, 从镜像分组内的另一个固件存储器中读取读命令所要求读取的数据。
本发明技术方案中,RAIF控制器将与其相连的N个固件存储器构建成冗余独立闪存阵列,并在写数据时,将数据同时写入到冗余独立闪存阵列中镜像分组内的两个固件存储器中,这样,在读取数据时,一旦发现从镜像分组内的一个固件存储器中所读取的数据错误时,就可以从该竞相分组中的另外一个固件存储器中读取数据,以实现数据的备份,保证数据的完整性和安全性。
实施例2
参见图2,一种固件存储系统中数据保护的方法,以保证固件数据完整性和准确性,并可以实现固件的快速更新,所述方法具体可以包括如下步骤
步骤201 冗余独立闪存阵列RAIF控制器将与自身相连的N个固件存储器进行分组,构成冗余独立闪存阵列,具体地,RAIF控制器将与自身相连的N个固件存储器按照每两个固件存储器一组的规则进行分组,其中,冗余独立闪存阵列至少包含一个镜像分组,镜像分组内包括互为镜像的两个固件存储器,N为大于等于2的整数;
其中,RAIF控制器具体可以是 FPGA(Field-Programmable Gate Array,现场可编程门阵列)控制器,RAID (Redundant Array of Independent Disks,冗余独立磁盘阵列) 控制器、CPLD (Complex Programmable Logic Device,复杂可编程逻辑器件)控制器或者 ASIC (Application Specific Integrated Circuit,特定应用集成电路)控制器等芯片器件。
固件存储器具体可以是SD (Secure Digital Card,安全数字卡)卡、CF (Compact Flash,紧凑型闪存)卡、MS (Memory Mick,记忆棒)卡、XD (XD-PICTURE CARD)卡、TF (Trans FLash)卡、U盘或者NOR Flash芯片等固件存储器。
本发明实施例中,RAIF控制器所连接的固件存储器的个数可以是偶数也可以是奇数,那么,基于步骤201所述的构建冗余独立闪存阵列的方式可以知道当RAIF控制器所连接的固件存储器的个数为偶数时,则该RAIF控制器所构建的冗余独立闪存阵列中仅包含一个或者多个镜像分组,当RAIF控制器所连接的固件存储器的个数为奇数时,则该RAIF控制器所构建的冗余独立闪存阵列中除包含有一个或者多个镜像分组外,还会有一个孤立的固件存储器。
例如,参见图3a,为本发明实施例所提供的一种RAIF控制器所构建的冗余独立闪存阵列的示例图,RAIF控制301a连接有固件存储器302a、固件存储器303a、固件存储器 304a和固件存储器30 ;则,RAIF控制器301a便可以将固件存储器30 和固件存储器 303a分到同一个镜像分组Al,将有固件存储器30 和有固件存储器30 分到同一镜像分组A2中,也即RAIF控制器301a所构建的冗余独立闪存阵列中仅有2个镜像分组。
参见图北,为本发明实施例所提供的另一种RAIF控制器所构建的冗余独立闪存阵列的示例图,RAIF控制301b连接有固件存储器302b、固件存储器30 、固件存储器 304b、固件存储器30 和固件存储器30 ;则,RAIF控制器301b便可以将固件存储器30 和固件存储器30 分到同一个镜像分组Bi,将有固件存储器304b和有固件存储器30 分到同一镜像分组B2中,固件存储器306b作为孤立的固件存储器存在,也即RAIF控制器 301b所构建的冗余独立闪存阵列中有两个镜像分组和一个孤立的固件存储器。
步骤202 当RAIF控制器接收到主设备发送的写命令时,将写命令携带的数据写入冗余独立闪存阵列中镜像分组内的两个固件存储器中;
其中,主设备具体可以是CPU (Central Processor Unit,中央处理器单元)芯片、 ICH(Input/Output Controller Hub,南桥)芯片或者单片机等需要对固件进行读写操作的芯片器件。
本发明实施例中,RAIF控制器可以通过如下三种方式将写命令携带的数据写入冗余独立闪存阵列中镜像分组内的两个固件存储器中
方式一、当N为大于等于2的偶数时,将写命令携带的数据写入到冗余独立闪存阵列中镜像分组内的两个固件存储器中包括
将写命令携带的数据分成M个数据块,其中,M为大于等于1的整数;
分别将M个数据块作为当前待写入的数据块,执行如下操作从冗余独立闪存阵列中选择一镜像分组,并将当前待写入的数据块同时写入所选择的镜像分组内的两个固件存储器;
记录并保存数据与数据的数据块和存储数据的数据块镜像分组间对应关系。
针对图3a所示的冗余独立闪存阵列,参见图如,为本发明实施例RAIF控制器将未分块数据写入冗余独立闪存阵列的示例图;RAIF控制器301a将写命令所携带的数据C同时写入镜像分组Al中的固件存储器30 和固件存储器303a。
那么,当RAIF控制器301a从固件存储器30 中读取数据C失败或者读取的数据 B错误时,可以从固件存储器303a中读取数据C,以实现数据的备份,保证数据的完整性和安全性。
针对图3a所示的冗余独立闪存阵列,参见图4b,为本发明实施例RAIF控制器将数据分块后写入冗余独立闪存阵列的示例图;当M为大于等于2的值,例如M为3时,RAIF控制器301a将写命令携带的数据C随机分为连续的数据块Cl、数据块C2和数据块C3 ;RAIF 控制器301将数据块Cl同时写入到镜像分组Al中的固件存储器30 和固件存储器303a 中、将数据块C2同时写入到镜像分组A2中的固件存储器30 和固件存储器30 中、将数据块C3同时写入到镜像分组Al中的固件存储器30 和固件存储器303a中;将数据A — 数据块Cl、数据块C2和数据块C3 —镜像分组Al、镜像分组A2和镜像分组Al的对应关系记录并保存下来,以便在读取数据时使用。
那么,当RAIF控制器从固件存储器30 中读取数据块Cl失败或者读取的数据块 Cl错误时,可以从固件存储器303a中读取数据块Cl,以实现数据的备份,保证数据的完整性和安全性;另外,将数据C分块后并行存储在多个镜像分组中,当RAIF控制器301a读取数据C时,便可以同时从多个镜像分组中同时读取数据C的各个数据块,并将所读取的g各数据块组合还原为数据C,可以提升数据读取的速度。
方式二、当N为大于等于2的偶数时,将写命令携带的数据写入到冗余独立闪存阵列中镜像分组内的两个固件存储器中包括
将写命令携带的数据分成M个数据块,并分别计算M个数据块的校验值,其中,M为大于等于1的整数;
分别将M个数据块作为当前待写入的数据块,执行如下操作从冗余独立闪存阵列中选择一镜像分组,并将当前待写入的数据块和当前待写入的数据块的校验值同时写入所选择的镜像分组内的两个固件存储器;
记录并保存数据与数据的数据块和存储数据的数据块镜像分组间对应关系。
针对图3a所示的冗余独立闪存阵列,参见图fe,为本发明实施例RAIF控制器将未分块数据及校验值写入冗余独立闪存阵列的示例图;RAIF控制器301a计算写命令所携带的数据C的校验和,如计算数据C的奇偶校验和C’,其中,数据C的校验和用户验证数据C 是否出错,根据该校验和可以更进一步地保证RAIF控制器在读取数据时的正确性;RAIF控制器301a将数据C及校验和C,同时写入固件存储器30 和固件存储器303a。
那么,当RAIF控制器301a从固件存储器30 中读取数据C失败或者读取的数据 C错误时,可以从固件存储器303a中读取数据C,以实现数据的备份,保证数据的完整性和安全性。
针对图3a所示的冗余独立闪存阵列,参见图5b,为本发明实施例RAIF控制器将数据分块后带校验值写入冗余独立闪存阵列的示例图;当M为大于等于2的值,例如M为3时,RAIF控制器301a将写命令携带的数据C随机分为连续的数据块Cl、数据块C2和数据块C3,并分别计算数据块Cl、数据块C2和数据块C3的校验和Cl’、C2’和C3’,其中,各数据块的校验和分别用于验证各数据块是否出错,进一步保证RAIF控制器301a在读取数据块时的正确性;RAIF控制器301将数据块Cl及校验和Cl’同时写入到镜像分组Al中的固件存储器30 和固件存储器303a中、将数据块C2及校验和C2’同时写入到镜像分组A2中的固件存储器30 和固件存储器30 中、将数据块C3及校验和C3’同时写入到镜像分组 Al中的固件存储器30 和固件存储器303a中;将数据C —数据块Cl、数据块C2和数据块 C3 —镜像分组Al、镜像分组A2和镜像分组Al的对应关系记录并保存下来,以便在读取数据时使用。
那么,当RAIF控制器从固件存储器30 中读取数据块Cl失败或者读取的数据块 Cl错误时,可以从固件存储器303a中读取数据块Cl,以实现数据的备份,保证数据的完整性和安全性;另外,将数据C分块后并行存储在多个镜像分组中,当RAIF控制器301a读取数据C时,便可以同时从多个镜像分组中同时读取数据C的各个数据块,并将所读取的数据块组合还原为数据C,可以提升数据读取的速度,另外,在读取数据块时,还相应读取该数据块对应的校验和,并根据所读取的校验和验证所读取数据块的正确性,以保证所读取数据的正确性。
更进一步地,本发明实施例中,RAIF控制器可以根据配置信息将数据块及数据块对应的校验值分别写到到固件存储器的特定区域,其中,配置信息给出了固件存储器中数据区与校验区的具体划分信息。
方式三、当N为大于等于2的奇数时,将写命令携带的数据写入到冗余独立闪存阵列中镜像分组内的两个固件存储器中包括
将写命令携带的数据分成M个数据块,并分别计算M个数据块的校验值,其中,M为大于等于1的整数;
分别将M个数据块作为当前待写入的数据块,执行如下操作从冗余独立闪存阵列中选择一镜像分组,并将当前待写入的数据块同时写入所选择的镜像分组内的两个固件存储器,且将当前待写入的数据块的校验值写入未被分到镜像分组内的固件存储器;
记录并保存数据与数据的数据块和存储数据的数据块镜像分组间对应关系。
针对图北所示的冗余独立闪存阵列,参见图6,为本发明实施例RAIF控制器将数据分块后带校验值写入冗余独立闪存阵列的示例图;当M为大于等于2的值,例如M为3 时,RAIF控制器301b将写命令携带的数据C随机分为连续的数据块Cl、数据块C2和数据块C3,并分别计算数据块Cl、数据块C2和数据块C3的校验和Cl’、C2’和C3’,其中,各数据块的校验和分别用于验证各数据块是否出错,进一步保证RAIF控制器301b在读取数据块时的正确性;RAIF控制器301将数据块Cl同时写入到镜像分组Bl中的固件存储器302b 和固件存储器30 中,并将校验和Cl’写入孤立的固件存储器306b,将数据块C2同时写入到镜像分组B2中的固件存储器304b和固件存储器30 中,并将校验和C2’写入孤立的固件存储器306b,将数据块C3同时写入到镜像分组Bl中的固件存储器302b和固件存储器 303b中,并将校验和C3’写入孤立的固件存储器306b ;将数据C —数据块Cl、数据块C2和数据块C3 —镜像分组Bi、镜像分组B2和镜像分组Bl的对应关系记录并保存下来,以便在读取数据时使用。
那么,当RAIF控制器从固件存储器302b中读取数据块Cl失败或者读取的数据块 Cl错误时,可以从固件存储器30 中读取数据块Cl,以实现数据的备份,保证数据的完整性和安全性;另外,将数据C分块后并行存储在多个镜像分组中,当RAIF控制器301b读取数据C时,便可以同时从多个镜像分组中同时读取数据C的各个数据块,并将所读取的数据块组合还原为数据C,可以提升数据读取的速度,另外,在读取数据块时,还相应读取该数据块对应的校验和,并根据所读取的校验和验证所读取数据块的正确性,以保证所读取数据的正确性。
步骤203 当RAIF控制器接收到主设备发送的读命令时,从冗余独立闪存阵列中镜像分组内的一个固件存储器中读取读命令所要求读取的数据,当所读取的数据出错时, 从镜像分组内的另一个固件存储器中读取读命令所要求读取的数据。
本发明实施例中,针对方式一的RAIF控制器将写命令携带的数据写入冗余独立闪存阵列中镜像分组内的两个固件存储器中的方法,相应地从冗余独立闪存阵列中镜像分组内的一个固件存储器中读取读命令所要求读取的数据,当所读取的数据出错时,从分组内的另一个固件存储器中读取读命令所要求读取的数据包括
查找数据与数据的数据块和存储数据的数据块镜像分组间对应关系,得到各存储有读命令所要求读取数据的数据块的镜像分组;
分别将所查找得到的各镜像分组作为当前待读取的镜像分组,执行如下操作从当前待读取的镜像分组内的一个固件存储器中读取所要求读取数据的数据块,确定读取过程是否出现读取故障,当出现读取故障时,从当前待读取的镜像分组内的另一个固件存储器中读取所要求读取数据的数据块;
将所读取的各所要求读取数据的数据块组合后得到所要求读取的数据,并将组合得到的所要求读取的数据返回给主设备。
本发明实施例中,针对方式二的RAIF控制器将写命令携带的数据写入冗余独立闪存阵列中镜像分组内的两个固件存储器中的方法,相应地,从冗余独立闪存阵列中镜像分组内的一个固件存储器中读取读命令所要求读取的数据,当所读取的数据出错时,从镜像分组内的另一个固件存储器中读取读命令所要求读取的数据包括
查找数据与数据的数据块和存储数据的数据块镜像分组间对应关系,得到各存储有读命令所要求读取数据的数据块的镜像分组;
分别将所查找得到的各镜像分组作为当前待读取的镜像分组,执行如下操作从当前待读取的镜像分组内的一个固件存储器中读取所要求读取数据的数据块及数据块对应的校验值,并根据校验值验证数据块是否出错,当校验值出错时,从当前待读取的镜像分组内的另一个固件存储器中读取所要求读取数据的数据块;
将所读取的各所要求读取数据的数据块组合后得到所要求读取的数据,并将组合得到的所要求读取的数据返回给主设备。
本发明实施例中,针对方式三的RAIF控制器将写命令携带的数据写入冗余独立闪存阵列中镜像分组内的两个固件存储器中的方法,相应地,从冗余独立闪存阵列中镜像分组内的一个固件存储器中读取读命令所要求读取的数据,当所读取的数据出错时,从镜像分组内的另一个固件存储器中读取读命令所要求读取的数据包括
查找数据与数据的数据块和存储数据的数据块镜像分组间对应关系,得到各存储有读命令所要求读取数据的数据块的镜像分组;
分别将所查找得到的各镜像分组作为当前待读取的镜像分组,执行如下操作从当前待读取的镜像分组内的一个固件存储器中读取所要求读取数据的数据块,并从未被分到镜像分组内的固件存储器中读取数据块的校验值,根据校验值验证数据块是否出错,当校验值出错时,从当前待读取的镜像分组内的另一个固件存储器中读取所要求读取数据的数据块;
将所读取的各所要求读取数据的数据块组合后得到所要求读取的数据,并将组合得到的所要求读取的数据返回给主设备。
步骤204 :RAIF控制器接收固件存储器硬件接口发送的中断请求,并根据该中断请求判断此时是有新的固件存储设备插入还是有固件存储设备拔除,
当中断请求指示有新的固件存储器接入RAIF控制器时,执行步骤205 ;
当中断请求指示有固件存储器从RAIF控制器中拔除时,执行步骤206 ;
步骤205 :RAIF控制器判断自身是否能够识别新接入的固件存储器,
在能够识别新接入的固件存储器时,将新接入的固件存储器加入冗余独立闪存阵列中;
在不能够识别新接入的固件存储器时,向用户返回操作失败的信息。
具体地,RAIF控制器判断自身是否能够识别新接入的固件存储器包括
检查所新插入的固件存储器的规格信息是否符合预设值,当符合预设值时,则判定能够识别新接入的固件存储器,否则,判定不能够识别新接入的固件存储器。
步骤206 =RAIF控制器将所拔除的固件存储器从冗余独立闪存阵列中移除。
通过步骤204至206步骤的实现,RAIF控制器支持固件存储器的热插拔实现,从而可以实现固件的快速更新。
本发明技术方案中,RAIF控制器将与其相连的N个固件存储器构建成冗余独立闪存阵列,并在写数据时,将数据同时写入到冗余独立闪存阵列中镜像分组内的两个固件存储器中,这样,在读取数据时,一旦发现从镜像分组内的一个固件存储器中所读取的数据错误时,就可以从该竞相分组中的另外一个固件存储器中读取数据,以实现数据的备份,保证数据的完整性和安全性。
另外,RAIF控制器在将数据到冗余独立闪存阵列时,将该数据对应的校验值也写入到冗余独立闪存阵列中,该校验值用于校验所读取的数据是否出错,根据该校验和可以更进一步地保证RAIF控制器在读取数据时的正确性。
再者,RAIF控制器还可以将数据进行分块后并行的写入到冗余独立闪存阵列的各镜像分组内的固件存储器中,这样,在RAIF读取数据时,便可以同时从多个镜像分组中同时读取数据的各个数据块,并将所读取的数据块组合还原为数据,以提升数据读取的速度。
实施例3
参见图7,一种冗余独立闪存阵列RAIF控制器,该RAIF控制器具体和方法实施例 2中的RAIF控制器相同,包括RAIF构建模块401、写数据模块402和读数据模块403 ;
其中,RAIF构建模块401,用于将与RAIF控制器相连的N个固件存储器进行分组, 构成冗余独立闪存阵列,其中,冗余独立闪存阵列至少包含一个镜像分组,镜像分组内包括互为镜像的两个固件存储器,其中,N为大于等于2的整数;14
写数据模块402,用于当接收到主设备发送的写命令时,将写命令携带的数据写入冗余独立闪存阵列中镜像分组内的两个固件存储器中;
读数据模块403,用于当RAIF控制器接收到主设备发送的读命令时,从冗余独立闪存阵列中镜像分组内的一个固件存储器中读取读命令所要求读取的数据,当所读取的数据出错时,从镜像分组内的另一个固件存储器中读取读命令所要求读取的数据。
具体地,写数据模块402包括
数据分块单元,用于当N为大于等于2的偶数时,将写命令携带的数据分成M个数据块,其中,M为大于等于1的整数;
数据写入单元,用于分别将M个数据块作为当前待写入的数据块,执行如下操作 从冗余独立闪存阵列中选择一镜像分组,并将当前待写入的数据块同时写入所选择的镜像分组内的两个固件存储器;
存储单元,用于记录并保存数据与数据的数据块和存储数据的数据块镜像分组间对应关系。
或者,写数据模块402包括
数据分块单元,用于当N为大于等于2的偶数时,将写命令携带的数据分成M个数据块,并分别计算M个数据块的校验值,其中,M为大于等于1的整数;
数据写入单元,用于分别将M个数据块作为当前待写入的数据块,执行如下操作 从冗余独立闪存阵列中选择一镜像分组,并将当前待写入的数据块和当前待写入的数据块的校验值同时写入所选择的镜像分组内的两个固件存储器;
存储单元,用于记录并保存数据与数据的数据块和存储数据的数据块镜像分组间对应关系。
或者,写数据模块402包括
数据分块单元,用于当N为大于等于2的奇数时,将写命令携带的数据分成M个数据块,并分别计算M个数据块的校验值,其中,M为大于等于1的整数;
数据写入单元,用于分别将M个数据块作为当前待写入的数据块,执行如下操作 从冗余独立闪存阵列中选择一镜像分组,并将当前待写入的数据块同时写入所选择的镜像分组内的两个固件存储器,且将当前待写入的数据块的校验值写入未被分到镜像分组内的固件存储器;
存储单元,用于记录并保存数据与数据的数据块和存储数据的数据块镜像分组间对应关系。
读数据模块403包括
查找单元,用于查找数据与数据的数据块和存储数据的数据块镜像分组间对应关系,得到各存储有读命令所要求读取数据的数据块的镜像分组;
数据读取单元,用于分别将所查找得到的各镜像分组作为当前待读取的镜像分组,执行如下操作从当前待读取的镜像分组内的一个固件存储器中读取所要求读取数据的数据块,确定读取过程是否出现读取故障,当出现读取故障时,从当前待读取的镜像分组内的另一个固件存储器中读取所要求读取数据的数据块;
发送单元,用于将所读取的各所要求读取数据的数据块组合后得到所要求读取的数据,并将组合得到的所要求读取的数据返回给主设备。
或者,读数据模块403包括
查找单元,用于查找数据与数据的数据块和存储数据的数据块镜像分组间对应关系,得到各存储有读命令所要求读取数据的数据块的镜像分组;
数据读取单元,用于分别将所查找得到的各镜像分组作为当前待读取的镜像分组,执行如下操作从当前待读取的镜像分组内的一个固件存储器中读取所要求读取数据的数据块及数据块对应的校验值,并根据校验值验证数据块是否出错,当校验值出错时,从当前待读取的镜像分组内的另一个固件存储器中读取所要求读取数据的数据块;
发送单元,用于将所读取的各所要求读取数据的数据块组合后得到所要求读取的数据,并将组合得到的所要求读取的数据返回给主设备。
或者,读数据模块403包括
查找单元,用于查找数据与数据的数据块和存储数据的数据块镜像分组间对应关系,得到各存储有读命令所要求读取数据的数据块的镜像分组;
数据读取单元,用于分别将所查找得到的各镜像分组作为当前待读取的镜像分组,执行如下操作从当前待读取的镜像分组内的一个固件存储器中读取所要求读取数据的数据块,并从未被分到镜像分组内的固件存储器中读取数据块的校验值,根据校验值验证数据块是否出错,当校验值出错时,从当前待读取的镜像分组内的另一个固件存储器中读取所要求读取数据的数据块;
发送单元,用于将所读取的各所要求读取数据的数据块组合后得到所要求读取的数据,并将组合得到的所要求读取的数据返回给主设备。
参见图8,本发明实施例中,RAIF控制器还包括
接收模块404,用于接收固件存储器硬件接口发送的中断请求;
固件存储器添加模块405,用于当中断请求指示有新的固件存储器接入RAIF控制器时,判断自身是否能够识别新接入的固件存储器,并在能够识别新接入的固件存储器时, 将新接入的固件存储器加入冗余独立闪存阵列中;
固件存储器移除模块406,用于当中断请求指示有固件存储器从RAIF控制器中拔除时,RAIF控制器将所拔除的固件存储器从冗余独立闪存阵列中移除。
本发明技术方案中,RAIF控制器将与其相连的N个固件存储器构建成冗余独立闪存阵列,并在写数据时,将数据同时写入到冗余独立闪存阵列中镜像分组内的两个固件存储器中,这样,在读取数据时,一旦发现从镜像分组内的一个固件存储器中所读取的数据错误时,就可以从该竞相分组中的另外一个固件存储器中读取数据,以实现数据的备份,保证数据的完整性和安全性。
另外,RAIF控制器在将数据到冗余独立闪存阵列时,将该数据对应的校验值也写入到冗余独立闪存阵列中,该校验值用于校验所读取的数据是否出错,根据该校验和可以更进一步地保证RAIF控制器在读取数据时的正确性。
再者,RAIF控制器还可以将数据进行分块后并行的写入到冗余独立闪存阵列的各镜像分组内的固件存储器中,这样,在RAIF读取数据时,便可以同时从多个镜像分组中同时读取数据的各个数据块,并将所读取的数据块组合还原为数据,以提升数据读取的速度。
实施例4
参见图9,一种固件存储系统,该固件存储系统具体包括主设备501、RAIF(Redundant Array of Independent Flash Memories,冗余独立闪存阵列)控制器502 及固件存储器601、固件存储602、……、固件存储器60N共N个固件存储器,该N个固件存储器分别通过RAIF控制器502与主设备501相连,其中,N为大于等于2的整数。
本发明实施例中,RAIF控制器502,用于将与自身相连的N个固件存储器进行分组,构成冗余独立闪存阵列,其中,冗余独立闪存阵列至少包含一个镜像分组,镜像分组内包括互为镜像的两个固件存储器;
主设备501,用于向RAIF控制器502发送写命令或者读命令;
RAIF控制器502,还用于当接收到主设备501发送的写命令时,将写命令携带的数据写入冗余独立闪存阵列中镜像分组内的两个固件存储器中。
RAIF控制器502,还用于当接收到主设备501发送的读命令时,从冗余独立闪存阵列中镜像分组内的一个固件存储器中读取读命令所要求读取的数据,当所读取的数据出错时,从镜像分组内的另一个固件存储器中读取读命令所要求读取的数据。
RAIF控制器502,还用于将读取的数据返回给主设备501。
其中,主设备501具体可以是CPU (Central Processor Unit,中央处理器单元)芯片、ICH(Input/Output Controller Hub,南桥)芯片或者单片机等需要对固件进行读写操作的芯片器件。
RAIF 控制器 502 具体可以是 FPGA (Field-Programmable Gate Array,现场可编程门阵列)控制器,RAID (Redundant Array of Independent Disks,冗余独立磁盘阵列) 控制器、CPLD (Complex Programmable Logic Device,复杂可编程逻辑器件)控制器或者 ASIC (Application Specific Integrated Circuit,特定应用集成电路)控制器等芯片器件,其具体结构和实施例3中所述的RAIF控制器相同,此处就不在赘述。
固件存储器具体可以是SD (Secure Digital Card,安全数字卡)卡、CF (Compact Flash,紧凑型闪存)卡、MS (Memory Mick,记忆棒)卡、XD (XD-PICTURE CARD)卡、TF (Trans FLash)卡、U盘或者NOR Flash芯片等固件存储器。
本发明技术方案中,RAIF控制器将与其相连的N个固件存储器构建成冗余独立闪存阵列,并在写数据时,将数据同时写入到冗余独立闪存阵列中镜像分组内的两个固件存储器中,这样,在读取数据时,一旦发现从镜像分组内的一个固件存储器中所读取的数据错误时,就可以从该竞相分组中的另外一个固件存储器中读取数据,以实现数据的备份,保证数据的完整性和安全性。
另外,RAIF控制器在将数据到冗余独立闪存阵列时,将该数据对应的校验值也写入到冗余独立闪存阵列中,该校验值用于校验所读取的数据是否出错,根据该校验和可以更进一步地保证RAIF控制器在读取数据时的正确性。
再者,RAIF控制器还可以将数据进行分块后并行的写入到冗余独立闪存阵列的各镜像分组内的固件存储器中,这样,在RAIF读取数据时,便可以同时从多个镜像分组中同时读取数据的各个数据块,并将所读取的数据块组合还原为数据,以提升数据读取的速度。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种固件存储系统中数据保护的方法,其特征在于,所述方法包括冗余独立闪存阵列RAIF控制器将与自身相连的N个固件存储器进行分组,构成冗余独立闪存阵列,所述冗余独立闪存阵列至少包含一个镜像分组,所述镜像分组内包括互为镜像的两个固件存储器,其中,N为大于等于2的整数;当所述RAIF控制器接收到主设备发送的写命令时,将所述写命令携带的数据写入所述冗余独立闪存阵列中镜像分组内的两个固件存储器中;当所述RAIF控制器接收到主设备发送的读命令时,从所述冗余独立闪存阵列中镜像分组内的一个固件存储器中读取所述读命令所要求读取的数据,当所读取的数据出错时, 从所述镜像分组内的另一个固件存储器中读取所述读命令所要求读取的数据。
2.根据权利要求1所述的方法,其特征在于,当N为大于等于2的偶数时,所述将所述写命令携带的数据写入到所述冗余独立闪存阵列中镜像分组内的两个固件存储器中包括将所述写命令携带的数据分成M个数据块,其中,M为大于等于1的整数;分别将所述M个数据块作为当前待写入的数据块,执行如下操作从所述冗余独立闪存阵列中选择一镜像分组,并将所述当前待写入的数据块同时写入所选择的镜像分组内的两个固件存储器;记录并保存数据与所述数据的数据块和存储所述数据的数据块镜像分组间对应关系。
3.根据权利要求1所述的方法,其特征在于,当N为大于等于2的偶数时,所述将所述写命令携带的数据写入到所述冗余独立闪存阵列中镜像分组内的两个固件存储器中包括将所述写命令携带的数据分成M个数据块,并分别计算所述M个数据块的校验值,其中,M为大于等于1的整数;分别将所述M个数据块作为当前待写入的数据块,执行如下操作从所述冗余独立闪存阵列中选择一镜像分组,并将所述当前待写入的数据块和所述当前待写入的数据块的校验值同时写入所选择的镜像分组内的两个固件存储器;记录并保存数据与所述数据的数据块和存储所述数据的数据块镜像分组间对应关系。
4.根据权利要求1所述的方法,其特征在于,当N为大于等于2的奇数时,所述将所述写命令携带的数据写入到所述冗余独立闪存阵列中镜像分组内的两个固件存储器中包括将所述写命令携带的数据分成M个数据块,并分别计算所述M个数据块的校验值,其中,M为大于等于1的整数;分别将所述M个数据块作为当前待写入的数据块,执行如下操作从所述冗余独立闪存阵列中选择一镜像分组,并将所述当前待写入的数据块同时写入所选择的镜像分组内的两个固件存储器,且将所述当前待写入的数据块的校验值写入未被分到镜像分组内的固件存储器;记录并保存数据与所述数据的数据块和存储所述数据的数据块镜像分组间对应关系。
5.根据权利要求2所述的方法,其特征在于,所述从所述冗余独立闪存阵列中镜像分组内的一个固件存储器中读取所述读命令所要求读取的数据,且当所读取的数据出错时, 从所述镜像分组内的另一个固件存储器中读取所述读命令所要求读取的数据包括查找所述数据与所述数据的数据块和存储所述数据的数据块镜像分组间对应关系,得到各存储有所述读命令所要求读取数据的数据块的镜像分组;分别将所查找得到的各镜像分组作为当前待读取的镜像分组,执行如下操作从当前待读取的镜像分组内的一个固件存储器中读取所要求读取数据的数据块,确定读取过程是否出现读取故障,当出现读取故障时,从所述当前待读取的镜像分组内的另一个固件存储器中读取所要求读取数据的数据块;将所读取的各所要求读取数据的数据块组合后得到所要求读取的数据,并将组合得到的所要求读取的数据返回给所述主设备。
6.根据权利要求3所述的方法,其特征在于,所述从所述冗余独立闪存阵列中镜像分组内的一个固件存储器中读取所述读命令所要求读取的数据,且当所读取的数据出错时, 从所述镜像分组内的另一个固件存储器中读取所述读命令所要求读取的数据包括查找所述数据与所述数据的数据块和存储所述数据的数据块镜像分组间对应关系,得到各存储有所述读命令所要求读取数据的数据块的镜像分组;分别将所查找得到的各镜像分组作为当前待读取的镜像分组,执行如下操作从当前待读取的镜像分组内的一个固件存储器中读取所要求读取数据的数据块及所述数据块对应的校验值,并根据所述校验值验证所述数据块是否出错,当所述校验值出错时,从所述当前待读取的镜像分组内的另一个固件存储器中读取所要求读取数据的数据块;将所读取的各所要求读取数据的数据块组合后得到所要求读取的数据,并将组合得到的所要求读取的数据返回给所述主设备。
7.根据权利要求4所述的方法,其特征在于,所述从所述冗余独立闪存阵列中镜像分组内的一个固件存储器中读取所述读命令所要求读取的数据,且当所读取的数据出错时, 从所述镜像分组内的另一个固件存储器中读取所述读命令所要求读取的数据包括查找所述数据与所述数据的数据块和存储所述数据的数据块镜像分组间对应关系,得到各存储有所述读命令所要求读取数据的数据块的镜像分组;分别将所查找得到的各镜像分组作为当前待读取的镜像分组,执行如下操作从当前待读取的镜像分组内的一个固件存储器中读取所要求读取数据的数据块,并从所述未被分到镜像分组内的固件存储器中读取所述数据块的校验值,根据所述校验值验证所述数据块是否出错,当所述校验值出错时,从所述当前待读取的镜像分组内的另一个固件存储器中读取所要求读取数据的数据块;将所读取的各所要求读取数据的数据块组合后得到所要求读取的数据,并将组合得到的所要求读取的数据返回给所述主设备。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括 所述RAIF控制器接收固件存储器硬件接口发送的中断请求;当所述中断请求指示有新的固件存储器接入所述RAIF控制器时,所述RAIF控制器判断自身是否能够识别新接入的固件存储器,并在能够识别所述新接入的固件存储器时,将所述新接入的固件存储器加入所述冗余独立闪存阵列中;当所述中断请求指示有固件存储器从RAIF控制器中拔除时,所述RAIF控制器将所拔除的固件存储器从所述冗余独立闪存阵列中移除。
9.一种冗余独立闪存阵列RAIF控制器,其特征在于,所述RAIF控制器包括RAIF构建模块、写数据模块和读数据模块;所述RAIF构建模块,用于将与所述RAIF控制器相连的N个固件存储器进行分组,构成冗余独立闪存阵列,所述冗余独立闪存阵列至少包含一个镜像分组,所述镜像分组内包括互为镜像的两个固件存储器,其中,N为大于等于2的整数;所述写数据模块,用于当接收到主设备发送的写命令时,将所述写命令携带的数据写入所述冗余独立闪存阵列中镜像分组内的两个固件存储器中;所述读数据模块,用于当所述RAIF控制器接收到主设备发送的读命令时,从所述冗余独立闪存阵列中镜像分组内的一个固件存储器中读取所述读命令所要求读取的数据,当所读取的数据出错时,从所述镜像分组内的另一个固件存储器中读取所述读命令所要求读取的数据。
10.根据权利要求9所述的RAIF控制器,其特征在于,所述写数据模块包括数据分块单元,用于当N为大于等于2的偶数时,将所述写命令携带的数据分成M个数据块,其中,M为大于等于1的整数;数据写入单元,用于分别将所述M个数据块作为当前待写入的数据块,执行如下操作 从所述冗余独立闪存阵列中选择一镜像分组,并将所述当前待写入的数据块同时写入所选择的镜像分组内的两个固件存储器;存储单元,用于记录并保存数据与所述数据的数据块和存储所述数据的数据块镜像分组间对应关系。
11.根据权利要求9所述的RAIF控制器,其特征在于,所述写数据模块包括数据分块单元,用于当N为大于等于2的偶数时,将所述写命令携带的数据分成M个数据块,并分别计算所述M个数据块的校验值,其中,M为大于等于1的整数;数据写入单元,用于分别将所述M个数据块作为当前待写入的数据块,执行如下操作 从所述冗余独立闪存阵列中选择一镜像分组,并将所述当前待写入的数据块和所述当前待写入的数据块的校验值同时写入所选择的镜像分组内的两个固件存储器;存储单元,用于记录并保存数据与所述数据的数据块和存储所述数据的数据块镜像分组间对应关系。
12.根据权利要求9所述的RAIF控制器,其特征在于,所述写数据模块包括数据分块单元,用于当N为大于等于2的奇数时,将所述写命令携带的数据分成M个数据块,并分别计算所述M个数据块的校验值,其中,M为大于等于1的整数;数据写入单元,用于分别将所述M个数据块作为当前待写入的数据块,执行如下操作 从所述冗余独立闪存阵列中选择一镜像分组,并将所述当前待写入的数据块同时写入所选择的镜像分组内的两个固件存储器,且将所述当前待写入的数据块的校验值写入未被分到镜像分组内的固件存储器;存储单元,用于记录并保存数据与所述数据的数据块和存储所述数据的数据块镜像分组间对应关系。
13.根据权利要求10所述的RAIF控制器,其特征在于,所述读数据模块包括查找单元,用于查找所述数据与所述数据的数据块和存储所述数据的数据块镜像分组间对应关系,得到各存储有所述读命令所要求读取数据的数据块的镜像分组;数据读取单元,用于分别将所查找得到的各镜像分组作为当前待读取的镜像分组,执行如下操作从当前待读取的镜像分组内的一个固件存储器中读取所要求读取数据的数据块,确定读取过程是否出现读取故障,当出现读取故障时,从所述当前待读取的镜像分组内的另一个固件存储器中读取所要求读取数据的数据块;发送单元,用于将所读取的各所要求读取数据的数据块组合后得到所要求读取的数据,并将组合得到的所要求读取的数据返回给所述主设备。
14.根据权利要求11所述的RAIF控制器,其特征在于,所述读数据模块包括查找单元,用于查找所述数据与所述数据的数据块和存储所述数据的数据块镜像分组间对应关系,得到各存储有所述读命令所要求读取数据的数据块的镜像分组;数据读取单元,用于分别将所查找得到的各镜像分组作为当前待读取的镜像分组,执行如下操作从当前待读取的镜像分组内的一个固件存储器中读取所要求读取数据的数据块及所述数据块对应的校验值,并根据所述校验值验证所述数据块是否出错,当所述校验值出错时,从所述当前待读取的镜像分组内的另一个固件存储器中读取所要求读取数据的数据块;发送单元,用于将所读取的各所要求读取数据的数据块组合后得到所要求读取的数据,并将组合得到的所要求读取的数据返回给所述主设备。
15.根据权利要求12所述的RAIF控制器,其特征在于,所述读数据模块包括查找单元,用于查找所述数据与所述数据的数据块和存储所述数据的数据块镜像分组间对应关系,得到各存储有所述读命令所要求读取数据的数据块的镜像分组;数据读取单元,用于分别将所查找得到的各镜像分组作为当前待读取的镜像分组,执行如下操作从当前待读取的镜像分组内的一个固件存储器中读取所要求读取数据的数据块,并从未被分到镜像分组内的固件存储器中读取所述数据块的校验值,根据所述校验值验证所述数据块是否出错,当所述校验值出错时,从所述当前待读取的镜像分组内的另一个固件存储器中读取所要求读取数据的数据块;发送单元,用于将所读取的各所要求读取数据的数据块组合后得到所要求读取的数据,并将组合得到的所要求读取的数据返回给所述主设备。
16.根据权利要求9所述的RAIF控制器,其特征在于,所述RAIF控制器还包括接收模块,用于接收固件存储器硬件接口发送的中断请求;固件存储器添加模块,用于当所述中断请求指示有新的固件存储器接入所述RAIF控制器时,判断自身是否能够识别新接入的固件存储器,并在能够识别所述新接入的固件存储器时,将所述新接入的固件存储器加入所述冗余独立闪存阵列中;固件存储器移除模块,用于当所述中断请求指示有固件存储器从RAIF控制器中拔除时,所述RAIF控制器将所拔除的固件存储器从所述冗余独立闪存阵列中移除。
17.一种固件存储系统,其特征在于,所述系统包括主设备、冗余独立闪存阵列RAIF 控制器及N个固件存储器,所述N个固件存储器分别通过所述RAIF控制器与所述主设备相连,其中,N为大于等于2的整数;所述RAIF控制器,用于将与自身相连的N个固件存储器进行分组,构成冗余独立闪存阵列,所述冗余独立闪存阵列至少包含一个镜像分组,所述镜像分组内包括互为镜像的两个固件存储器;所述主设备,用于向所述RAIF控制器发送写命令或者读命令;所述RAIF控制器,还用于当接收到主设备发送的写命令时,将所述写命令携带的数据写入所述冗余独立闪存阵列中镜像分组内的两个固件存储器中。所述RAIF控制器,还用于当接收到主设备发送的读命令时,从所述冗余独立闪存阵列中镜像分组内的一个固件存储器中读取所述读命令所要求读取的数据,当所读取的数据出错时,从所述镜像分组内的另一个固件存储器中读取所述读命令所要求读取的数据。 所述RAIF控制器,还用于将读取的数据返回给所述主设备。
全文摘要
本发明实施例提供了一种固件存储系统中数据保护的方法、设备及系统,涉及信息安全领域,方法包括冗余独立闪存阵列RAIF控制器将与自身相连的N个固件存储器进行分组,构成冗余独立闪存阵列;当RAIF控制器接收到主设备发送的写命令时,将写命令携带的数据写入冗余独立闪存阵列中镜像分组内的两个固件存储器中;当RAIF控制器接收到主设备发送的读命令时,从冗余独立闪存阵列中镜像分组内的一个固件存储器中读取读命令所要求读取的数据,且当所读取的数据出错时,从镜像分组内的另一个固件存储器中读取读命令所要求读取的数据。本技术方案保证了固件数据完整性和准确性。
文档编号G06F3/06GK102541469SQ20111041498
公开日2012年7月4日 申请日期2011年12月13日 优先权日2011年12月13日
发明者周超 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1