CN110764704A - 一种环境变量写入方法、存储介质及电子装置 - Google Patents
一种环境变量写入方法、存储介质及电子装置 Download PDFInfo
- Publication number
- CN110764704A CN110764704A CN201910996254.6A CN201910996254A CN110764704A CN 110764704 A CN110764704 A CN 110764704A CN 201910996254 A CN201910996254 A CN 201910996254A CN 110764704 A CN110764704 A CN 110764704A
- Authority
- CN
- China
- Prior art keywords
- environment variable
- checksum
- storage area
- writing
- area
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1068—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1469—Backup restoration techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明提供了一种环境变量写入方法、存储介质及电子装置,方法包括在存储区的第一空闲空间的容量大于或等于待写入的第一环境变量所需要占用的第一空间的情况下,将第一环境变量写入存储区,在第一空闲空间的容量小于第一空间的情况下,删除第二环境变量,第二环境变量为存储区中已存储的无效的环境变量,将第一环境变量写入删除了第二环境变量的存储区,通过本发明,可以在存储区写满内容后再进行擦除,不需要每次写入操作都对存储单元进行擦操作,解决了相关技术中写入环境变量效率低下的问题,从而大大加快环境变量的写入速度,提高了写入效率,并且大幅减慢存储单元的磨损速度。
Description
技术领域
本发明涉及通信领域,具体而言,涉及一种环境变量写入方法、存储介质及电子装置。
背景技术
在嵌入式系统中,Bootloader环境变量主要用来存取嵌入式设备的启动参数、设备名称、序列号、MAC地址等信息。Bootloader环境变量存储在NVM非易失性存储器中,一般为FLASH闪存。
目前,最为常用的嵌入式Bootloader是u-boot。u-boot存取环境变量的方法是在FLASH中划出一小段空间作为环境变量存储空间,记作bootenv分区,bootenv分区首地址存放环境变量的校验和(CRC32)与环境变量具体内容,环境变量内容以key1=value1\x00、key2=value2\x00……keyN=valueN\x00\x00格式存储(\x00为C语言字符串结束符)。当写入环境变量时,u-boot先读取bootenv分区中的原有数据,在内存进行修改,重新计算校验和,再将bootenv分区整体擦除,最后将内存中新的数据写回FLASH,总共经历读FLASH、内存修改、计算校验和、擦FLASH、写FLASH五个步骤。依据FLASH物理特性可知上述五个步骤中擦FLASH操作的速度最慢,读写FLASH次之,且擦FLASH引起FLASH磨损的主要原因。通常FLASH的擦写寿命在数千到数万次不等,u-boot上述存取方法在频繁读写环境变量的工况下不仅效率低下,而且极易造成FLASH寿命大幅降低。另外,如果在环境变量写入或擦除操作过程中出现断电等异常情况,会造成环境变量数据丢失,从而导致系统运行异常。
针对相关技术中写入环境变量效率低下的问题尚不存在解决方案。
发明内容
本发明实施例提供了一种环境变量写入方法、存储介质及电子装置,以至少解决相关技术中写入环境变量效率低下的问题。
根据本发明的一个实施例,提供了一种环境变量写入方法,包括:在存储区的第一空闲空间的容量大于或等于待写入的第一环境变量所需要占用的第一空间的情况下,将所述第一环境变量写入所述存储区;
在所述第一空闲空间的容量小于所述第一空间的情况下,删除第二环境变量,以使所述存储区的第一空闲空间的容量大于或等于所述第一空间,其中,所述第二环境变量为所述存储区中已存储的无效的环境变量;将所述第一环境变量写入删除了所述第二环境变量的所述存储区。
可选地,删除所述第二环境变量,包括:
将所述存储区中所存储的第三环境变量读出到内存中,并删除读出的所述第三环境变量中的所述第二环境变量,其中,所述第三环境变量为所述存储区中所存储的全部或部分环境变量;
擦除所述存储区中所述第三环境变量所占用的第二空间,并将删除了所述第二环境变量的所述第三环境变量写入所述存储区。
可选地,删除所述第二环境变量,还包括:
根据已存储的环境变量的第一状态标识删除所述第二环境变量,其中,所述第一状态标识用于指示无效的环境变量。
可选地,将所述第一环境变量写入所述存储区之后,所述方法还包括:
对写入所述第一环境变量之前所述存储区中已存储的全部或部分环境变量标记所述第一状态标识。
可选地,所述方法还包括:
在所述存储区的第二空闲空间的容量大于或等于写入所述第一环境变量之后的环境变量数据所对应的第一校验和所需要占用的第三空间的情况下,在写入所述第一变量之后,将所述第一校验和写入所述存储区;
在所述第二空闲空间的容量小于所述第二空间情况下,删除第二校验和,以使所述第二空闲空间的容量大于或等于所述第三空间,其中所述第二校验和是所述存储区中已存储的无效的校验和;在写入所述第一变量之后,将所述第一校验和写入删除了所述第二校验和的所述存储区。
可选地,将所述第一校验和写入所述存储区,包括:
将所述第一校验和写入校验和区中的空闲的记录项,其中,所述存储区中配置有用于存储校验和的所述校验和区,所述校验和区中配置有多个记录项,一个所述记录项用于存储一个校验和。
可选地,所述第二空闲空间的容量小于所述第二空间情况下,删除第二校验和,以使所述第二空闲空间的容量大于或等于所述第三空间,包括:
在所述校验和区中不存在空闲的所述记录项的情况下,擦除所述校验和区中已存储的全部或部分非空闲的记录项,以使所述校验和区中存在空闲的记录项。
可选地,删除第二校验和,还包括:根据所述存储区中已存储的记录项的第二状态标识删除所述第二校验和,其中,所述第二状态标识用于指示非空闲的记录项。
可选地,在将所述第一校验和写入所述存储区之后,所述方法还包括:对写入所述第一校验和之前的所述校验和区中已存储的全部或部分记录项标记所述第二状态标识。
可选地,所述校验和区中设置的所述记录项的个数M满足以下条件:
M=C/(C1+L),其中,C为所述存储区的容量,C1为一个所述记录项的容量,L为向所述存储区写入一次环境变量所平均占用的字节的预估值。
可选地,所述方法还包括:
在所述存储区中的数据更新之后,备份所述存储区中的所述数据,得到备份数据;
在所述数据异常时,根据所述备份数据恢复所述数据。
可选地,在所述数据异常时,根据所述备份数据恢复所述数据,包括:
在环境变量初始化时,计算所述存储区中所存储的环境变量的校验和,并将计算得到的所述校验和与所述备份数据中的备份校验和进行对比;
当所述校验和与所述备份校验和不同时,确定所述数据异常,将所述备份数据覆盖到所述存储区中。
根据本发明的另一个实施例,还提供了一种计算机可读取的存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本发明实施例,由于可以在存储区写满内容后再进行擦除以释放空间,不需要每次写入操作都对存储单元进行擦操作,因此,可以解决相关技术中写入环境变量效率低下的问题,从而大大加快环境变量的写入速度,提高了写入效率,并且大幅减慢存储单元的磨损速度。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的环境变量写入方法的流程图;
图2是根据本发明实施例的环境变量写入装置的结构框图;
图3是相关技术中FLASH的Page结构示意图;
图4是根据本发明可选实施例的环境变量分区的结构示意图;
图5是根据本发明可选实施例环境变量分区和环境变量备份分区的结构示意图;
图6是根据本发明可选实施例的校验和区的结构示意图;
图7是根据本发明可选实施例的数据区的结构示意图;
图8是根据本发明可选实施例的环境变量分区初始化的流程图;
图9是根据本发明可选实施例的环境变量读取操作的流程图;
图10是根据本发明可选实施例的环境变量的写入操作的流程图;
图11是根据本发明可选实施例的环境变量写入前的预备操作的流程图;
图12是根据本发明可选实施例的环境变量的删除操作的流程图;
图13是根据本发明可选实施例的M值预测模块的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
实施例1
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。图1是根据本发明实施例的环境变量写入方法的流程图,如图1所示,根据本发明的一个实施例,提供了一种环境变量写入方法,包括:
步骤S101,在存储区的第一空闲空间的容量大于或等于待写入的第一环境变量所需要占用的第一空间的情况下,将第一环境变量写入存储区;
步骤S103,在第一空闲空间的容量小于第一空间的情况下,删除第二环境变量,以使存储区的第一空闲空间的容量大于或等于第一空间,其中,第二环境变量为存储区中已存储的无效的环境变量;
步骤S105,将第一环境变量写入删除了第二环境变量的存储区。
通过本发明实施例,由于可以在存储区写满内容后再进行擦除以释放空间,不需要每次写入操作都对存储单元进行擦操作,因此,可以解决相关技术中写入环境变量效率低下的问题,从而大大加快环境变量的写入速度,提高了写入效率,并且大幅减慢存储单元的磨损速度。
需要说明的是,本发明实施例中的“第一空闲空间”可以是存储区中的空闲空间,也可以是存储区中专门用于存储环境变量的分区中的空闲空间。
需要说明的是,将第一环境变量写入存储区之前,可以判断待写入的第一环境变量与存储区中已存储的环境变量是否相同,在第一环境变量与存储区中已存储的某个或者某些环境变量相同的条件下,可以放弃写入第一环境变量。当然,也可以不执行该判断的过程,不管存储区中已存储的环境变量是否与待写入的第一环境变量相同,只要满足上述的条件,即存储区的第一空闲空间的容量大于或等于待写入的第一环境变量所需要占用的第一空间,则可以直接将第一环境变量写入存储区。
需要说明的是,可以通过以下方法确定删除了第二环境变量的存储区的第一空闲空间的容量是否大于或等于第一空间:读取存储区中已存储的数据,该数据中包括了环境变量,也可以包括其他内容;将该数据中的第二环境变量删除,在删除了第二环境变量之后,将第一环境变量写入该数据中,判断该数据的大小是否超出了存储区的容量,在数据未超出存储区的容量的条件下,确定存储区中的第一空闲空间的容量大于或等于第一空间。
在一个可选的实施方式中,删除第二环境变量,包括:
将存储区中所存储的第三环境变量读出到内存中,并删除读出的第三环境变量中的第二环境变量,其中,第三环境变量为存储区中所存储的全部或部分环境变量;
擦除存储区中第三环境变量所占用的第二空间,并将删除了第二环境变量的第三环境变量写入存储区。
需要说明的是,在一个可选的实施方式中,将第一环境变量写入删除了第二环境变量的存储区可以表现为:将第一环境变量写入删除了第二环境变量之后的第三环境变量数据中,然后将被修改后的第三环境变量数据写入存储区,其中,被修改后的第三环境变量数据已经不包含第二环境变量,但包含了第一环境变量。
在一个可选的实施方式中,删除第二环境变量,还包括:
根据已存储的环境变量的第一状态标识删除第二环境变量,其中,第一状态标识用于指示无效的环境变量。
在一个可选的实施方式中,将第一环境变量写入存储区之后,方法还包括:对写入第一环境变量之前存储区中已存储的全部或部分环境变量标记第一状态标识。
例如,可以将写入第一环境变量之前存储区中已存储的与该第一环境变量同名的环境变量标记第一状态标识,例如标记为“已删除”,或者,标记为“无效”,又或者,标记为“重复”等。这些标识都可以表示被标记的环境变量是无效的或者说无用的。另外,还可以将该被标记了第一状态标识的环境变量全部清零,以满足数据的机密性要求。
在一个实施方式中,在将第一环境变量写入存储区之前,本发明实施例的方法还包括:对第一环境变量进行加密,以满足数据机密性要求。
在一个可选的实施方式中,方法还包括:
在存储区的第二空闲空间的容量大于或等于写入第一环境变量之后的环境变量数据所对应的第一校验和所需要占用的第三空间的情况下,在写入第一变量之后,将第一校验和写入存储区;
在第二空闲空间的容量小于第二空间情况下,删除第二校验和,以使第二空闲空间的容量大于或等于第三空间,其中第二校验和是存储区中已存储的无效的校验和;在写入第一变量之后,将第一校验和写入删除了第二校验和的存储区。
需要说明的是,存储区中可以包括用于存储环境变量的数据区和用于存储校验和的校验和区,其中,第一空闲空间可以是数据区中的空闲空间,第二空闲空间可以是校验和区中的空闲空间。
在一个可选的实施方式中,将第一校验和写入存储区,包括:
将第一校验和写入校验和区中的空闲的记录项,其中,存储区中配置有用于存储校验和的校验和区,校验和区中配置有多个记录项,一个记录项用于存储一个校验和。
在一个可选的实施方式中,将第一校验和写入删除了第二校验和的存储区,包括:
将第一校验和写入删除了第二校验和的校验和区中的空闲的记录项,其中,存储区中配置有用于存储校验和的校验和区,校验和区中配置有多个记录项,一个记录项用于存储一个校验和。
在一个可选的实施方式中,第二空闲空间的容量小于第二空间情况下,删除第二校验和,以使第二空闲空间的容量大于或等于第三空间,包括:
在校验和区中不存在空闲的记录项的情况下,擦除校验和区中已存储的全部或部分非空闲的记录项,以使校验和区中存在空闲的记录项。
在一个可选的实施方式中,删除第二校验和,还包括:根据存储区中已存储的记录项的第二状态标识删除第二校验和,其中,第二状态标识用于指示非空闲的记录项。
在一个可选的实施方式中,在将第一校验和写入存储区之后,方法还包括:对写入第一校验和之前的校验和区中已存储的全部或部分记录项标记第二状态标识。
需要说明的是,在本发明实施例中,被标记为非空闲的记录项(即被标记了第二状态标识的记录项)可以指示该记录项中的校验和是无效的。
在一个可选的实施方式中,校验和区中设置的记录项的个数M满足以下条件:
M=C/(C1+L),其中,C为存储区的容量,C1为一个记录项的容量,L为向存储区写入一次环境变量所平均占用的字节的预估值。
需要说明的是,也可以根据第一空闲空间与第二空闲空间的当前比值以及历史比值调整记录项的数量。
在一个可选的实施方式中,方法还包括:
在存储区中的数据更新之后,备份存储区中的数据,得到备份数据;
在数据异常时,根据备份数据恢复数据。
在一个可选的实施方式中,在数据异常时,根据备份数据恢复数据,包括:
在环境变量初始化时,计算存储区中所存储的环境变量的校验和,并将计算得到的校验和与备份数据中的备份校验和进行对比;
当校验和与备份校验和不同时,确定数据异常,将备份数据覆盖到存储区中。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。
在本实施例中还提供了一种环境变量写入装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图2是根据本发明实施例的环境变量写入装置的结构框图,如图2所示,该装置包括:
第一写入模块22,用于在存储区的第一空闲空间的容量大于或等于待写入的第一环境变量所需要占用的第一空间的情况下,将第一环境变量写入存储区;
第一删除模块24,用于在第一空闲空间的容量小于第一空间的情况下,删除第二环境变量,以使存储区的第一空闲空间的容量大于或等于第一空间,其中,第二环境变量为存储区中已存储的无效的环境变量;
第二写入模块26,用于将第一环境变量写入删除了第二环境变量的存储区。
通过本发明实施例,由于可以在存储区写满内容后再进行擦除,不需要每次写入操作都对存储单元进行擦操作,因此,可以解决相关技术中写入环境变量效率低下的问题,从而大大加快环境变量的写入速度,提高了写入效率,并且大幅减慢存储单元的磨损速度。
在一个可选的实施方式中,第一删除模块24,包括:
第一删除子模块,用于将存储区中所存储的第三环境变量读出到内存中,并删除读出的第三环境变量中的第二环境变量,其中,第三环境变量为存储区中所存储的全部或部分环境变量;
第二删除子模块,用于擦除存储区中第三环境变量所占用的第二空间,并将删除了第二环境变量的第三环境变量写入存储区。
在一个可选的实施方式中,该装置还包括:
第三写入模块,用于在存储区的第二空闲空间的容量大于或等于写入第一环境变量之后的环境变量数据所对应的第一校验和所需要占用的第三空间的情况下,在写入第一变量之后,将第一校验和写入存储区;
第二删除模块,用于在第二空闲空间的容量小于第二空间情况下,删除第二校验和,以使第二空闲空间的容量大于或等于第三空间,其中第二校验和是存储区中已存储的无效的校验和;
第四写入模块,在写入第一变量之后,将第一校验和写入删除了第二校验和的存储区。
在一个可选的实施方式中,第三写入模块,包括:
第一写入子模块,用于将第一校验和写入校验和区中的空闲的记录项,其中,存储区中配置有用于存储校验和的校验和区,校验和区中配置有多个记录项,一个记录项用于存储一个校验和。
在一个可选的实施方式中,第四写入模块,包括:
第二写入子模块,用于将第一校验和写入删除了第二校验和的校验和区中的空闲的记录项,其中,存储区中配置有用于存储校验和的校验和区,校验和区中配置有多个记录项,一个记录项用于存储一个校验和。
在一个可选的实施方式中,第二删除模块,包括:
擦除模块,用于在校验和区中不存在空闲的记录项的情况下,擦除校验和区中已存储的全部或部分非空闲的记录项,以使校验和区中存在空闲的记录项。
在一个可选的实施方式中,该装置还包括:
备份模块,用于在存储区中的数据更新之后,备份存储区中的数据,得到备份数据;
恢复模块,用于在数据异常时,根据备份数据恢复数据。
在一个可选的实施方式中,恢复模块,包括:
对比模块,用于在环境变量初始化时,计算存储区中所存储的环境变量的校验和,并将计算得到的校验和与备份数据中的备份校验和进行对比;
覆盖模块,用于当校验和与备份校验和不同时,确定数据异常,将备份数据覆盖到存储区中。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
以下结合具体场景对本发明实施例进一步说明:
本发明实施例主要涉及数据存储、Bootloader、FLASH闪存技术领域,尤其涉及嵌入式Bootloader、环境变量存储等技术。本发明实施例要解决的问题是实现一种Bootloader环境变量的优化存储方法,可以达到以下技术效果:
1.可以提升Bootloader环境变量的存取性能;
2.可以减慢FLASH存储单元的磨损速度;
3.可以提升断电等异常错误的容灾能力;
4.可以支持Bootloader环境变量的完整性检测和恢复能力;
5.可以支持记录二进制数据形式的环境变量。
为此,本发明实施例设计了一种增量式的Bootloader环境变量存储格式和操作方法,使得仅当环境变量分区写满后才进行擦除,不需要每次写入操作都进行擦操作,从而大大加快环境变量的写入速度,大幅减慢FLASH存储单元的磨损速度。
同时,在环境变量的写入过程中,在FLASH中增加环境变量的状态标记,通过状态标记识别环境变量的生命周期处于哪种状态,以便在环境变量写满后对废弃的环境变量占用的空间进行回收,且从断电等异常情况恢复后,能够通过环境变量的状态进行相应的修复动作,从而提高容灾能力。
此外,本发明实施例可以使用公开成熟的校验和算法,如CRC,对环境变量的完整性进行验证,从而实现完整性检测和自我恢复的能力。
在常规实践中,Bootloader环境变量分区开辟的存储空间通常有1~N个FLASH擦除块,总容量为几十KB~几百KB,而实际环境变量使用到的空间,一般仅几百字节到几KB字节,每一条环境变量的的长度平均约几十个字节,大大小于环境变量分区总容量。常规环境变量的存取方式,实际上会造成环境变量只存放在从环境变量分区起始地址开始的一小段空间内,在此之上的空间全部浪费。
如图3所示,FLASH由多个擦除块(block/sector)构成,每个block/sector又由多个编程块page组成,擦除操作的最小单位为1个擦除块block/sector,编程最小单位是1个编程块page,page的结构如下图所示,擦除操作只能将FLASH中的存储单元从0修改到1,编程操作只能将存储单元从1修改为0。通常FLASH的写操作是page对齐的,即当对某个page进行整体编程,但实际FLASH对同一个page是可以多次编程的,只是编程只能将page中那些值为1的bit编程为0,而已经为0的bit则无法编程为1。
这里举个例子讲解对同一个page重复编程的原理,假设一个page 256字节(1024bits):
第一步:对FLASH执行擦除操作,则page中的所有1024个bit位全部置1。
第二步:在内存中构造一个256字节全为0xFF的buffer,将buffer第一个字节的bit0修改为0,再调用FLASH驱动进行page编程,则对应page中的bit0将编程为0,其余bits保持1。
第三步:在第二步的基础上,重新在内存中构造一个256字节全为0xFF的buffer,再调用FLASH驱动对第二步中同一个page进行编程,则对应page中的bit0还是0,不会被改为1,其余bits保持1。
第四步:在第二步的基础上,重新在内存中构造一个256字节全为0xFF的buffer,将buffer第一个字节的bit1修改为0,再调用FLASH驱动对第二步中同一个page进行编程,则对应page中的bit1被编程为0,bit0保持0,其余bits保持1。
在本发明实施例中,利用FLASH存储器只能以擦除块大小进行擦除操作,但写操作能够分多次对同一个编程块(page,写操作的最小单位)内的不同byte/bit位进行编程的能力,设计一套增量式+环形缓冲式的数据记录结构,当进行环境变量写时,先在环境变量尾部找到一片足够长的空闲空间(本发明实施例中的空闲空间指FLASH擦除后形成的一片连续的0xFF空间),再将新的环境变量写入其中,如找不到足够的空闲空间,则将环境变量分区中的环境变量全部读入内存并备份到FLASH环境变量备份区,然后对内存中的环境变量进行整理,通过状态标记识别出那些生命周期结束的环境变量(被删除或有环境变量写入新的值,则老的值占用的空间回收)并剔除,最后将新的环境变量连同整理好的环境变量一起写入环境变量分区。
本发明实施例的数据结构设计如下:
如图4所示,为实现完整性验证和自动恢复能力,将环境变量分区又划分成两个子区域,分别为校验和区与数据区。
进一步的,如图5所示,本发明实施例在FLASH上分配两段大小相同的环境变量分区,分区大小为1~N个擦除块大小,分别作为环境变量主分区和环境变量备份分区。
环境变量主分区用来存放环境变量信息,读写环境变量操作针对环境变量主分区进行。环境变量备份分区是环境变量主分区的镜像备份,当环境变量主分区内容更新时,Bootloader将自动备份主分区最新的数据到备份分区,备份分区的存储格式与主分区完全一致。
如图6所示,校验和区存放数据区的校验和值,本发明实施例采用CRC作为一种较优的计算方法,但不限于此。在环境变量初始化时,Bootloader计算数据区的校验和与校验和区记录的对应校验值进行对比,如果相同,则继续下一步操作,如果不同,则判定环境变量分区数据被破坏,则从备份分区恢复。
需要说明的是,环境变量主分区与备份分区,校验和区和数据区可存放在FLASH的任意位置,无依赖关系,本发明实施例给出的一种较为常见的实现方案,将备份分区紧挨主分区后面放置,数据区紧挨校验和去后面放置,如图5所示。
从上述FLASH特性可知,为实现增量式写入,避免每次对数据区的写操作都必须先擦除校验和区,本发明实施例将校验和区划分成多个记录项,如图6所示,记录项个数为M,记录在校验和区头部。记录项由空闲标记位和校验和组成,记录项的索引范围为0~M-1。
当有新的数据写入数据区时,Bootloader重新计算数据区的校验和,再从0开始遍历校验和区的记录项,查找第一个空闲的记录项,如果找到,则将新的校验和写入记录项的校验和字段,并将该记录项标记为非空闲,如果未找到,则说明记录项已用完,则先执行环境变量分区擦除操作(包括校验和区与数据区),再将更新后的数据写入数据区,最后将数据区的校验和写入记录项0中并标记该项为非空闲。空闲标记除了空闲和非空闲标记外,其余均为无效标记,无效标记用于判定校验和区是否损坏或未初始化状态。
为实现增量式写入,避免每次写入数据区都必须先擦除,数据区的数据结构设计如图7所示:
一条环境变量由删除标记、长度以及环境变量内容组成。删除标记记录该变量是否已被删除。长度域表示该环境变量的长度,以便存储二进制数据时能够准确判断环境变量内容的长度,如果长度域所有bits全为1(FLASH擦除状态)规定为无效长度,该规定可便于查找空闲空间。环境变量的内容以“环境变量名=环境变量值”(“key=value”)的形式记录,如ip=192.168.1.1。
空闲空间的bits全为1,是环境变量分区擦除后但未被写过的空间。
在数据区在写入新数据时,在空闲空间足够的情况下,不进行擦除操作,一种较为简单的实现是:直接将新的环境变量写入到数据区空闲空间的起始位置,并重新计算校验和记录到校验和区,如果原数据区已经存在,则额外将原环境变量的删除标记位设置为已删除状态,当删除一个环境变量时,则直接标记该变量为删除状态。
以下结合具体场景举例说明环境变量分区如何初始化、读取、写入、删除、以及如何数据完整性检测与恢复。
图8是根据本发明可选实施例的环境变量分区初始化的流程图,如图8所示,初始化步骤:
步骤1:从索引0开始遍历主分区的校验和区的记录项,找到最近一次写入、删除操作产生的记录项,并读取其中的校验和字段,定位方法是先找到第一个空闲记录项,然后往前一个记录项即最近一次写入、删除操作产生的记录项。遍历过程中,对校验和区记录项的个数、记录项的标记位做合法性判断;
步骤2:如果记录项均合法且已找到最近一次记录项,则进入步骤3,否则用同样的方法判断备份分区的完整性,如果备份分区完整,则将备份分区覆盖到主分区,再进入步骤6,如果备份分区完整性也被破坏,则利用系统默认值进行恢复,再进入步骤6;
步骤3:计算主分区数据区的校验和;
步骤4:将步骤1记录项中的校验和与步骤3计算得到校验和进行对比,如果相同则进入步骤5,否则用同样的方法判断备份分区的完整性,如果备份分区完整,则将备份分区覆盖到主分区,再进入步骤6,如果备份分区完整性也被破坏,则利用系统默认值进行恢复,再进入步骤6;
步骤5:与相同的方法判定备份分区是否完整,如果完整则进入步骤6,否则先将主分区备份到备份分区,再进入步骤6;
步骤6:将数据区的数据读入内存,建立查找表,以便加快读取、写入、查找操作。
图9是根据本发明可选实施例的环境变量读取操作的流程图,如图9所示:
步骤1:首先从输入参数中获得需要读取的环境变量名(key);
步骤2:获取数据区的起始地址,利用环境变量的长度累加,链式遍历主分区的数据区;
步骤3:对每一条环境变量,判断其长度字段的比特位是否全为1,作为遍历结束条件;如果全为1,则返回未找到错误,否则进入步骤4;
步骤4:判断当前环境变量的删除标记是否为已删除,如果已删除,则进入步骤3继续遍历。否则进入步骤5;
步骤5:判断当前环境变量的key是否与输入的key相同,如果不同,则进入步骤3继续遍历。否则进入步骤6;
步骤6:读取当前环境变量的value,返回成功。
还可以采用另一种读取方法:在环境变量初始化时就已经建立好查找表,在读取过程中直接查表。一种较优的实现是建立哈希映射表,读取环境变量时,直接从映射表中查找读取数据,不必进行遍历查找环境变量主分区。
图10是根据本发明可选实施例的环境变量的写入操作的流程图,如图10所示,一种写入新环境变量的步骤如下:
步骤S01:获取输入的环境变量键(key)和值(value),计算这条环境变量所占的空间,包括删除标记和长度字段。长度记为var_length;
步骤S02:在环境变量主分区中,通过遍历并累加数据区的长度字段,以bit全为1作为停止条件,定位空闲空间的起始地址;
步骤S03:判断数据区空闲空间的长度是否大于等于输入环境变量的var_length,如果比它大,即数据区存在空闲空间可以写入输入的环境变量,则进入S04,否则,即数据区存在空闲空间不够写入输入的环境变量,进入S05;
步骤S04:在环境变量主分区中,遍历校验和区,通过空闲标记和M值查找空闲的记录项。如果找到,则进入S06,否则进入S05;
步骤S05:整理和空间回收。将数据区的内容读入内存,遍历数据区,将那些标记为已删除的环境变量剔除,并将新的环境变量写入其中。如果新的环境变量key值已经存在于内存区,则直接更新它。最后,计算整理过后的数据区大小,如果大小仍然超过数据区FLASH分配大小,则直接空间不足错误,否则进入S08执行擦除写入操作;
步骤S06:将新的环境变量写S02中找到的空闲空间,如环境变量的key已存在,则先将已存在的环境变量标记为已删除,还可以根据外部参数控制是否对key的value做加密;
步骤S07:重新计算数据区的校验和,并将校验和写入S04中查找到的空闲记录项中;
步骤S08:将环境变量主分区整体擦除,包括数据区和校验和区,将整理后的数据区内存数据写入FLASH数据区所在的地址,并重新计算数据区的校验和,然后将校验和写入校验和区的第0个记录项。最后跳转到S09中。
步骤S09:将主分区的新的内容已同样的方式备份到备份区,并更新内存缓存,以备读取。
一种可选的写入策略是,在上述写入过程中,新写入的环境变量直接追加到空闲空间中,如果写入的环境变量值与原环境变量值相等,则没必要写入,所以可在写入前增加一步判断操作。图11是根据本发明可选实施例的环境变量写入前的预备操作的流程图,如图11所示:该策略的主要有两部分构成,一是如果写入的值与原来已存在的值相同,则直接放弃写入,返回成功。二是在不相同的情况下,如果两者值不同,但长度相同,可以利用FLASH能将1写为0,但不能将0写为1的特性,尝试将原环境变量与新环境变量不同的比特位改写为0,是否与新环境变量相等,如果相等则改写,如果不相等则进入上述常规写入流程。
图12是根据本发明可选实施例的环境变量的删除操作的流程图,如图12所示:
步骤1:获取待删除环境变量的key值,在数据区查找该环境变量,如果未找到,则返回相应错误,否则进入步骤2。
步骤2:遍历校验和区域查找空闲标记项,如果找到,则进入步骤3,否则步骤4。
步骤3:将该环境变量的删除标记,标记为已删除,并重新计算数据区的校验和,最后将校验和写入步骤2找到的空闲记录项中,再进入步骤5。
步骤4:整理数据区,剔除已删除的环境变量和待删除的环境变量,再擦除主分区,将整理好的数据写入主分区的数据区,并将校验和写入校验和区的记录项0。
步骤5:将主分区内容以相同的方式备份到备份区,并更新缓存,流程结束。
另外,需要说明的是,校验和区与数据区大小可以静态划分或者动态划分。
静态划分指的是,在环境变量分区大小固定的情况下,如果校验和区分配的空间过大,则数据区空间就会相应减小,造成环境变量有效存储容量减小或导致频繁的擦除操作,反之如果校验和区域很小,而数据区很大,则容易造成校验和区先于数据区耗尽,造成数据区利用率降低和频繁擦写。因此校验和区与数据区的占比需要找到一个平衡点。
针对嵌入式平台,可以根据环境变量的平均长度、读写特征、经验以及环境变量分区大小静态划分默认的记录项个数M值。
假设环境变量都为写入操作(在嵌入式平台上删除操作很少发生),数据区能够写入N次,每次写入占用数据区L字节,环境变量分区大小为C,则:
C=校验和区大小+数据区大小≈M*记录项大小+N*L
当M=N时,数据区利用率最高,擦操作最不频繁,则有:
M=C/(记录项大小+L)
再假设L平均大小为64字节,记录项大小为5字节,C为128KB,则M为1846,校验和区占环境变量分区总容量的7%。M值同样影响了擦除周期,在上述例子中,平均每1846次写入操作才有一次擦除操作,而且采用增量式写入,使得写入效率大大提高,且FLASH磨损速度减慢约2000倍。
静态分配未必能适应各种工况,进一步的,可在写入/删除操作过程中增加M值预测模块实现动态划分,在环境变量分区擦除操作前,利用M值预测模块预测出下一次的M值,并将预测M值记录在校验和区的头部字段。图13是根据本发明可选实施例的M值预测模块的结构框图,如图3所示:
空闲占比计算单元计算当前校验和区与数据区的空闲占比值,用于后续决策是否调整M值以及调整到多少。滤波单元对输入的数据进行滤波,滤波的目的使调节变得平滑,减小干扰,一种较优的滤波器是平滑滤波器(平滑窗口滤波器)。M值决策单元根据滤波器输出的值,决策出最佳M值。限幅单元是对决单元的输出进行人为限幅,将M值的调节幅度控制在一定范围内,防止因干扰出现M过大或者过小等极端情况。
本发明实施例对环境变量存取格式进行优化,并采用增量式的写入方法,使得环境变量平均写入速度大大提高,FLASH磨损速度大大减慢。
本发明实施例采用校验和与备份机制,能够主动检测主分区或备份分区数据完整性和自动恢复,提高了容灾能力。
本发明实施例引入校验和区大小动态调整机制(M值预测模块),使得校验和区与数据区能够自动调整划分比例达到最优,提高了环境变量分区的利用率和性能。
本发明实施例采用的一种精简的数据结构设计,占用较少FLASH空间,能够提高环境变量分区的利用率。
本发明实施例采用的一种优化的写入策略,进一步加快平均写入速度和减慢FLASH磨损。
在一个可选的实施方式中,本发明实施例利用FLASH非易失性存储器能够重复编程同一个编程块内的不同比特位或字节的特性,实现环境变量的增量式写入和删除,避免每次写入和删除需要擦除FLASH非易失性存储器,从而使写入和删除速度大幅提升,FLASH非易失性存储器磨损速度大幅减慢;
在一个可选的实施方式中,本发明实施例将环境变量分区划分成校验和区与数据区,并将校验和区划分成多个校验和记录项,用于记录多次写入和删除操作后重新计算的校验和,从而避免每次写入和删除操作都需要擦除FLASH非易失性存储器;
在一个可选的实施方式中,本发明实施例利用校验和与备份分区判断环境变量分区的完整性和实现自动备份、恢复;
在一个可选的实施方式中,本发明实施例支持校验和区大小静态划分和动态调整机制,通过历史擦除操作前校验和区与数据区的空闲情况预判调整校验和区的占比大小,提升环境变量分区利用率。
在一个可选的实施方式中,本发明实施例校验和区的记录项包含空闲标记和校验和字段,空闲标记用于判断该记录项是否已被使用,不会因校验和字段与空闲标记位的空闲状态相同引起歧义。
在一个可选的实施方式中,本发明实施例数据区根据环境变量不等长的特点,以链式数据结构存储环境变量,利用当前环境变量的数据长度字段查找下一个环境变量,直到查找到长度字段比特位全为1时停止,提升了环境变量存储的灵活性和空间利用率;
在一个可选的实施方式中,本发明实施例提供了一种较优的数据结构设计,减小数据结构产生的额外开销,实际实施中不局限于这种数据结构以及标志位的设计。
在一个可选的实施方式中,本发明实施例利用FLASH擦除后全部bit位为1的特性,将空闲标记字段的全部比特位为1定义为空闲状态,省去将空闲标记设置为空闲的步骤,加快了环境变量初始化流程。
在一个可选的实施方式中,本发明实施例删除环境变量时,还可通过一外部参数控制删除过程仅标记为已删除或者同时清空环境变量内容,兼顾信息安全与性能。一种较优的清空方法是将环境变量key和value全部清零,但长度字段保持不变。
在一个可选的实施方式中,本发明实施例在写入环境变量时,还可以通过事先判断写入的环境变量与已存在且环境变量是否相同,如果相同则不执行写入操作,来加快写入过程。
在一个可选的实施方式中,本发明实施例在写入环境变量时,在环境变量长度相等但值不同时,还可以通过逐比特比较,在比特位不相等的情况下,比较原环境变量与写入的环境变量所有不相等的比特位,判断比特位改写为0后是否与待写入的环境变量对应比特位相等,如果相同则直接改写原环境变量的对应比特位,避免分配新的空闲空间,减小FLASH擦除次数。一种较优的批量判断方法是先将原环境变量的值与待写入环境变量的值做“异或”运算,再将“异或”输出与待写入环境变量的值做“与”运算,如果输出结果为0,则可以将原环境变量改写。
在一个可选的实施方式中,本发明实施例在初始化阶段,还可以事先构建缓存,以便加快读取、写入、删除的查找速度。一种较优的查找表示建立哈希查找表,同时将校验和区与数据区空闲空间的起始地址记录下来以便加快写入和删除操作。
在一个可选的实施方式中,本发明实施例在保存环境变量时,还可以对环境变量的值做加密,提升信息安全,同时不影响增量式写入的优化效果。
实施例2
本发明的实施例还提供了一种计算机可读取的存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
步骤S1,在存储区的第一空闲空间的容量大于或等于待写入的第一环境变量所需要占用的第一空间的情况下,将第一环境变量写入存储区;
步骤S2,在第一空闲空间的容量小于第一空间的情况下,删除第二环境变量,以使存储区的第一空闲空间的容量大于或等于第一空间,其中,第二环境变量为存储区中已存储的无效的环境变量;
步骤S3,将第一环境变量写入删除了第二环境变量的存储区。
通过本发明实施例,由于可以在存储区写满内容后再进行擦除,不需要每次写入操作都对存储单元进行擦操作,因此,可以解决相关技术中写入环境变量效率低下的问题,从而大大加快环境变量的写入速度,提高了写入效率,并且大幅减慢存储单元的磨损速度。
可选地,该存储介质还被设置为存储用于执行上述方法中的任意一项步骤的计算机程序,此处不再赘述。
可选地,在本实施例中,上述计算机可读取的存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
步骤S1,在存储区的第一空闲空间的容量大于或等于待写入的第一环境变量所需要占用的第一空间的情况下,将第一环境变量写入存储区;
步骤S2,在第一空闲空间的容量小于第一空间的情况下,删除第二环境变量,以使存储区的第一空闲空间的容量大于或等于第一空间,其中,第二环境变量为存储区中已存储的无效的环境变量;
步骤S3,将第一环境变量写入删除了第二环境变量的存储区。
通过本发明实施例,由于可以在存储区写满内容后再进行擦除,不需要每次写入操作都对存储单元进行擦操作,因此,可以解决相关技术中写入环境变量效率低下的问题,从而大大加快环境变量的写入速度,提高了写入效率,并且大幅减慢存储单元的磨损速度。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种环境变量写入方法,其特征在于,包括:
在存储区的第一空闲空间的容量大于或等于待写入的第一环境变量所需要占用的第一空间的情况下,将所述第一环境变量写入所述存储区;
在所述第一空闲空间的容量小于所述第一空间的情况下,删除第二环境变量,以使所述存储区的第一空闲空间的容量大于或等于所述第一空间,其中,所述第二环境变量为所述存储区中已存储的无效的环境变量;
将所述第一环境变量写入删除了所述第二环境变量的所述存储区。
2.根据权利要求1所述的方法,其特征在于,删除所述第二环境变量,包括:
将所述存储区中所存储的第三环境变量读出到内存中,并删除读出的所述第三环境变量中的所述第二环境变量,其中,所述第三环境变量为所述存储区中所存储的全部或部分环境变量;
擦除所述存储区中所述第三环境变量所占用的第二空间,并将删除了所述第二环境变量的所述第三环境变量写入所述存储区。
3.根据权利要求1或2所述的方法,其特征在于,删除所述第二环境变量,还包括:
根据已存储的环境变量的第一状态标识删除所述第二环境变量,其中,所述第一状态标识用于指示无效的环境变量。
4.根据权利要求3所述的方法,其特征在于,将所述第一环境变量写入所述存储区之后,所述方法还包括:
对写入所述第一环境变量之前所述存储区中已存储的全部或部分环境变量标记所述第一状态标识。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述存储区的第二空闲空间的容量大于或等于写入所述第一环境变量之后的环境变量数据所对应的第一校验和所需要占用的第三空间的情况下,在写入所述第一变量之后,将所述第一校验和写入所述存储区;
在所述第二空闲空间的容量小于所述第二空间情况下,删除第二校验和,以使所述第二空闲空间的容量大于或等于所述第三空间,其中所述第二校验和是所述存储区中已存储的无效的校验和;在写入所述第一变量之后,将所述第一校验和写入删除了所述第二校验和的所述存储区。
6.根据权利要求5所述的方法,其特征在于,将所述第一校验和写入所述存储区,包括:
将所述第一校验和写入校验和区中的空闲的记录项,其中,所述存储区中配置有用于存储校验和的所述校验和区,所述校验和区中配置有多个记录项,一个所述记录项用于存储一个校验和。
7.根据权利要求6所述的方法,其特征在于,所述第二空闲空间的容量小于所述第二空间情况下,删除第二校验和,以使所述第二空闲空间的容量大于或等于所述第三空间,包括:
在所述校验和区中不存在空闲的所述记录项的情况下,擦除所述校验和区中已存储的全部或部分非空闲的记录项,以使所述校验和区中存在空闲的记录项。
8.根据权利要求6或7所述的方法,其特征在于,删除第二校验和,还包括:
根据所述存储区中已存储的记录项的第二状态标识删除所述第二校验和,其中,所述第二状态标识用于指示非空闲的记录项。
9.根据权利要求8所述的方法,其特征在于,在将所述第一校验和写入所述存储区之后,所述方法还包括:
对写入所述第一校验和之前的所述校验和区中已存储的全部或部分记录项标记所述第二状态标识。
10.根据权利要求6或7所述的方法,其特征在于,所述校验和区中设置的所述记录项的个数M满足以下条件:
M=C/(C1+L),其中,C为所述存储区的容量,C1为一个所述记录项的容量,L为向所述存储区写入一次环境变量所平均占用的字节的预估值。
11.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述存储区中的数据更新之后,备份所述存储区中的所述数据,得到备份数据;
在所述数据异常时,根据所述备份数据恢复所述数据。
12.根据权利要求11所述的方法,其特征在于,在所述数据异常时,根据所述备份数据恢复所述数据,包括:
在环境变量初始化时,计算所述存储区中所存储的环境变量的校验和,并将计算得到的所述校验和与所述备份数据中的备份校验和进行对比;
当所述校验和与所述备份校验和不同时,确定所述数据异常,将所述备份数据覆盖到所述存储区中。
13.一种计算机可读取的存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行所述权利要求1至12任一项中所述的方法。
14.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行所述权利要求1至12任一项中所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910996254.6A CN110764704B (zh) | 2019-10-18 | 2019-10-18 | 一种环境变量写入方法、存储介质及电子装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910996254.6A CN110764704B (zh) | 2019-10-18 | 2019-10-18 | 一种环境变量写入方法、存储介质及电子装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110764704A true CN110764704A (zh) | 2020-02-07 |
CN110764704B CN110764704B (zh) | 2023-09-05 |
Family
ID=69332298
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910996254.6A Active CN110764704B (zh) | 2019-10-18 | 2019-10-18 | 一种环境变量写入方法、存储介质及电子装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110764704B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112331254A (zh) * | 2020-11-24 | 2021-02-05 | 北京泽石科技有限公司 | 非易失性存储器的试错表的生成方法及装置 |
CN113946288A (zh) * | 2021-09-15 | 2022-01-18 | 长江存储科技有限责任公司 | 数据擦除方法、装置、电子设备及计算机存储介质 |
CN114741326A (zh) * | 2022-03-21 | 2022-07-12 | 阿里巴巴(中国)有限公司 | 数据处理方法以及装置 |
CN114791832A (zh) * | 2022-04-24 | 2022-07-26 | 深圳软牛科技有限公司 | 在设备空间不足时ios系统修复的方法、装置及相关组件 |
CN114816549A (zh) * | 2022-05-27 | 2022-07-29 | 国网电力科学研究院有限公司 | 一种保护bootloader及其环境变量的方法及系统 |
WO2023179243A1 (zh) * | 2022-03-21 | 2023-09-28 | 上海美仁半导体有限公司 | 数据读写方法、系统及介质、设备 |
Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000076117A (ja) * | 1998-08-31 | 2000-03-14 | Kano Densan Hongkong Yugenkoshi | 電子機器及びその制御方法及び記憶媒体 |
CN101436158A (zh) * | 2008-12-25 | 2009-05-20 | 中兴通讯股份有限公司 | 一种基于嵌入式设备闪存的参数管理方法和系统 |
US20090287874A1 (en) * | 2008-05-13 | 2009-11-19 | Microsoft Corporation | Flash Recovery Employing Transaction Log |
WO2009150810A1 (ja) * | 2008-06-09 | 2009-12-17 | パナソニック株式会社 | アクセス装置、及び残容量算出方法 |
US20100325351A1 (en) * | 2009-06-12 | 2010-12-23 | Bennett Jon C R | Memory system having persistent garbage collection |
CN102081577A (zh) * | 2011-01-12 | 2011-06-01 | 厦门雅迅网络股份有限公司 | Flash存储器的数据存储结构及其数据操作方式 |
US20120317375A1 (en) * | 2011-06-10 | 2012-12-13 | International Business Machines Corporation | Store storage class memory information command |
US20140250440A1 (en) * | 2013-03-01 | 2014-09-04 | Adaptive Computing Enterprises, Inc. | System and method for managing storage input/output for a compute environment |
CN105579954A (zh) * | 2013-10-30 | 2016-05-11 | 英特尔公司 | 平台非易失性存储区管理和平台配置 |
CN106155915A (zh) * | 2015-04-16 | 2016-11-23 | 中兴通讯股份有限公司 | 数据存储的处理方法及装置 |
CN106201362A (zh) * | 2016-07-22 | 2016-12-07 | 纳瓦电子(上海)有限公司 | 一种储存配置信息方法 |
WO2017161795A1 (zh) * | 2016-03-25 | 2017-09-28 | 福建联迪商用设备有限公司 | 处理流水文件的方法及系统 |
CN108228479A (zh) * | 2018-01-29 | 2018-06-29 | 深圳市泰比特科技有限公司 | 一种嵌入式flash数据存储方法及系统 |
CN108710578A (zh) * | 2018-04-20 | 2018-10-26 | 深圳市战音科技有限公司 | 基于闪存的数据存储方法和装置 |
US10114754B1 (en) * | 2015-09-30 | 2018-10-30 | Veritas Technologies Llc | Techniques for space reservation in a storage environment |
CN110175001A (zh) * | 2019-05-27 | 2019-08-27 | 牧星机器人(江苏)有限公司 | 一种nor-flash数据存储方法、计算机设备及存储介质 |
-
2019
- 2019-10-18 CN CN201910996254.6A patent/CN110764704B/zh active Active
Patent Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000076117A (ja) * | 1998-08-31 | 2000-03-14 | Kano Densan Hongkong Yugenkoshi | 電子機器及びその制御方法及び記憶媒体 |
US20090287874A1 (en) * | 2008-05-13 | 2009-11-19 | Microsoft Corporation | Flash Recovery Employing Transaction Log |
WO2009150810A1 (ja) * | 2008-06-09 | 2009-12-17 | パナソニック株式会社 | アクセス装置、及び残容量算出方法 |
CN101436158A (zh) * | 2008-12-25 | 2009-05-20 | 中兴通讯股份有限公司 | 一种基于嵌入式设备闪存的参数管理方法和系统 |
US20100325351A1 (en) * | 2009-06-12 | 2010-12-23 | Bennett Jon C R | Memory system having persistent garbage collection |
CN102081577A (zh) * | 2011-01-12 | 2011-06-01 | 厦门雅迅网络股份有限公司 | Flash存储器的数据存储结构及其数据操作方式 |
US20120317375A1 (en) * | 2011-06-10 | 2012-12-13 | International Business Machines Corporation | Store storage class memory information command |
US20140250440A1 (en) * | 2013-03-01 | 2014-09-04 | Adaptive Computing Enterprises, Inc. | System and method for managing storage input/output for a compute environment |
CN105579954A (zh) * | 2013-10-30 | 2016-05-11 | 英特尔公司 | 平台非易失性存储区管理和平台配置 |
CN106155915A (zh) * | 2015-04-16 | 2016-11-23 | 中兴通讯股份有限公司 | 数据存储的处理方法及装置 |
US10114754B1 (en) * | 2015-09-30 | 2018-10-30 | Veritas Technologies Llc | Techniques for space reservation in a storage environment |
WO2017161795A1 (zh) * | 2016-03-25 | 2017-09-28 | 福建联迪商用设备有限公司 | 处理流水文件的方法及系统 |
CN106201362A (zh) * | 2016-07-22 | 2016-12-07 | 纳瓦电子(上海)有限公司 | 一种储存配置信息方法 |
CN108228479A (zh) * | 2018-01-29 | 2018-06-29 | 深圳市泰比特科技有限公司 | 一种嵌入式flash数据存储方法及系统 |
CN108710578A (zh) * | 2018-04-20 | 2018-10-26 | 深圳市战音科技有限公司 | 基于闪存的数据存储方法和装置 |
CN110175001A (zh) * | 2019-05-27 | 2019-08-27 | 牧星机器人(江苏)有限公司 | 一种nor-flash数据存储方法、计算机设备及存储介质 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112331254A (zh) * | 2020-11-24 | 2021-02-05 | 北京泽石科技有限公司 | 非易失性存储器的试错表的生成方法及装置 |
CN113946288A (zh) * | 2021-09-15 | 2022-01-18 | 长江存储科技有限责任公司 | 数据擦除方法、装置、电子设备及计算机存储介质 |
CN114741326A (zh) * | 2022-03-21 | 2022-07-12 | 阿里巴巴(中国)有限公司 | 数据处理方法以及装置 |
WO2023179243A1 (zh) * | 2022-03-21 | 2023-09-28 | 上海美仁半导体有限公司 | 数据读写方法、系统及介质、设备 |
CN114791832A (zh) * | 2022-04-24 | 2022-07-26 | 深圳软牛科技有限公司 | 在设备空间不足时ios系统修复的方法、装置及相关组件 |
CN114791832B (zh) * | 2022-04-24 | 2024-02-27 | 深圳软牛科技集团股份有限公司 | 在设备空间不足时ios系统修复的方法、装置及相关组件 |
CN114816549A (zh) * | 2022-05-27 | 2022-07-29 | 国网电力科学研究院有限公司 | 一种保护bootloader及其环境变量的方法及系统 |
CN114816549B (zh) * | 2022-05-27 | 2024-04-02 | 国网电力科学研究院有限公司 | 一种保护bootloader及其环境变量的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110764704B (zh) | 2023-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110764704B (zh) | 一种环境变量写入方法、存储介质及电子装置 | |
US10732898B2 (en) | Method and apparatus for accessing flash memory device | |
CN109496300B (zh) | 一种存储介质垃圾回收方法、存储介质和程序产品 | |
KR100389241B1 (ko) | 비휘발성 메모리에서의 가변 크기 데이터의 효율적인관리를 위한 동적 할당 | |
KR100926267B1 (ko) | 플래시 메모리에서의 복사 동작을 관리하는 방법 | |
KR100843543B1 (ko) | 플래시 메모리 장치를 포함하는 시스템 및 그것의 데이터복구 방법 | |
US5832493A (en) | Flash file management system | |
US10353607B2 (en) | Bloom filters in a flash memory | |
US6865658B2 (en) | Nonvolatile data management system using data segments and link information | |
JP2005242897A (ja) | フラッシュディスク装置 | |
US8516182B2 (en) | Controller and memory system for managing data | |
KR101077904B1 (ko) | 페이지 단위 매핑 기법을 이용한 플래시 메모리 관리 장치 및 방법 | |
JP2009199625A (ja) | メモリカードおよびメモリカードの制御方法および不揮発性半導体メモリの制御方法 | |
JP2006040264A (ja) | メモリカードの制御方法および不揮発性半導体メモリの制御方法 | |
CN109558335B (zh) | 一种基于Nor Flash存储器的嵌入式系统的文件存储格式 | |
US20130304972A1 (en) | Control device, storage device, and storage control method | |
JP2009205689A (ja) | フラッシュディスク装置 | |
US20100180072A1 (en) | Memory controller, nonvolatile memory device, file system, nonvolatile memory system, data writing method and data writing program | |
KR101077901B1 (ko) | 로그 블록 단위 매핑 기법을 이용한 플래시 메모리 관리 장치 및 방법 | |
KR100954603B1 (ko) | 파일 시스템의 로그 파일 및 상기 파일 시스템의 오류 복구방법 | |
KR101676175B1 (ko) | 전원 손실 이후 데이터 손실을 방지하기 위한 메모리 저장 장치 및 방법 | |
JP6050794B2 (ja) | フラッシュメモリモジュール、不揮発性半導体メモリモジュール及びストレージ装置 | |
CN113127376B (zh) | 固态驱动器的控制方法、装置及设备 | |
KR100638638B1 (ko) | 플래시 메모리의 제어 방법 | |
KR100319254B1 (ko) | 플레쉬 메모리를 이용한 비휘발성 데이터 영역 복구 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |