SSD固件升级保护方法及装置与流程

文档序号:15829024发布日期:2018-11-03 00:16阅读:333来源:国知局

本发明涉及到ssd固件升级领域,特别是涉及到一种ssd固件升级保护方法及装置。

背景技术

ssd(固态硬盘)已经被广泛应用于各种场合,由于其在性能、功耗、环境适应性等方面的优秀指标,正逐步替换传统的硬盘。由于ssd对于数据可靠性要求很高,且用户场景复杂,所以常常会有一些内部测试未能覆盖的场景发生;同时,某些情形下,ssd供应商发布了新的算法优化,可以提升用户体验,在这些情形下都需要通过固件升级来修复、优化ssd。

现有的ssd固件升级过程如下:主机下发固件升级命令;ssd接收主机新的firmware镜像文件;校验firmware镜像文件;擦除所有firmwareblock;写入新的firmware镜像文件;读取firmware镜像,检查正确性;如果没有正确写入,则重复上述步骤;如果正确写入,回复主机升级完成。而ssd固件升级的过程中,如果操作不当会导致硬盘失效例如突然断电或发送其他不可抗的意外,会导致ssd数据无法访问。



技术实现要素:

为了解决上述现有技术的缺陷,本发明的目的是提供一种ssd固件升级保护方法及装置。

为达到上述目的,本发明的技术方案是:

提出一种ssd固件升级保护方法,包括以下步骤:

检查固件列表,筛选出读写属性为可读写且固件版本最旧的firmware拷贝,确定该firmware拷贝所在firmwareblock;

擦除该firmwareblock;

写入镜像文件到该firmwareblock;

检查是否写入成功;

若写入成功,则将新写入的firmware拷贝设置为启动拷贝;

若写入失败,则返回擦除该firmwareblock步骤。

进一步地,所述将新写入的firmware拷贝设置为启动拷贝步骤,包括,

修改nor启动参数区域的currentbootcopy为新写入的firmware拷贝。

进一步地,所述将新写入的firmware拷贝设置为启动拷贝步骤之后,包括,

运行rom,加载bootloader到程序memory并执行

根据nor启动参数区域的currentbootcopy选择对应的firmware拷贝;

校验firmware拷贝是否正确;

若正确,则加载firmware拷贝并执行;

若不正确,则扫描固件列表,筛选出读写属性为只读且固件版本最新的firmware拷贝,记为firmwarecopyn;

修改启动参数区域的currentbootcopy为firmwarecopyn;

加载firmwarecopyn并执行。

进一步地,所述修改nor启动参数区域的currentbootcopy为新写入的firmware拷贝步骤,包括,

在nor新增启动参数区域,并在启动参数区域存放有包含所有firmware拷贝物理存放地址和数量信息,以及用于确定启动拷贝的currentbootcopy。

进一步地,所述检查固件列表,筛选出所有读写属性为可读写的firmware拷贝,选择固件版本最旧的firmware拷贝步骤之前,包括,

设置多个firmware拷贝,并为每个firmware拷贝设置对应的读写权限,且不同的firmware拷贝的固件版本不同。

本发明还提出了一种ssd固件升级保护装置,包括:

第一筛选单元,用于检查固件列表,筛选出读写属性为可读写且固件版本最旧的firmware拷贝,确定该firmware拷贝所在firmwareblock;

擦除单元,用于擦除该firmwareblock;

写入单元,用于写入镜像文件到该firmwareblock;

检查单元,用于检查是否写入成功;

启动设置单元,用于若写入成功,则将新写入的firmware拷贝设置为启动拷贝;

返回单元,用于若写入失败,则返回擦除该firmwareblock步骤。

进一步地,所述启动设置单元包括启动设置模块,用于修改nor启动参数区域的currentbootcopy为新写入的firmware拷贝。

进一步地,还包括:

运行单元,用于运行rom,加载bootloader到程序memory并执行

启动单元,用于根据nor启动参数区域的currentbootcopy选择对应的firmware拷贝;

校验单元,用于校验firmware拷贝是否正确;

第一执行单元,用于若正确,则加载firmware拷贝并执行;

第二筛选单元,用于若不正确,则扫描固件列表,筛选出读写属性为只读且固件版本最新的firmware拷贝,记为firmwarecopyn;

修改单元,用于修改启动参数区域的currentbootcopy为firmwarecopyn;

第二执行单元,用于加载firmwarecopyn并执行。

进一步地,所述启动设置单元还包括新增模块,用于在nor新增启动参数区域,并在启动参数区域存放有包含所有firmware拷贝物理存放地址和数量信息,以及用于确定启动拷贝的currentbootcopy。

进一步地,还包括预设置单元,用于设置多个firmware拷贝,并为每个firmware拷贝设置对应的读写权限,且不同的firmware拷贝的固件版本不同。

本发明的有益效果是:通过设置多个不同固件版本的firmware拷贝,在升级固件时对其中之一进行升级,若升级成功则采用升级成功后的固件进行启动,若升级不成功则采用其他原有的firmware拷贝进行启动,保证了在固件升级过程中,至少存在有一个可以正常用于启动的firmware拷贝,保证了ssd的正常使用,不会出现因为固件升级失败而导致ssd无法正常启动,甚至丢盘的问题。

附图说明

图1为本发明一种ssd固件升级保护方法的方法流程图;

图2为本发明一种启动参数设置的方法流程图;

图3为本发明一种ssd固件升级保护方法的方法流程图;

图4为本发明一实施例ssd启动的原理框图;

图5为本发明一种ssd固件升级保护装置的结构框图;

图6为本发明一种ssd固件升级保护装置的启动设置单元的结构框图。

具体实施方式

为阐述本发明的思想及目的,下面将结合附图和具体实施例对本发明做进一步的说明。

firmware拷贝也写作firmwarecopy。

firmwareblock用于存放firmwarecopy。

参照图1-4,提出本发明一具体实施例,一种ssd固件升级保护方法,包括以下步骤:

s11、检查固件列表,筛选出读写属性为可读写且固件版本最旧的firmware拷贝,确定该firmware拷贝所在firmwareblock。

s12、擦除该firmwareblock。

s13、写入镜像文件到该firmwareblock。

s14、检查是否写入成功。

s15、若写入成功,则将新写入的firmware拷贝设置为启动拷贝。

s16、若写入失败,则返回擦除该firmwareblock步骤。

对于步骤s11,主机在下发固件升级命令之后,ssd接收到用于升级的镜像文件,准备升级,通过检查nor启动参数区域中的固件列表firmwarecopylist(firmware拷贝列表),先筛选出读写属性为可读写的所有firmware拷贝,并获取上述所有firmware拷贝的版本信息,根据版本信息确定最旧版本的firmware拷贝,并确定与之对应的firmwareblock,后续使用该firmwareblock进行固件升级。

具体的,读写属性,可分为只读(r)和可读写(rw)两种,可读属性的firmware拷贝只能被读取,无法写入新的镜像文件进行固件升级,具体的,保存一份只读属性的firmware拷贝,其从出厂后就不可更改,用于当所有的firmware拷贝失效之后进行系统启动。而可读写(rw)属性的firmware拷贝可以被读取,也可以写入新的镜像文件进行固件升级,用于后续进行固件升级,保证ssd固件升级到性能最好的版本。

步骤s11之前,还包括步骤s10:设置多个firmware拷贝,并为每个firmware拷贝设置对应的读写权限,且不同的firmware拷贝的固件版本不同。

对于步骤s10,在出厂时,预先设置好多个firmware拷贝,并为firmware拷贝设置对应的读写权限,且不同的firmware拷贝的固件版本不同。在为所有的firmware拷贝写入对应的镜像文件之后,设置一个firmware拷贝的读写属性为只读(r),之后无法更改,其余读写属性皆为可读写(rw),之后可以进行固件升级。设置一个读写属性为只读的firmware拷贝,其从出厂后就不可更改,用于当所有的firmware拷贝失效之后进行系统启动,避免ssd升级故障,发生丢盘。

对于步骤s12,在写入镜像文件之前需要擦除目标firmwareblock上的数据,在擦除完毕之后再写入新的镜像文件。

对于步骤s13,在擦除了目标firmwareblock上的数据之后,即可将接收到的镜像文件写入到目标firmwareblock上,进行固件升级。

对于步骤s14,在将镜像文件写入到firmwareblock之后,可能出现写入成功或写入失败两种结果,需要检查写入结构并根据写入结果进行下一步操作。

对于步骤s15,若镜像文件写入成功,则按照正常流程将该firmwareblock上的firmware拷贝作为ssd新的启动拷贝,将在下一次启动时就可以使用升级过的firmware拷贝进行启动,完成整个升级过程。

参考图2,,步骤s15包括以下步骤:

步骤s151:在nor新增启动参数区域,并在启动参数区域存放有包含所有firmware拷贝物理存放地址和数量信息,以及用于确定启动拷贝的currentbootcopy。

步骤s152:修改nor启动参数区域的currentbootcopy为新写入的firmware拷贝。

对于步骤s151,在nor区域新增一个区域:启动参数区域,其内存放如下信息:用于表示所有firmwarecopy数量的firmwarecopynumber参数,用于确定启动拷贝的currentbootcopy参数,以及每份firmware拷贝的物理存放地址。可以通过读取firmwarecopynumber参数了解所有firmwarecopy的具体数量,通过currentbootcopy参数和物理存放地址确定采用那个firmware拷贝进行启动ssd。

对于步骤s152,在检查确定新镜像文件写入没问题之后,将新写入镜像文件的firmware拷贝确定为ssd新的启动拷贝,具体的,通过修改nor启动参数区域的currentbootcopy为新写入的firmware拷贝就可以了。

对于步骤s16,在另外一种情况下,如果写入不成功,则重复上述步骤s12-s14,重新选择适合的firmwareblock写入镜像文件。

参考图3,步骤s16之后,包括:

s17、运行rom,加载bootloader到程序memory并执行。

s18、根据nor启动参数区域的currentbootcopy选择对应的firmware拷贝。

s19、校验firmware拷贝是否正确。

s20、若正确,则加载firmware拷贝并执行。

s21、若不正确,则扫描固件列表,筛选出读写属性为只读且固件版本最新的firmware拷贝,记为firmwarecopyn。

s22、修改启动参数区域的currentbootcopy为firmwarecopyn。

s23、加载firmwarecopyn并执行。

对于步骤s17,参考图4,ssd典型的启动流程如下:通电后,rom执行;rom从nor加载bootloader到程序memory,跳转到bootloader运行;bootloader从存放firmwareblock(多个)扫描并加载完整的一份firmware拷贝(firmwarecopy)到程序memory,并开始执行,完成启动。具体的,ssd控制器内部具备rom,为通电后代码开始执行的位置;ssd控制器内部具备程序memory,为加载外部程序执行的地方;nor上存放精简的bootloader(一般为16kb),用以完成系统初始化。

对于步骤s18,nor启动参数区域的currentbootcopy上携带有用于启动拷贝的信息,根据currentbootcopy选择对应的firmwareblock上的firmware拷贝进行启动。

对于步骤s19,在启动前,需要对firmwareblock的镜像文件进行校验,确保镜像文件是完整可靠的,可以用于启动ssd。

对于步骤s20,在检验后,确定镜像文件没问题,则加载firmwareblock内的firmware拷贝并执行启动,完成ssd启动。

对于步骤s21,当选定的firmwareblock上的镜像文件存在问题时,需要找到用于应急的firmware拷贝,也就是读写属性为只读的初始firmware拷贝,使用初始firmware拷贝启动ssd,保证固件升级出现问题,但是ssd数据正常。在找到初始的firmware拷贝之后,将其记为firmwarecopyn。

对于步骤s22,在nor启动参数区域,修改currentbootcopy为firmwarecopyn,后续ssd启动时,就会默认加载初始firmware拷贝进行启动,保证ssd至少有一个能个正常启动的firmware拷贝,提高ssd固件升级的安全性。

对于步骤s23,加载对应的初始firmware拷贝,并执行启动。

通过设置多个不同固件版本的firmware拷贝,在升级固件时对其中之一进行升级,若升级成功则采用升级成功后的固件进行启动,若升级不成功则采用其他原有的firmware拷贝进行启动,保证了在固件升级过程中,至少存在有一个可以正常用于启动的firmware拷贝,保证了ssd的正常使用,不会出现因为固件升级失败而导致ssd无法正常启动,甚至丢盘的问题。

本发明还提出了一种ssd固件升级保护装置,包括:

预设置单元10,用于设置多个firmware拷贝,并为每个firmware拷贝设置对应的读写权限,且不同的firmware拷贝的固件版本不同。

第一筛选单元11,检查固件列表,筛选出读写属性为可读写且固件版本最旧的firmware拷贝,确定该firmware拷贝所在firmwareblock。

擦除单元12,用于擦除该firmwareblock。

写入单元13,用于写入镜像文件到该firmwareblock。

检查单元14,用于检查是否写入成功。

启动设置单元15,用于若写入成功,则将新写入的firmware拷贝设置为启动拷贝。

返回单元16,用于若写入失败,则返回擦除单元12擦除该firmwareblock。

运行单元17,用于运行rom,加载bootloader到程序memory并执行。

启动单元18,用于根据nor启动参数区域的currentbootcopy选择对应的firmware拷贝。

校验单元19,用于校验firmware拷贝是否正确。

第一执行单元20,用于若正确,则加载firmware拷贝并执行。

第二筛选单元21,用于若不正确,则扫描固件列表,筛选出读写属性为只读且固件版本最新的firmware拷贝,记为firmwarecopyn。

修改单元22,用于修改启动参数区域的currentbootcopy为firmwarecopyn。

第二执行单元23,用于加载firmwarecopyn并执行。

对于预设置单元10,在出厂时,预先设置好多个firmware拷贝,并为firmware拷贝设置对应的读写权限,且不同的firmware拷贝的固件版本不同。在为所有的firmware拷贝写入对应的镜像文件之后,设置一个firmware拷贝的读写属性为只读(r),之后无法更改,其余读写属性皆为可读写(rw),之后可以进行固件升级。设置一个读写属性为只读的firmware拷贝,其从出厂后就不可更改,用于当所有的firmware拷贝失效之后进行系统启动,避免ssd升级故障,发生丢盘。

对于第一筛选单元11,主机在下发固件升级命令之后,ssd接收到用于升级的镜像文件,准备升级,通过检查nor启动参数区域中的固件列表firmwarecopylist(firmware拷贝列表),先筛选出读写属性为可读写的所有firmware拷贝,并获取上述所有firmware拷贝的版本信息,根据版本信息确定最旧版本的firmware拷贝,并确定与之对应的firmwareblock,后续使用该firmwareblock进行固件升级。

具体的,读写属性,可分为只读(r)和可读写(rw)两种,可读属性的firmware拷贝只能被读取,无法写入新的镜像文件进行固件升级,具体的,保存一份只读属性的firmware拷贝,其从出厂后就不可更改,用于当所有的firmware拷贝失效之后进行系统启动。而可读写(rw)属性的firmware拷贝可以被读取,也可以写入新的镜像文件进行固件升级,用于后续进行固件升级,保证ssd固件升级到性能最好的版本。

对于擦除单元12,在写入镜像文件之前需要擦除目标firmwareblock上的数据,在擦除完毕之后再写入新的镜像文件。

对于写入单元13,在擦除了目标firmwareblock上的数据之后,即可将接收到的镜像文件写入到目标firmwareblock上,进行固件升级。

对于检查单元14,在将镜像文件写入到firmwareblock之后,可能出现写入成功或写入失败两种结果,需要检查写入结构并根据写入结果进行下一步操作。

对于启动设置单元15,若镜像文件写入成功,则按照正常流程将该firmwareblock上的firmware拷贝作为ssd新的启动拷贝,将在下一次启动时就可以使用升级过的firmware拷贝进行启动,完成整个升级过程。

启动设置单元15包括新增模块51和启动设置模块52。

新增模块51,用于在nor新增启动参数区域,并在启动参数区域存放有包含所有firmware拷贝物理存放地址和数量信息,以及用于确定启动拷贝的currentbootcopy。

启动设置模块52,修改nor启动参数区域的currentbootcopy为新写入的firmware拷贝。

对于新增模块51,在nor区域新增一个区域:启动参数区域,其内存放如下信息:用于表示所有firmwarecopy数量的firmwarecopynumber参数,用于确定启动拷贝的currentbootcopy参数,以及每份firmware拷贝的物理存放地址。可以通过读取firmwarecopynumber参数了解所有firmwarecopy的具体数量,通过currentbootcopy参数和物理存放地址确定采用那个firmware拷贝进行启动ssd。

对于启动设置模块52,在检查确定新镜像文件写入没问题之后,将新写入镜像文件的firmware拷贝确定为ssd新的启动拷贝,具体的,通过修改nor启动参数区域的currentbootcopy为新写入的firmware拷贝就可以了。

对于返回单元16,在另外一种情况下,如果写入不成功,则返回擦除单元12重新选择对应的firmwareblock写入镜像文件。

对于运行单元17,ssd典型的启动流程如下:通电后,rom执行;rom从nor加载bootloader到程序memory,跳转到bootloader运行;bootloader从存放firmwareblock扫描并加载完整的一份firmware拷贝到程序memory,并开始执行,完成启动。具体的,ssd控制器内部具备rom,为通电后代码开始执行的位置;ssd控制器内部具备程序memory,为加载外部程序执行的地方;nor上存放精简的bootloader(一般为16kb),用以完成系统初始化。

对于启动单元18,nor启动参数区域的currentbootcopy上携带有用于启动拷贝的信息,根据currentbootcopy选择对应的firmwareblock上的firmware拷贝进行启动。

对于校验单元19,在启动前,需要对firmwareblock的镜像文件进行校验,确保镜像文件是完整可靠的,可以用于启动ssd。

对于第一执行单元20,在检验后,确定镜像文件没问题,则加载firmwareblock内的firmware拷贝并执行启动,完成ssd启动。

对于第二筛选单元21,当选定的firmwareblock上的镜像文件存在问题时,需要找到用于应急的firmware拷贝,也就是读写属性为只读的初始firmware拷贝,使用初始firmware拷贝启动ssd,保证固件升级出现问题,但是ssd数据正常。在找到初始的firmware拷贝之后,将其记为firmwarecopyn。

对于修改单元22,在nor启动参数区域,修改currentbootcopy为firmwarecopyn,后续ssd启动时,就会默认加载初始firmware拷贝进行启动,保证ssd至少有一个能个正常启动的firmware拷贝,提高ssd固件升级的安全性。

对于第二执行单元23,加载对应的初始firmware拷贝,并执行启动。

本发明的有益效果是:通过设置多个不同固件版本的firmware拷贝,在升级固件时对其中之一进行升级,若升级成功则采用升级成功后的固件进行启动,若升级不成功则采用其他原有的firmware拷贝进行启动,保证了在固件升级过程中,至少存在有一个可以正常用于启动的firmwaresolt,保证了ssd的正常使用,不会出现因为固件升级失败而导致ssd无法正常启动,甚至丢盘的问题。

以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1