CN112148377B - EFI Shell环境下防止SSD异常掉电的方法和装置 - Google Patents
EFI Shell环境下防止SSD异常掉电的方法和装置 Download PDFInfo
- Publication number
- CN112148377B CN112148377B CN202011040102.8A CN202011040102A CN112148377B CN 112148377 B CN112148377 B CN 112148377B CN 202011040102 A CN202011040102 A CN 202011040102A CN 112148377 B CN112148377 B CN 112148377B
- Authority
- CN
- China
- Prior art keywords
- nvme
- pointer
- node
- ssd
- efi
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
-
- 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/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1417—Boot up procedures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4406—Loading of operating system
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/24—Memory cell safety or protection circuits, e.g. arrangements for preventing inadvertent reading or writing; Status cells; Test cells
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请涉及一种EFI Shell环境下防止SSD异常掉电的方法、装置、计算机设备及存储介质,其中该方法包括:搭建EDK2开发环境,在所述开发环境下通过运行EFI程序执行以下步骤;进行NVMe的初始化,找到NVMe设备的节点地址;通过AllocateZeroPool函数分配相应的缓存用于存放NVMe节点指针;通过LocateHandle函数获取特定全局唯一标识符对应的NVMe节点指针;通过OpenProtocol函数获取NVMe的PassThru指针,所述PassThru指针是用于发送NVMe命令的节点指针;按照NVMe协议规定的格式封装好刷新指令,并将所述刷新指令发送到固态硬盘以实现刷新操作。本发明可有效防止SSD异常掉电,进而保证了数据的安全性。
Description
技术领域
本发明涉及固态硬盘技术领域,特别是涉及一种EFI Shell环境下防止SSD异常掉电的方法、装置、计算机设备及存储介质。
背景技术
BIOS(Basic Input Output System)即基本输入输出系统,它提供了系统加电自检、引导装入、主要I/O设备的处理程序以及低层硬件和操作系统间的接口控制等功能模块来处理所有的系统中断。有时,BIOS会有一些bug或需要支持其他硬件驱动,所有更新BIOS是常有的事情。
目前,在传统技术中,更新BIOS有多种方式,其中一种是在EFI(ExtensibleFirmware Interface,可扩展固件接口)Shell环境下进行BIOS的升级。通过特定的EFI指令将新的BIOS程序下载到指定的硬件中去,然后将系统掉电,重新加载新的BIOS程序,但这个过程可能会对SSD造成异常掉电,有些缓存数据还没来得及刷到闪存颗粒中,进而会对固态硬盘造成一定的损害。
发明内容
基于此,有必要针对上述技术问题,提供一种EFI Shell环境下防止SSD异常掉电的方法、装置、计算机设备及存储介质。
一种EFI Shell环境下防止SSD异常掉电的方法,所述方法包括:
搭建EDK2开发环境,在所述开发环境下通过运行EFI程序执行以下步骤;
进行NVMe的初始化,找到NVMe设备的节点地址;
通过AllocateZeroPool函数分配相应的缓存用于存放NVMe节点指针;
通过LocateHandle函数获取特定全局唯一标识符对应的NVMe节点指针;
通过OpenProtocol函数获取NVMe的PassThru指针,所述PassThru指针是用于发送NVMe命令的节点指针;
按照NVMe协议规定的格式封装好刷新指令,并将所述刷新指令发送到固态硬盘以实现刷新操作。
在其中一个实施例中,在所述按照NVMe协议规定的格式封装好刷新指令,并将所述刷新指令发送到固态硬盘以实现刷新操作的步骤之后还包括:
通过gPassThru指针定位到PciIo指针;
读取控制器配置寄存器,并将shutdown notification位置成1;
发送写指令到所述控制器配置寄存器,并通过读取控制器状态寄存器,待shutdown notification状态变成完成即表示固态硬盘正常掉电完成。
在其中一个实施例中,在所述进行NVMe的初始化,找到NVMe设备的节点地址的步骤之后还包括:
通过LocateHandle函数查找是否存在特定全局唯一标识符对应的NVMe设备节点;
若存在则根据查找到的NVMe设备节点的个数分配相应的缓存存放NVMe设备节点指针。
在其中一个实施例中,所述特定全局唯一标识符为gEfiNvmExpressPassThruProtocolGuid。
一种EFI Shell环境下防止SSD异常掉电的装置,所述装置包括:
环境搭建模块,所述环境搭建模块用于搭建EDK2开发环境,在所述开发环境下通过运行EFI程序执行以下步骤;
初始化模块,所述初始化模块用于进行NVMe的初始化,找到NVMe设备的节点地址;
分配模块,所述分配模块用于通过AllocateZeroPool函数分配相应的缓存用于存放NVMe节点指针;
获取模块,所述获取模块用于通过LocateHandle函数获取特定全局唯一标识符对应的NVMe节点指针;通过OpenProtocol函数获取NVMe的PassThru指针,所述PassThru指针是用于发送NVMe命令的节点指针;
封装发送模块,所述封装发送模块用于按照NVMe协议规定的格式封装好刷新指令,并将所述刷新指令发送到固态硬盘以实现刷新操作。
在其中一个实施例中,所述装置还包括正常掉电模块,所述正常掉电模块用于:
通过gPassThru指针定位到PciIo指针;
读取控制器配置寄存器,并将shutdown notification位置成1;
发送写指令到所述控制器配置寄存器,并通过读取控制器状态寄存器,待shutdown notification状态变成完成即表示固态硬盘正常掉电完成。
在其中一个实施例中,所述初始化模块还用于:
通过LocateHandle函数查找是否存在特定全局唯一标识符对应的NVMe设备节点;
若存在则根据查找到的NVMe设备节点的个数分配相应的缓存存放NVMe设备节点指针。
在其中一个实施例中,所述特定全局唯一标识符为gEfiNvmExpressPassThruProtocolGuid。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意一项方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一项方法的步骤。
上述EFI Shell环境下防止SSD异常掉电的方法、装置、计算机设备及存储介质通过搭建EDK2开发环境,在所述开发环境下通过运行EFI程序执行以下步骤;进行NVMe的初始化,找到NVMe设备的节点地址;通过AllocateZeroPool函数分配相应的缓存用于存放NVMe节点指针;通过LocateHandle函数获取特定全局唯一标识符对应的NVMe节点指针;通过OpenProtocol函数获取NVMe的PassThru指针,所述PassThru指针是用于发送NVMe命令的节点指针;按照NVMe协议规定的格式封装好刷新指令,并将所述刷新指令发送到固态硬盘以实现刷新操作。本发明通过EFI应用程序来实现刷新及正常关机命令,从而将异常掉电转换为正常掉电。通过该方法可有效防止SSD异常掉电,进而保证了数据的安全性。
附图说明
图1为一个实施例中EFI Shell环境下防止SSD异常掉电的方法的流程示意图;
图2为一个实施例中EDK2环境搭建的流程示意图;
图3为另一个实施例中EFI Shell环境下防止SSD异常掉电的方法的流程示意图;
图4为再一个实施例中EFI Shell环境下防止SSD异常掉电的方法的流程示意图;
图5为一个实施例中通过软件实现刷新及正常关机的流程示意图;
图6为一个实施例中EFI Shell环境下防止SSD异常掉电的装置的结构框图;
图7为另一个实施例中EFI Shell环境下防止SSD异常掉电的装置的结构框图;
图8为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
目前,在传统技术中,更新BIOS有多种方式,其中一种是在EFI(ExtensibleFirmware Interface,可扩展固件接口)Shell环境下进行BIOS的升级。通过特定的EFI指令将新的BIOS程序下载到指定的硬件中去,然后将系统掉电,重新加载新的BIOS程序,但这个过程可能会对SSD造成异常掉电,有些缓存数据还没来得及刷到闪存颗粒中,进而会对固态硬盘造成一定的损害。
基于此,本发明提供了一种EFI Shell环境下防止SSD异常掉电的方法,通过设计一个在EFI应用程序来实现刷新及正常关机命令,从而将异常掉电转换为正常掉电。该方法可有效防止SSD异常掉电,保证了数据的安全性。
在一个实施例中,如图1所示,提供了一种EFI Shell环境下防止SSD异常掉电的方法,该方法包括:
步骤102,搭建EDK2开发环境,在所述开发环境下通过运行EFI程序执行以下步骤;
步骤104,进行NVMe的初始化,找到NVMe设备的节点地址;
步骤106,通过AllocateZeroPool函数分配相应的缓存用于存放NVMe节点指针;
步骤108,通过LocateHandle函数获取特定全局唯一标识符对应的NVMe节点指针;
步骤110,通过OpenProtocol函数获取NVMe的PassThru指针,所述PassThru指针是用于发送NVMe命令的节点指针;
步骤112,按照NVMe协议规定的格式封装好刷新指令,并将所述刷新指令发送到固态硬盘以实现刷新操作。
EFI是Extensible Firmware Interface的缩写,是介于平台固件和操作系统之间的一层软件接口及其详细规格说明文档。EFI是Intel在1998年开始的一个项目演变而来,而在2005年Intel将EFI 1.10开源并交由Unified EFI开源社区去维护和开发,Intel自己的EFI也就不单独做了,都和开源社区共用一个。现在也通常用EFI来代指UEFI,二者不再有意区分。EFI Shell是EFI提供的一个交互式的命令行Shell环境,在这里你可以执行一些efi应用程序,加载efi设备驱动程序,以及引导操作系统,从引导菜单项中选择”efishell”,回车,待出现”shell”提示符时即表明你已进入efi shell环境中。
开发EFI程序需要先搭建EDK2开发环境,具体的搭建过程可参考图2所示,包括如下步骤:
首先,下载开源代码开发包以及编译需要用到的软件,软件系统可以是Windows7/8/8.1/10。其中,edk2-master.zip为EDK II源文件树形结构代码;edk2-BaseTools-win32为EDK II预编译基础工具;Python27为从源代码中运行Python工具;Nasm为编译工具;ASL为编译工具。
接着,建立工程目录与安装软件。建立工程目录C:\edk2;安装Nasm,位置C:\NASM;设置环境变量set NASM_PREFIX=c:\NASM\;安装python,位置C:\Python27;设置环境变量;edk2-BaseTools-win32-master重命名为Win32,复制到目录::\edk2\BaseTools\Bin\Win32;设置环境变量set EDK_TOOLS_PATH=C:\edk2\BaseTools;安装iasl,位置C:\ASL,确保该目录下有“isal.exe”(拷贝“isal.exe”到C:\ASL);edk2-master重命名为edk2,拷贝到C:\edk2中。
最后,进行编译代码,本方案中可使用windows 10 64位系统,根据工具对应表,需要下载VS2015X86环境。C:\edk2>BaseTools\toolsetup.bat Rebuild编译工具重新建立关系;C:\edk2>edksetup初始化编译环境;修改配置文件C:\edk2\Conf\target.txt;命令build–a X64-p MdeModulePkg/MdeModulePkg.dsc编译标准模块MdeModulePkg;C:\edk2\Build\MdeModule\DEBUG_VS2015x86\X64\*.efi编译生成的文件目录;demo程序。在MdeModulePkg模块中编译生成很多efi文件,找到HelloWord.efi,拷贝到模拟器中运行,也可以拷贝到Shell环境中运行。
在EDK2开发环境搭建完毕之后,通过运行EFI程序执行以下步骤,包括:首先,进行NVMe的初始化,找到NVMe设备的节点地址。然后,通过AllocateZeroPool函数分配相应的缓存用于存放NVMe节点指针;通过LocateHandle函数获取特定全局唯一标识符对应的NVMe节点指针;
具体地,该特定全局唯一标识符为gEfiNvmExpressPassThruProtocolGuid。通过AllocateZeroPool函数分配相应的缓存存放nvme节点指针。然后再次通过LocateHandle函数获取GUID全局唯一标识符为gEfiNvmExpressPassThruProtocolGuid的设备节点指针。在通过OpenProtocol函数获取NVMe的PassThru指针,该指针是发送NVMe命令的节点指针。随后按照NVMe协议规定的格式封装好FLUSH指令,通过passthru函数发送到SSD,即可实现FLUSH操作。
在本实施例中,通过搭建EDK2开发环境,在所述开发环境下通过运行EFI程序执行以下步骤;进行NVMe的初始化,找到NVMe设备的节点地址;通过AllocateZeroPool函数分配相应的缓存用于存放NVMe节点指针;通过LocateHandle函数获取特定全局唯一标识符对应的NVMe节点指针;通过OpenProtocol函数获取NVMe的PassThru指针,所述PassThru指针是用于发送NVMe命令的节点指针;按照NVMe协议规定的格式封装好刷新指令,并将所述刷新指令发送到固态硬盘以实现刷新操作。本方案通过EFI应用程序来实现刷新及正常关机命令,从而将异常掉电转换为正常掉电。通过该方法可有效防止SSD异常掉电,进而保证了数据的安全性。
在一个实施例中,如图3所示,提供了一种EFI Shell环境下防止SSD异常掉电的方法,该方法在按照NVMe协议规定的格式封装好刷新指令,并将所述刷新指令发送到固态硬盘以实现刷新操作的步骤之后还包括:
步骤302,通过gPassThru指针定位到PciIo指针;
步骤304,读取控制器配置寄存器,并将shutdown notification位置成1;
步骤306,发送写指令到所述控制器配置寄存器,并通过读取控制器状态寄存器,待shutdown notification状态变成完成即表示固态硬盘正常掉电完成。
在本实施例中,控制SSD正常掉电是通过nvme寄存器操作的。具体地,首先,通过gPassThru指针定位到PciIo指针,然后通过mem read指定读取nvme CC(controllerconfiguration控制器配置)寄存器,再将其中的shutdown notification位置成1,通过memwrite发送写指令到CC寄存器。最后通过读取CTST(controller status控制器状态)寄存器,等待shutdown状态变成完成,即表示SSD正常掉电完成。通过EFI应用程序来实现刷新及正常关机命令,从而将异常掉电转换为正常掉电,避免了对固态硬盘造成的损害,同时还保证了数据的安全性。
在一个实施例中,如图4所示,提供了一种EFI Shell环境下防止SSD异常掉电的方法,该方法在进行NVMe的初始化,找到NVMe设备的节点地址的步骤之后还包括:
步骤402,通过LocateHandle函数查找是否存在特定全局唯一标识符对应的NVMe设备节点;
步骤404,若存在则根据查找到的NVMe设备节点的个数分配相应的缓存存放NVMe设备节点指针。
具体地,在本实施例中提供了一个完整地通过软件来实现刷新及正常关机,可参考图5所示,具体的实现步骤包括:
首先,进行NVMe的初始化,找到NVMe设备节点地址。通过LocateHandle函数查找是否存在GUID(Globally Unique Identifier全局唯一标识符)为gEfiNvmExpressPassThruProtocolGuid的nvme设备节点,通过倒数第二个参数节点个数返回,如果节点个数大于1,则表示存在NVMe节点。接下来通过AllocateZeroPool函数分配相应的buffer存放nvme节点指针。然后再次通过LocateHandle函数获取GUID为gEfiNvmExpressPassThruProtocolGuid的设备节点指针。在通过OpenProtocol函数获取NVMe的PassThru指针,该指针是发送nvme命令的节点指针。随后按照NVMe协议规定的格式封装好FLUSH指令,通过passthru函数发送到SSD,即可实现FLUSH操作。
控制SSD正常掉电是通过NVMe寄存器操作的。首先,通过gPassThru指针定位到PciIo指针,然后通过mem read指定读取NVMe CC寄存器,再将其中的shutdownnotification位置成1,通过mem write发送写指令到CC寄存器。最后通过读取CTST寄存器,等待shutdown状态变成完成,即表示SSD正常掉电完成。
应该理解的是,虽然图1-5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图6所示,提供了一种EFI Shell环境下防止SSD异常掉电的装置600,该装置包括:
环境搭建模块601,所述环境搭建模块用于搭建EDK2开发环境,在所述开发环境下通过运行EFI程序执行以下步骤;
初始化模块602,所述初始化模块用于进行NVMe的初始化,找到NVMe设备的节点地址;
分配模块603,所述分配模块用于通过AllocateZeroPool函数分配相应的缓存用于存放NVMe节点指针;
获取模块604,所述获取模块用于通过LocateHandle函数获取特定全局唯一标识符对应的NVMe节点指针;通过OpenProtocol函数获取NVMe的PassThru指针,所述PassThru指针是用于发送NVMe命令的节点指针;
封装发送模块605,所述封装发送模块用于按照NVMe协议规定的格式封装好刷新指令,并将所述刷新指令发送到固态硬盘以实现刷新操作。
在一个实施例中,如图7所示,提供了一种EFI Shell环境下防止SSD异常掉电的装置600,该装置还包括正常掉电模块606,用于:
通过gPassThru指针定位到PciIo指针;
读取控制器配置寄存器,并将shutdown notification位置成1;
发送写指令到所述控制器配置寄存器,并通过读取控制器状态寄存器,待shutdown notification状态变成完成即表示固态硬盘正常掉电完成。
在一个实施例中,初始化模块601还用于:
通过LocateHandle函数查找是否存在特定全局唯一标识符对应的NVMe设备节点;
若存在则根据查找到的NVMe设备节点的个数分配相应的缓存存放NVMe设备节点指针。
在其中一个实施例中,所述特定全局唯一标识符为gEfiNvmExpressPassThruProtocolGuid。
关于EFI Shell环境下防止SSD异常掉电的装置的具体限定可以参见上文中对于EFI Shell环境下防止SSD异常掉电的方法的限定,在此不再赘述。
在一个实施例中,提供了一种计算机设备,其内部结构图可以如图8所示。该计算机设备包括通过装置总线连接的处理器、存储器以及网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作装置、计算机程序和数据库。该内存储器为非易失性存储介质中的操作装置和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种EFI Shell环境下防止SSD异常掉电的方法。
本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以上各个方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以上各个方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种EFI Shell环境下防止SSD异常掉电的方法,其特征在于,所述方法包括:
搭建EDK2开发环境,在所述开发环境下通过运行EFI程序执行以下步骤;
进行NVMe的初始化,找到NVMe设备的节点地址;
通过AllocateZeroPool函数分配相应的缓存用于存放NVMe节点指针;
通过LocateHandle函数获取特定全局唯一标识符对应的NVMe节点指针;
通过OpenProtocol函数获取NVMe的PassThru指针,所述PassThru指针是用于发送NVMe命令的节点指针;
按照NVMe协议规定的格式封装好刷新指令,并将所述刷新指令发送到固态硬盘以实现刷新操作。
2.根据权利要求1所述的EFI Shell环境下防止SSD异常掉电的方法,其特征在于,在所述按照NVMe协议规定的格式封装好刷新指令,并将所述刷新指令发送到固态硬盘以实现刷新操作的步骤之后还包括:
通过gPassThru指针定位到PciIo指针;
读取控制器配置寄存器,并将shutdown notification位置成1;
发送写指令到所述控制器配置寄存器,并通过读取控制器状态寄存器,待shutdownnotification状态变成完成即表示固态硬盘正常掉电完成。
3.根据权利要求2所述的EFI Shell环境下防止SSD异常掉电的方法,其特征在于,在所述进行NVMe的初始化,找到NVMe设备的节点地址的步骤之后还包括:
通过LocateHandle函数查找是否存在特定全局唯一标识符对应的NVMe设备节点;
若存在则根据查找到的NVMe设备节点的个数分配相应的缓存存放NVMe设备节点指针。
4.根据权利要求1-3任一项所述的EFI Shell环境下防止SSD异常掉电的方法,其特征在于,所述特定全局唯一标识符为gEfiNvmExpressPassThruProtocolGuid。
5.一种EFI Shell环境下防止SSD异常掉电的装置,其特征在于,所述装置包括:
环境搭建模块,所述环境搭建模块用于搭建EDK2开发环境,在所述开发环境下通过运行EFI程序执行以下步骤;
初始化模块,所述初始化模块用于进行NVMe的初始化,找到NVMe设备的节点地址;
分配模块,所述分配模块用于通过AllocateZeroPool函数分配相应的缓存用于存放NVMe节点指针;
获取模块,所述获取模块用于通过LocateHandle函数获取特定全局唯一标识符对应的NVMe节点指针;通过OpenProtocol函数获取NVMe的PassThru指针,所述PassThru指针是用于发送NVMe命令的节点指针;
封装发送模块,所述封装发送模块用于按照NVMe协议规定的格式封装好刷新指令,并将所述刷新指令发送到固态硬盘以实现刷新操作。
6.根据权利要求5所述的EFI Shell环境下防止SSD异常掉电的装置,其特征在于,所述装置还包括正常掉电模块,所述正常掉电模块用于:
通过gPassThru指针定位到PciIo指针;
读取控制器配置寄存器,并将shutdown notification位置成1;
发送写指令到所述控制器配置寄存器,并通过读取控制器状态寄存器,待shutdownnotification状态变成完成即表示固态硬盘正常掉电完成。
7.根据权利要求6所述的EFI Shell环境下防止SSD异常掉电的装置,其特征在于,所述初始化模块还用于:
通过LocateHandle函数查找是否存在特定全局唯一标识符对应的NVMe设备节点;
若存在则根据查找到的NVMe设备节点的个数分配相应的缓存存放NVMe设备节点指针。
8.根据权利要求5-7任一项所述的EFI Shell环境下防止SSD异常掉电的装置,其特征在于,所述特定全局唯一标识符为gEfiNvmExpressPassThruProtocolGuid。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至4中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至4中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011040102.8A CN112148377B (zh) | 2020-09-28 | 2020-09-28 | EFI Shell环境下防止SSD异常掉电的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011040102.8A CN112148377B (zh) | 2020-09-28 | 2020-09-28 | EFI Shell环境下防止SSD异常掉电的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112148377A CN112148377A (zh) | 2020-12-29 |
CN112148377B true CN112148377B (zh) | 2023-02-10 |
Family
ID=73895710
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011040102.8A Active CN112148377B (zh) | 2020-09-28 | 2020-09-28 | EFI Shell环境下防止SSD异常掉电的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112148377B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116366639B (zh) * | 2023-06-01 | 2023-11-14 | 深圳市七彩虹禹贡科技发展有限公司 | 一种在uefi下联网更新主板bios的方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103995578A (zh) * | 2013-03-15 | 2014-08-20 | 晶天电子(深圳)有限公司 | 一种具有绿能数据持续模式的器件驱动器 |
CN107678919A (zh) * | 2017-09-27 | 2018-02-09 | 联想(北京)有限公司 | 一种设备状态的检测方法及电子设备 |
CN108021511A (zh) * | 2017-11-22 | 2018-05-11 | 深圳忆联信息系统有限公司 | 一种ssd性能提升的方法及ssd |
CN110059506A (zh) * | 2019-04-24 | 2019-07-26 | 苏州浪潮智能科技有限公司 | 一种固态硬盘转接板及相关控制方法 |
CN110569153A (zh) * | 2019-08-15 | 2019-12-13 | 苏州浪潮智能科技有限公司 | 一种nvme硬盘固件刷新稳定性测试方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11137916B2 (en) * | 2018-06-28 | 2021-10-05 | Intel Corporation | Selective background data refresh for SSDs |
-
2020
- 2020-09-28 CN CN202011040102.8A patent/CN112148377B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103995578A (zh) * | 2013-03-15 | 2014-08-20 | 晶天电子(深圳)有限公司 | 一种具有绿能数据持续模式的器件驱动器 |
CN107678919A (zh) * | 2017-09-27 | 2018-02-09 | 联想(北京)有限公司 | 一种设备状态的检测方法及电子设备 |
CN108021511A (zh) * | 2017-11-22 | 2018-05-11 | 深圳忆联信息系统有限公司 | 一种ssd性能提升的方法及ssd |
CN110059506A (zh) * | 2019-04-24 | 2019-07-26 | 苏州浪潮智能科技有限公司 | 一种固态硬盘转接板及相关控制方法 |
CN110569153A (zh) * | 2019-08-15 | 2019-12-13 | 苏州浪潮智能科技有限公司 | 一种nvme硬盘固件刷新稳定性测试方法及系统 |
Non-Patent Citations (3)
Title |
---|
Non-volatile memory host controller interface;AWAD A et.al;《IEEE International Symposium on》;20151231;第145-154页 * |
NVMe高速存储的FPGA实现;崔丹丹等;《微电子学与计算机》;20190630;第36卷(第6期);第26-30页 * |
NVMMDS——一种面向非易失存储器的元数据管理方法;蔡涛等;《计算机研究与发展》;20130131;第50卷(第1期);第69-79页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112148377A (zh) | 2020-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7664923B2 (en) | Method and system for updating software | |
US9891939B2 (en) | Application compatibility with library operating systems | |
US8914785B2 (en) | Providing virtual appliance system firmware images | |
EP3314514B1 (en) | Protecting basic input/output (bios) code | |
US9910664B2 (en) | System and method of online firmware update for baseboard management controller (BMC) devices | |
US8032740B2 (en) | Update in-use flash memory without external interfaces | |
US20030023839A1 (en) | Method and system for creating and employing an operating system having selected functionality | |
JP2003196105A (ja) | 高可用性ファームウェアロードのためのシステム | |
US10747523B2 (en) | Methods of updating firmware components, computer systems and memory apparatus | |
CN108509215B (zh) | 一种系统软件的更换方法、装置、终端设备及存储介质 | |
KR20150052107A (ko) | Bpram을 이용한 운영체제의 레이아웃 및 실행 | |
JP2003196104A (ja) | 高可用性ファームウェアロードのためのシステム | |
CN114651233A (zh) | 即时容器 | |
TW201721412A (zh) | 選擇及載入韌體卷區之技術 | |
CN112148377B (zh) | EFI Shell环境下防止SSD异常掉电的方法和装置 | |
CN110297726B (zh) | 具有串行存在检测数据的计算机系统及内存模块控制方法 | |
EP3724757B1 (en) | Firmware publication of multiple binary images | |
JPH11514124A (ja) | オペレーティングシステムをロードする方法 | |
CN108536444B (zh) | 插件编译方法、装置、计算机设备和存储介质 | |
KR100775431B1 (ko) | 임베디드 시스템 및 임베디드 시스템의 펌웨어 업데이트방법 | |
CN116028084A (zh) | 一种基于OpenStack云平台跨版本热升级的方法、系统及终端 | |
CN114237638A (zh) | 操作系统安装方法、装置、计算机设备和存储介质 | |
CN110795113B (zh) | 一种Redis集群服务的安装方法、服务器和介质 | |
JP6099106B2 (ja) | 少なくとも一つのデータキャリアを提供するための方法、コンピュータシステム、および、メモリデバイス | |
CN114443582B (zh) | 一种操作系统上文件系统挂载方法、装置、设备及介质 |
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 |