闪存平台的开机方法、系统、电子设备及存储介质转让专利

申请号 : CN202311669841.7

文献号 : CN117369905B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 文璇吴德煌

申请人 : 广东匠芯创科技有限公司

摘要 :

本申请公开了闪存平台的开机方法、系统、电子设备及存储介质,闪存平台包括闪存芯片以及高速缓冲存储器,方法包括:对闪存芯片进行分区,得到坏块管理区;对于每一次写入数据,对闪存芯片出现坏块的信息进行记录,得到坏块信息;根据坏块信息更新坏块管理区;读取坏块管理区中的累计坏块信息,并对累计坏块信息进行完整性校验;当累计坏块信息通过完整性检验,将累计坏块信息存储至高速缓冲存储器;当启动闪存平台,从高速缓冲存储器中读取累计坏块信息。本申请实施例中,能够一次读取所有坏块信息,缩短读取坏块信息所需的时间,提高平台的开机速度。

权利要求 :

1.一种闪存平台的开机方法,其特征在于,所述闪存平台包括闪存芯片以及高速缓冲存储器,所述方法包括:对所述闪存芯片进行分区,得到坏块管理区;

对于每一次写入数据,对所述闪存芯片出现坏块的信息进行记录,得到坏块信息;

根据所述坏块信息更新所述坏块管理区;

读取所述坏块管理区中的累计坏块信息,并对所述累计坏块信息进行完整性校验;

当所述累计坏块信息通过完整性检验,将所述累计坏块信息存储至高速缓冲存储器;

当启动所述闪存平台,从所述高速缓冲存储器中读取累计坏块信息;

所述方法还包括:

对所述闪存平台的环境变量文件进行功能配置,得到环境变量值;

当所述环境变量值满足预设的分区值,确定与所述分区值对应的falcon分区,其中,所述falcon分区为所述闪存平台中用于存储设备树的分区;

当启动所述闪存平台,通过所述falcon分区加载设备树以获取设备树地址,并编译kernel镜像,得到镜像地址;

根据所述镜像地址以及所述设备树地址启动所述闪存平台的内核。

2.根据权利要求1所述的闪存平台的开机方法,其特征在于,所述方法还包括:对所述闪存芯片的page进行区域划分,得到多个数据区域;

对所述数据区域进行坏块检测;

当所有所述数据区域不存在坏块,将所述闪存平台切换至连续读取模式。

3.根据权利要求1所述的闪存平台的开机方法,其特征在于,所述方法还包括:当所述闪存平台切换至挂载模式,将所述闪存平台的挂载根文件系统切换为FAT文件系统;

基于预设的配置信息配置所述FAT文件系统。

4.根据权利要求1所述的闪存平台的开机方法,其特征在于,所述读取所述坏块管理区中的累计坏块信息,并对所述累计坏块信息进行完整性校验,包括:对所述坏块管理区进行分区格式验证;

当所述坏块管理区通过分区格式验证,读取所述坏块管理区中的累计坏块信息;

确定所述累计坏块信息的起始标记值、结束标记值、地址信息以及数据长度值;

基于所述地址信息对所述数据长度值进行累加,得到长度累加值;

将所述起始标记值、所述结束标记值以及所述长度累加值与预设的完整性条件进行对比以对所述累计坏块信息进行完整性校验。

5.根据权利要求2所述的闪存平台的开机方法,其特征在于,在所述将所述闪存平台切换至连续读取模式之后,所述方法还包括:接收读取指令,并确定所述读取指令中的读取数据长度以及读取数据地址;

根据所述读取数据长度以及所述读取数据地址对所述闪存芯片进行数据读取,得到目标数据;

基于预设的突发长度以及数据位宽度传输所述目标数据。

6.根据权利要求3所述的闪存平台的开机方法,其特征在于,所述基于预设的配置信息配置所述FAT文件系统,包括:获取所述FAT文件系统的系统容量;

根据所述系统容量在所述配置信息中确定簇单位;

根据所述簇单位划分所述FAT文件系统。

7.一种闪存平台的开机系统,其特征在于,所述闪存平台包括闪存芯片以及高速缓冲存储器,所述开机系统包括:芯片分区模块,用于对所述闪存芯片进行分区,得到坏块管理区;

坏块记录模块,用于对于每一次写入数据,对所述闪存芯片出现坏块的信息进行记录,得到坏块信息;

管理区更新模块,用于根据所述坏块信息更新所述坏块管理区;

完整性校验模块,用于读取所述坏块管理区中的累计坏块信息,并对所述累计坏块信息进行完整性校验;

信息累计模块,用于当所述累计坏块信息通过完整性检验,将所述累计坏块信息存储至高速缓冲存储器;

信息读取模块,用于当启动所述闪存平台,从所述高速缓冲存储器中读取累计坏块信息。

8.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现权利要求1至6任一项所述的闪存平台的开机方法。

9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于执行权利要求1至6任意一项所述的闪存平台的开机方法。

说明书 :

闪存平台的开机方法、系统、电子设备及存储介质

技术领域

[0001] 本申请属于计算机技术领域,尤其涉及一种闪存平台的开机方法、系统、电子设备及存储介质。

背景技术

[0002] SPI NAND(Serial Peripheral Interface NAND)是一种闪存存储器设备,它使用SPI(Serial Peripheral Interface,串行外设设备接口)总线协议与主机进行通信。它是一种非易失性存储器,可以用于数据存储和传输。SPI NAND闪存是基于NAND闪存技术的一种变体,NAND闪存是一种常见的闪存存储器类型,广泛应用于各种电子设备中,如存储卡、USB闪存驱动器、嵌入式系统等。与传统的并行NAND闪存相比,SPI NAND使用了串行接口,通过SPI协议进行数据传输。这使得SPI NAND具有更简化的物理接口和较低的引脚数量,具有较小的容量和较慢的数据传输速度。
[0003] 然而在嵌入式领域,开机启动速度是衡量一个产品性能的重要标志。由于NAND Flash容易产生坏块(Bad block),用户的程序需要对坏块进行管理,在SPI NAND存在坏块的情况下,每次获取坏块信息需要读取1024次,这就导致了系统每次启动,读取坏块信息时间较长,影响SPI NAND平台的开机速度。

发明内容

[0004] 本申请旨在至少解决现有技术中存在的技术问题之一,提供一种闪存平台的开机方法、系统、电子设备及存储介质,能够一次读取所有坏块信息,缩短读取坏块信息所需的时间,提高平台的开机速度。
[0005] 第一方面,本申请提供一种闪存平台的开机方法所述闪存平台包括闪存芯片以及高速缓冲存储器,所述方法包括:
[0006] 对所述闪存芯片进行分区,得到坏块管理区;
[0007] 对于每一次写入数据,对所述闪存芯片出现坏块的信息进行记录,得到坏块信息;
[0008] 根据所述坏块信息更新所述坏块管理区;
[0009] 读取所述坏块管理区中的累计坏块信息,并对所述累计坏块信息进行完整性校验;
[0010] 当所述累计坏块信息通过完整性检验,将所述累计坏块信息存储至高速缓冲存储器;
[0011] 当启动所述闪存平台,从所述高速缓冲存储器中读取累计坏块信息。
[0012] 根据本申请实施例提供的闪存平台的开机方法,至少有如下有益效果:首先,对闪存芯片进行分区,得到坏块管理区,以便于后续对坏块信息的单独存储,对于每一次写入数据,对闪存芯片出现坏块的信息进行记录,能够对每次写入数据过程中的坏块的信息进行记录,得到坏块信息,再根据坏块信息更新坏块管理区,从而实现对坏块信息的实时更新,能够将每次产生的坏块信息存储至坏块管理区,之后,读取坏块管理区中的累计坏块信息,以确定闪存平台中已经产生的坏块信息,并对累计坏块信息进行完整性校验,从而避免出现坏块管理区中的坏块信息不完整的问题,确保坏块管理过程的准确性和可靠性,当累计坏块信息通过完整性校验,说明当前坏块管理区已经记录了全部的坏块信息,将累计坏块信息存储至高速缓冲存储器,后续读取坏块信息可以直接在高速缓冲存储器上获取,当启动闪存平台,从高速缓冲存储器中读取累计坏块信息,从而能够一次读取所有坏块信息,缩短读取坏块信息所需的时间,提高平台的开机速度。
[0013] 根据本申请的一些实施例,所述方法还包括:
[0014] 对所述闪存芯片的page进行区域划分,得到多个数据区域;
[0015] 对所述数据区域进行坏块检测;
[0016] 当所有所述数据区域不存在坏块,将所述闪存平台切换至连续读取模式。
[0017] 根据本申请的一些实施例,所述方法还包括:
[0018] 当所述闪存平台切换至挂载模式,将所述闪存平台的挂载根文件系统切换为FAT(File Allocation Table,文件分配表)文件系统;
[0019] 基于预设的配置信息配置所述FAT文件系统。
[0020] 根据本申请的一些实施例,所述方法还包括:
[0021] 对所述闪存平台的环境变量文件进行功能配置,得到环境变量值;
[0022] 当所述环境变量值满足预设的分区值,确定与所述分区值对应的falcon分区,其中,所述falcon分区为所述闪存平台中用于存储设备树的分区;
[0023] 当启动所述闪存平台,通过所述falcon分区加载设备树以获取设备树地址,并编译kernel镜像,得到镜像地址;
[0024] 根据所述镜像地址以及所述设备树地址启动所述闪存平台的内核。
[0025] 根据本申请的一些实施例,所述读取所述坏块管理区中的累计坏块信息,并对所述累计坏块信息进行完整性校验,包括:
[0026] 对所述坏块管理区进行分区格式验证;
[0027] 当所述坏块管理区通过分区格式验证,读取所述坏块管理区中的累计坏块信息;
[0028] 确定所述累计坏块信息的起始标记值、结束标记值、地址信息以及数据长度值;
[0029] 基于所述地址信息对所述数据长度值进行累加,得到长度累加值;
[0030] 将所述起始标记值、所述结束标记值以及所述长度累加值与预设的完整性条件进行对比以对所述累计坏块信息进行完整性校验。
[0031] 根据本申请的一些实施例,在所述将所述闪存平台切换至连续读取模式之后,所述方法还包括:
[0032] 接收读取指令,并确定所述读取指令中的读取数据长度以及读取数据地址;
[0033] 根据所述读取数据长度以及所述读取数据地址对所述闪存芯片进行数据读取,得到目标数据;
[0034] 基于预设的突发长度以及数据位宽度传输所述目标数据。
[0035] 根据本申请的一些实施例,所述基于预设的配置信息配置所述FAT文件系统,包括:
[0036] 获取所述FAT文件系统的系统容量;
[0037] 根据所述系统容量在所述配置信息确定簇单位;
[0038] 根据所述簇单位划分所述FAT文件系统。
[0039] 第二方面,本申请提供了一种闪存平台的开机系统,所述闪存平台包括闪存芯片以及高速缓冲存储器,所述开机系统包括:
[0040] 芯片分区模块,用于对所述闪存芯片进行分区,得到坏块管理区;
[0041] 坏块记录模块,用于对于每一次写入数据,对所述闪存芯片出现坏块的信息进行记录,得到坏块信息;
[0042] 管理区更新模块,用于根据所述坏块信息更新所述坏块管理区;
[0043] 完整性校验模块,用于读取所述坏块管理区中的累计坏块信息,并对所述累计坏块信息进行完整性校验;
[0044] 信息累计模块,用于当所述累计坏块信息通过完整性检验,将所述累计坏块信息存储至高速缓冲存储器;
[0045] 信息读取模块,用于当启动所述闪存平台,从所述高速缓冲存储器中读取累计坏块信息。
[0046] 第三方面,本申请提供了一种电子设备,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如第一方面所述的闪存平台的开机方法。
[0047] 第四方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于执行第一方面所述的闪存平台的开机方法。
[0048] 本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在说明书以及附图中所特别指出的结构来实现和获得。

附图说明

[0049] 附图用来提供对本申请技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。
[0050] 图1是本申请一个实施例提供的闪存平台的开机方法的流程图;
[0051] 图2是本申请另一个实施例提供的闪存平台的开机方法的流程图;
[0052] 图3是本申请另一个实施例提供的闪存平台的开机方法的流程图;
[0053] 图4是本申请另一个实施例提供的闪存平台的开机方法的流程图;
[0054] 图5是图1中的步骤S104的具体方法流程图;
[0055] 图6是本申请另一个实施例提供的闪存平台的开机方法的流程图;
[0056] 图7是图3中的步骤S302的具体方法流程图;
[0057] 图8是本申请一个实施例提供的闪存平台的开机系统的结构示意图;
[0058] 图9是本申请实施例提供的电子设备的硬件结构示意图。

具体实施方式

[0059] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
[0060] 需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
[0061] SPI NAND(Serial Peripheral Interface NAND)是一种闪存存储器设备,它使用SPI(Serial Peripheral Interface,串行外设设备接口)总线协议与主机进行通信。它是一种非易失性存储器,可以用于数据存储和传输。SPI NAND闪存是基于NAND闪存技术的一种变体,NAND闪存是一种常见的闪存存储器类型,广泛应用于各种电子设备中,如存储卡、USB闪存驱动器、嵌入式系统等。与传统的并行NAND闪存相比,SPI NAND使用了串行接口,通过SPI协议进行数据传输。这使得SPI NAND具有更简化的物理接口和较低的引脚数量,具有较小的容量和较慢的数据传输速度。
[0062] 然而在嵌入式领域,开机启动速度是衡量一个产品性能的重要标志。由于NAND Flash容易产生坏块(Bad block),用户的程序需要对坏块进行管理,在SPI NAND存在坏块的情况下,每次获取坏块信息需要读取1024次,这就导致了系统每次启动,读取坏块信息时间较长,影响SPI NAND平台的开机速度。
[0063] 为解决了上述问题,本实施例提供了闪存平台的开机方法、系统、电子设备及存储介质,首先,对闪存芯片进行分区,得到坏块管理区,以便于后续对坏块信息的单独存储,对于每一次写入数据,对闪存芯片出现坏块的信息进行记录,能够对每次写入数据过程中的坏块的信息进行记录,得到坏块信息,再根据坏块信息更新坏块管理区,从而实现对坏块信息的实时更新,能够将每次产生的坏块信息存储至坏块管理区,之后,读取坏块管理区中的累计坏块信息,以确定闪存平台中已经产生的坏块信息,并对累计坏块信息进行完整性校验,从而避免出现坏块管理区中的坏块信息不完整的问题,确保坏块管理过程的准确性和可靠性,当累计坏块信息通过完整性校验,说明当前坏块管理区已经记录了全部的坏块信息,将累计坏块信息存储至高速缓冲存储器,后续读取坏块信息可以直接在高速缓冲存储器上获取,当启动闪存平台,从高速缓冲存储器中读取累计坏块信息,从而能够一次读取所有坏块信息,缩短读取坏块信息所需的时间,提高平台的开机速度。
[0064] 下面结合附图,对本申请实施例作进一步阐述。
[0065] 参考图1,图1是本申请一个实施例提供的闪存平台的开机方法的流程图,闪存平台的开机方法包括但不限于步骤S101至S106。
[0066] 需要说明的是,闪存平台包括闪存芯片以及高速缓冲存储器,其中,闪存平台为集成有SPI NAND的系统平台,闪存平台还包括SPL(Secondary Program Loader,辅助程序加载器)、U‑Boot、QSPI(Quad Serial Peripheral Interface,高速串行外设接口标准)等等,其中,SPL是一种用于引导嵌入式系统的程序,通常用于启动硬件后加载更复杂的引导程序,U‑Boot是一种常用的开源引导加载程序,用于嵌入式系统的引导启动,具有丰富的功能和广泛的硬件支持,QSPI是一种串行外设接口,用于在嵌入式系统中连接闪存等外部存储器设备。
[0067] 步骤S101:对闪存芯片进行分区,得到坏块管理区;
[0068] 在一些实施例中,对闪存芯片进行分区,增加一个新的分区,得到坏块管理区,其中,坏块管理区用于存储坏块信息,以实现对坏块信息的单独存储。
[0069] 需要说明的是,在划分坏块管理区时,只需要占用一小部分的闪存空间来存储坏块信息。相比于不划分分区,将整个闪存块用于存储坏块信息,划分坏块管理区可以在一定程度上减少空间的浪费,提高闪存的可用容量。
[0070] 步骤S102:对于每一次写入数据,对闪存芯片出现坏块的信息进行记录,得到坏块信息;
[0071] 在一些实施例中,对于每一次写入数据的情况发生,例如,U‑Boot烧录、升级程序、闪存平台写入数据等情况,在写入数据的过程中,可能会产生新的坏块,因此在写入数据结束后,对闪存芯片出现坏块的信息进行记录,得到坏块信息,实现对每次写入数据出现坏块的信息的记录,提高数据可靠性。
[0072] 步骤S103:根据坏块信息更新坏块管理区;
[0073] 在一些实施例中,根据坏块信息更新坏块管理区,以将所有的坏块信息存储至坏块管理区进行管理,从而能够有效地管理和记录与坏块信息对应的坏块的位置和状态,可以高效管理坏块、提高数据可靠性、简化坏块处理,避免出现坏块信息更新不及时的问题,并减少空间浪费。
[0074] 步骤S104:读取坏块管理区中的累计坏块信息,并对累计坏块信息进行完整性校验;
[0075] 在一些实施例中,当执行坏块管理区,读取坏块管理区中的累计坏块信息,其中,累计坏块信息为本次读取坏块管理区之前已经累计的坏块信息,并对累计坏块信息进行完整性校验,以确保坏块信息没有被意外修改或者损坏,提高系统对坏块信息的信任度,并且确保坏块信息的完整性有助于提高系统的稳定性,避免因为不完整或错误的坏块信息而导致系统出现异常或错误的行为。
[0076] 步骤S105:当累计坏块信息通过完整性检验,将累计坏块信息存储至高速缓冲存储器;
[0077] 在一些实施例中,当累计坏块信息通过完整性校验,说明坏块管理区中的信息完整,可以直接从坏块管理区中一次读取所有坏块信息(累计坏块信息),并将累计坏块信息存储至高速缓冲存储器,便于后续直接从高速缓冲存储器中读取所有坏块信息,无需重复读取坏块信息,实现对坏块信息的高效读取。
[0078] 需要说明的是,当累计坏块信息未通过完整性检验,说明坏块管理区中的累计坏块信息不完整或者存在问题,需要采取相应措施,例如,尝试修复坏块管理区、重新创建分区、生成错误提示等等,本实施例不做具体限制。
[0079] 步骤S106:当启动闪存平台,从高速缓冲存储器中读取累计坏块信息。
[0080] 在一些实施例中,当启动闪存平台,直接从高速缓冲存储器中读取累计坏块信息,从而能够在启动时将所有坏块信息一次读取出来,缩短读取坏块信息所需的时间,提高平台的开机速度。
[0081] 可以理解的是,坏块信息在闪存上分散分布,读取坏块信息时,需要反复加载数据到SPINAND cache(高速缓冲存储器)上,导致读取坏块信息的时间过长。现有技术中获取所有坏块信息需要读取1024次,现在只需要一次,并且现有技术中获取坏块信息大概都需要250ms,现在不超过1ms,极大地缩短了坏块信息的读取时间。
[0082] 参照图2,图2是本申请另一个实施例提供的闪存平台的开机方法的流程图,闪存平台的开机方法包括但不限于步骤S201至步骤S203。
[0083] 步骤S201:对闪存芯片的page进行区域划分,得到多个数据区域;
[0084] 步骤S202:对数据区域进行坏块检测;
[0085] 步骤S203:当所有数据区域不存在坏块,将闪存平台切换至连续读取模式。
[0086] 在一些实施例的步骤S201至步骤S203中,对闪存芯片的page进行区域划分,得到多个数据区域,之后对每个数据区域进行坏块检测,以判断不同区域中是否存在坏块,确保读取的数据准确性和可靠性,当所有数据区域均不存在坏块,则说明当前读取的数据是连续的,可以将闪存平台切换至连续读取模式,从而能够自动缓存数据到高速缓冲存储器中,不需要反复加载页地址,提高读取效率,节省了数据读取的时间,特别是在需要顺序读取大量数据时,通过一次性指定起始页地址,可以减少通信开销和提高数据传输速度。
[0087] 需要说明的是,在传统的读取模式中,每次读取一个页时,都需要发送读取命令和页地址给SPINAND存储器,并等待存储器返回数据,这个过程会产生一定的通信开销和延迟时间。而在连续读取模式中,可以一次性发送读取命令和起始页地址给SPINAND存储器,然后等待存储器将连续的页数据缓存到SPINAND缓存中。一旦数据被缓存到SPINAND缓存,后续的页数据可以直接从缓存中获取,无需反复加载页地址和等待存储器响应,这种方式可以大大减少通信开销和等待时间,从而提高连续读取多页数据的效率,加快数据读取速度,无需反复发送读取命令和地址。
[0088] 参照图3,图3是本申请另一个实施例提供的闪存平台的开机方法的流程图,闪存平台的开机方法包括但不限于步骤S301至步骤S302。
[0089] 步骤S301:当闪存平台切换至挂载模式,将闪存平台的挂载根文件系统切换为FAT文件系统;
[0090] 步骤S302:基于预设的配置信息配置FAT文件系统。
[0091] 在一些实施例的步骤S301至步骤S302中,当闪存平台切换至挂载模式,将闪存平台的挂载根文件系统切换为FAT文件系统,之后再基于预设的配置信息配置FAT文件系统,从而能够通过FAT文件系统的机制来访问SPINAND上的文件和目录。并且将SPINAND挂载的根文件系统切换为FAT文件系统,FAT文件系统通过连续的方式保存数据,可以使用连续读取模式,读速度最高可以达到30MB/s。
[0092] 需要说明的是,目前SPINAND挂载的根文件系统主要有UBIFS(Unsorted Block Image File System,无排序区块图像文件系统)、Squashfs、Initramfs(Initial RAM File System,初始RAM文件系统),其中,UBIFS是一种针对闪存设备优化的日志型文件系统,它具有良好的崩溃恢复能力和空间利用效率,适用于闪存设备的特殊特性;Squashfs是一种只读压缩文件系统,它可以将文件系统以只读的方式压缩并存储在闪存等设备中,有效减小存储空间占用;Initramfs是一种临时的根文件系统,用于系统引导过程中,在真正的根文件系统被加载之前提供必要的基础设施和工具。它通常包含一些必要的驱动程序、工具和初始化脚本等。
[0093] 在测试中发现Squashfs以及Initramfs在挂载时都存在解压缩时间过长的问题。UBIFS虽然可以配置为非压缩格式,启动时间有所优化,但需要初始化UBI(Unsorted Block Images,无排序区块图像)层,获取所有block的UBI头部信息,大概消耗时间180ms;而且UBIFS管理数据分散杂乱,不能使用连续读取模式,导致读文件速度很难优化,UBIFS读速度最多只能达到7MB/s。而本实施例将闪存平台的挂载根文件系统切换为FAT文件系统,并且同时将闪存平台切换至连续读取模式,从而加快文件的加载速度,使得读速度最高可以达到30MB/s。
[0094] 参照图4,图4是本申请另一个实施例提供的闪存平台的开机方法的流程图,闪存平台的开机方法包括但不限于步骤S401至步骤S404。
[0095] 步骤S401:对闪存平台的环境变量文件进行功能配置,得到环境变量值;
[0096] 步骤S402:当环境变量值满足预设的分区值,确定与分区值对应的falcon分区;
[0097] 需要说明的是,falcon分区为闪存平台中用于存储设备树的分区。
[0098] 步骤S403:当启动闪存平台,通过falcon分区加载设备树以获取设备树地址,并编译kernel镜像,得到镜像地址;
[0099] 步骤S404:根据镜像地址以及设备树地址启动闪存平台的内核。
[0100] 在一些实施例的步骤S401至步骤S404中,对闪存平台的环境变量文件进行功能配置,得到环境变量值,即,对闪存平台的env.txt进行配置,实现SPINAND加载env环境变量功能,当环境变量值满足预设的分区值,确定与分区值对应的falcon分区,以进入到falcon模式,当启动闪存平台,通过falcon分区加载设备树以获取设备树地址,并编译kernel镜像,得到镜像地址,最后,根据镜像地址以及设备树地址启动闪存平台的内核,能够通过在env.txt文件中配置SPINAND的启动命令,指定从falcon分区中读取设备树快照,并将其传递给Linux内核,确保Linux内核在启动时能够正确地理解硬件环境,从而实现正确的初始化和驱动加载。
[0101] 需要说明的是,env.txt是U‑Boot引导加载程序的环境变量文件,它包含了引导加载程序启动时所需的配置信息,例如,启动内核的命令行参数、引导设备的信息等。本实施例通过配置环境变量文件设置SPI NAND的启动命令以及其他的引导参数。falcon分区是指SPINAND中用于存储设备树(Device Tree)的特定分区,其中,设备树是描述硬件设备信息和系统架构的数据结构,Linux内核在启动时会使用设备树来配置硬件。本实施例中的falcon分区用来存储设备树的快照,以便在引导过程中加载并传递给Linux内核使用。
[0102] 值得注意的是,在确定环境变量值满足预设的分区值的过程中,首先读取env环境变量里面Bootos的值,当Bootos的值等于yes,则进入到falcon模式,确定与分区值对应的falcon分区。
[0103] 参照图5,图5是图1中的步骤S104的具体方法流程图,包括但不限于步骤S501至步骤S505。
[0104] 步骤S501:对坏块管理区进行分区格式验证;
[0105] 在一些实施例中,在对累计坏块信息进行完整性校验的过程中,首先,对坏块管理区进行分区格式验证,验证坏块管理区的分区格式是否正确,从而确保分区信息的正确性和可读性,避免分区格式错误导致的数据丢失或者损坏。
[0106] 可以理解的是,分区格式验证包括但不限于检查坏块管理区分区的大小、分区的结构、元数据信息等等,本实施例不做具体限制。
[0107] 步骤S502:当坏块管理区通过分区格式验证,读取坏块管理区中的累计坏块信息;
[0108] 在一些实施例中,当坏块管理区通过分区格式验证,说明坏块管理区正常,则直接读取坏块管理区中的累计坏块信息,其中,坏块管理区通常会包括信息管理结构体,信息管理结构体会包括多个校验字段,以便于后续通过校验字段验证数据的完整性,以确保数据没有被损坏或者篡改。
[0109] 需要说明的是,信息管理结构体设置有起始标记值、结束标记值、地址信息、数据长度值以及校验值。
[0110] 步骤S503:确定累计坏块信息的起始标记值、结束标记值、地址信息以及数据长度值;
[0111] 在一些实施例中,从信息管理结构体中确定累计坏块信息的起始标记值、结束标记值、地址信息以及数据长度值,其中,起始标记值用于表征开始执行信息管理结构体,结束标记值用于表征结束执行信息管理结构体,地址信息用于保存坏块信息的地址,数据长度值用于表征坏块信息的数据长度,便于后续对累计坏块信息的完整性的检测。
[0112] 步骤S504:基于地址信息对数据长度值进行累加,得到长度累加值;
[0113] 在一些实施例中,基于地址信息对数据长度值进行累加,得到长度累加值,从而能够通过长度累加值对坏块的数量进行校验,并且通过地址信息对数据长度值进行累加,能够判断坏块管理区中记录的坏块信息的位置是否准确,提高对累计坏块信息校验的准确性。
[0114] 步骤S505:将起始标记值、结束标记值以及长度累加值与预设的完整性条件进行对比以对累计坏块信息进行完整性校验。
[0115] 在一些实施例中,将起始标记值、结束标记值以及长度累加值与预设的完整性条件进行对比,其中,完整性条件包括预设的目标起始标记值、目标结束标记值以及目标长度累加值,具体的对比过程为将起始标记值与目标起始标记值进行对比,将结束标记值与目标结束标记值进行对比,将长度累加值与目标长度累加值进行对比,以完成对累计坏块信息的完整性校验。
[0116] 需要说明的是,当起始标记值与目标起始标记值一致、结束标记值与目标结束标记值一致、并且长度累加值与目标长度累加值一致,则认为累计坏块信息通过完整性校验,如果起始标记值、结束标记值以及长度累加值中有任意一个值与完整性条件中的值不同,则认为累计坏块信息未通过完整性校验,其中,目标起始标记值、目标结束标记值以及目标长度累加值可以根据使用者的实际需要进行设置,例如,将目标起始标记值设置为常量0xaa55、将目标结束标记值设置为常量0x55aa等等,本实施例不做具体限制。
[0117] 参照图6,图6是本申请另一个实施例提供的闪存平台的开机方法的流程图,闪存平台的开机方法包括但不限于步骤S601至步骤S603。
[0118] 需要说明的是,步骤S601至步骤S603发生在将闪存平台切换至连续读取模式之后。
[0119] 步骤S601:接收读取指令,并确定读取指令中的读取数据长度以及读取数据地址;
[0120] 步骤S602:根据读取数据长度以及读取数据地址对闪存芯片进行数据读取,得到目标数据;
[0121] 步骤S603:基于预设的突发长度以及数据位宽度传输目标数据。
[0122] 在一些实施例的步骤S601至步骤S603中,在闪存平台切换至连续读取模式之后,接收读取指令,并确定读取指令中的读取数据长度以及读取数据地址,再按照读取数据地址从闪存芯片中确定读取数据的开始位置,之后以读取数据长度为单位进行数据读取,实现对数据的连续读取,最后,基于预设的突发长度以及数据位宽度传输目标数据,以实现对读取到的数据的传输,减少了通信的开销和延迟,提高了数据的读取效率。
[0123] 可以理解的是,闪存平台中的QSPI通过DMA(Direct Memory Access,直接内存访问)接收数据,其中,DDR(Double Data Rate,双倍数据速率)接收端的突发长度和数据位宽度表示为(burst_8、BIT_WIDTH_32),QSPI发送端的突发长度和数据位宽度表示为(burst_8、BIT_WIDTH_32),从而能够优化总线负载率。
[0124] 可以理解的是,SPINAND读取数据时,一次读取一个page大小的数据,2048字节。在将闪存平台切换至连续读取模式之后,需要一次读取所有数据,因此直接将缓存地址和数据长度直接传递给连续读取模式函数,并且通过设置较大的突发长度和较宽的数据位宽度,可以减少总线上的传输次数,从而降低总线的负载率。
[0125] 参照图7,图7是图3中的步骤S302的具体方法流程图,包括但不限于步骤S701至步骤S703。
[0126] 步骤S701:获取FAT文件系统的系统容量;
[0127] 步骤S702:根据系统容量在配置信息确定簇单位;
[0128] 步骤S703:根据簇单位划分FAT文件系统。
[0129] 在一些实施例的步骤S701至步骤S703中,在基于预设的配置信息配置FAT文件系统的过程中,首先,获取FAT文件系统的系统容量,以确定FAT文件系统的总容量,即SPINAND可用于文件系统的存储空间大小,再根据系统容量确定簇单位,其中,在确定簇单位的过程中,还可以考虑要存储的文件的大小和数量分布,例如,如果大部分文件都很小,选择较小的簇大小可以更好地利用存储空间;如果有较大的文件,选择较大的簇大小可以减少碎片化等等,最后,根据簇单位划分FAT文件系统,从而能够根据具体应用场景和需求进行调整和测试,使得闪存平台适配于更多的应用场景。
[0130] 需要说明的是,簇大小也会影响文件系统的寻址效率。较小的簇大小可能需要更多的簇号进行寻址,而较大的簇大小则可以减少寻址所需的簇号数量。选择一个适当的簇大小可以平衡寻址效率和存储空间的利用率。
[0131] 参照图8,图8是本申请一个实施例提供的闪存平台的开机系统的结构示意图。
[0132] 在一些实施例中,闪存平台的开机系统包括:
[0133] 芯片分区模块801,用于对闪存芯片进行分区,得到坏块管理区;
[0134] 坏块记录模块802,用于对于每一次写入数据,对闪存芯片出现坏块的信息进行记录,得到坏块信息;
[0135] 管理区更新模块803,用于根据坏块信息更新坏块管理区;
[0136] 完整性校验模块804,用于读取坏块管理区中的累计坏块信息,并对累计坏块信息进行完整性校验;
[0137] 信息累计模块805,用于当累计坏块信息通过完整性检验,将累计坏块信息存储至高速缓冲存储器;
[0138] 信息读取模块806,用于当启动闪存平台,从高速缓冲存储器中读取累计坏块信息。
[0139] 在一些实施例中,开机系统还包括模式切换模块,用于对闪存芯片的page进行区域划分,得到多个数据区域;对数据区域进行坏块检测;以及当所有数据区域不存在坏块,将闪存平台切换至连续读取模式。
[0140] 文件配置模块,用于当闪存平台切换至挂载模式,将闪存平台的挂载根文件系统切换为FAT文件系统;基于预设的配置信息配置FAT文件系统。
[0141] 环境配置模块,用于对闪存平台的环境变量文件进行功能配置,得到环境变量值;当环境变量值满足预设的分区值,确定与分区值对应的falcon分区,其中,falcon分区为闪存平台中用于存储设备树的分区;当启动闪存平台,通过falcon分区加载设备树以获取设备树地址,并编译kernel镜像,得到镜像地址;根据镜像地址以及设备树地址启动闪存平台的内核。
[0142] 需要说明的是,开机系统包括如上闪存平台的开机方法带来的有益效果,本实施例在此不再赘述。
[0143] 请参阅图9,图9示意了一实施例的电子设备的硬件结构,电子设备包括:
[0144] 处理器1001,可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application SpecificIntegrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本申请实施例所提供的技术方案;
[0145] 存储器1002,可以采用只读存储器(Read Only Memory,ROM)、静态存储设备、动态存储设备或者随机存取存储器(Random Access Memory,RAM)等形式实现。存储器1002可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1002中,并由处理器1001来调用执行本申请实施例的闪存平台的开机方法;
[0146] 输入/输出接口1003,用于实现信息输入及输出;
[0147] 通信接口1004,用于实现本设备与其他设备的通信交互,可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信;
[0148] 总线1005,在设备的各个组件(例如处理器1001、存储器1002、输入/输出接口1003和通信接口1004)之间传输信息;
[0149] 其中处理器1001、存储器1002、输入/输出接口1003和通信接口1004通过总线1005实现彼此之间在设备内部的通信连接。
[0150] 此外,本申请的一个实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个处理器或控制器执行,例如,被上述系统实施例中的一个处理器执行,可使得上述处理器执行上述实施例中的闪存平台的开机方法。
[0151] 本申请实施例描述的实施例是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域技术人员可知,随着技术的演变和新应用场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
[0152] 本领域技术人员可以理解的是,图1‑8中示出的技术方案并不构成对本申请实施例的限定,可以包括比图示更多或更少的步骤,或者组合某些步骤,或者不同的步骤。
[0153] 以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0154] 本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。
[0155] 本申请的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0156] 应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
[0157] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0158] 上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0159] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0160] 集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括多指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例的方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read‑Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序的介质。
[0161] 以上参照附图说明了本申请实施例的优选实施例,并非因此局限本申请实施例的权利范围。本领域技术人员不脱离本申请实施例的范围和实质内所作的任何修改、等同替换和改进,均应在本申请实施例的权利范围之内。