CN111033466A - 对闪存进行分区以及实现具有映像升级能力的灵活引导 - Google Patents
对闪存进行分区以及实现具有映像升级能力的灵活引导 Download PDFInfo
- Publication number
- CN111033466A CN111033466A CN201880050615.1A CN201880050615A CN111033466A CN 111033466 A CN111033466 A CN 111033466A CN 201880050615 A CN201880050615 A CN 201880050615A CN 111033466 A CN111033466 A CN 111033466A
- Authority
- CN
- China
- Prior art keywords
- firmware
- computing device
- description table
- data
- flash memory
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
-
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/654—Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
各个方面包括用于在计算设备上实现大小减小的固件存储格式的方法。各个方面可以包括:将第一固件描述表存储到闪存的第一扇区,其中,第一固件描述表可以定义固件的第一实例,包括描述第一多个固件映像;将第一多个固件映像存储到第一多个连续扇区;将第二固件描述表存储到第二扇区,其中,第二固件描述表可以定义固件的第二实例,包括描述第二多个固件映像,第二多个固件映像具有第三多个固件映像;将第三多个固件映像存储到第二多个连续扇区;以及使用第二固件描述表来引导计算设备。
Description
背景技术
许多移动/汽车/服务器/计算机市场芯片都采用基于全球唯一标识符(GUID)分区表(GPT)规范或等效专有格式的存储格式。通过采用这种存储格式使用的存储空间通常很高,并且没有针对非常低的存储密度的市场进行优化。由于功率、密度和成本约束,一些芯片(例如,主要用于物联网(IoT)市场空间的芯片)具有非常有限的闪存存储密度和能力。大多数IoT芯片的特征是空中更新固件映像(OTA更新)的可能性以及使闪存存储格式和闪存存储处理策略认识到这一要求。
发明内容
各个公开的各方面可以包括用于在计算设备上实现大小减小的固件存储格式的装置和方法。各个方面可以包括:将第一固件描述表存储到闪存的第一扇区,其中,所述第一固件描述表可以包括第一多个数据字段,所述第一多个数据字段被配置为定义固件的第一实例,包括描述第一多个固件映像;将所述第一多个固件映像存储到所述闪存的第一多个连续扇区;将第二固件描述表存储到所述闪存的与所述第一扇区连续的第二扇区,其中,所述第二固件描述表可以包括第二多个数据字段,所述第二多个数据字段被配置为定义所述固件的第二实例,包括描述第二多个固件映像,所述第二多个固件映像包括第三多个固件映像;将所述第三多个固件映像存储到所述闪存的与第一多个连续扇区连续的第二多个连续扇区;以及通过执行所述第二多个固件映像,使用所述第二固件描述表来引导所述计算设备。
一些方面还可以包括:所述第二多个固件映像还包括所述第一多个固件映像中的至少一个固件映像。
在一些方面中,描述第一多个固件映像可以包括:识别所述闪存中的存储所述第一多个固件映像的位置,所述位置包括所述闪存的第一逻辑分区,并且描述第二多个固件映像可以包括:识别所述闪存中的存储所述第一多个固件映像中的所述至少一个固件映像和所述第三多个固件映像的位置,所述位置包括所述闪存的第二逻辑分区,所述第二逻辑分区与所述第一逻辑分区在所述闪存中的存储所述第一多个固件映像中的所述至少一个固件映像的第一位置处重叠。
一些方面还可以包括:响应于接收到所述第二固件描述表,重置所述计算设备。
一些方面还可以包括:确定使用所述第二固件描述表来引导所述计算设备是否成功。
在一些方面中,所述第一多个数据字段可以包括当前分区等级数据和有效状态数据,并且所述第二多个数据字段可以包括试验分区等级数据和所述有效状态数据。一些方面还可以包括:响应于确定使用所述第二固件描述表来引导所述计算设备成功,将所述试验分区等级数据设置为所述当前分区等级数据,并且将所述第一多个数据字段的所述有效状态数据设置为无效状态数据;以及响应于确定使用所述第二固件描述表来引导所述计算设备不成功,将所述第二多个数据字段的所述有效状态数据设置为无效状态数据。
一些方面还可以包括:响应于确定使用所述第二固件描述表来引导所述计算设备不成功,设置强制固件描述表指示符;重置所述计算设备;以及使用强制固件描述表来引导所述计算设备。
在一些方面中,所述第一多个数据字段可以包括当前分区等级数据和第一版本数据,并且所述第二多个数据字段可以包括所述当前分区等级数据和第二版本数据,所述第二版本数据被配置为:指示所述固件的所述第二实例是所述固件的、比所述固件的第一实例新的实例。一些方面还可以包括:响应于确定使用所述第二固件描述表来引导所述计算设备不成功,将强制固件描述表设置为包括所述第一版本数据的第一固件描述表;重置所述计算设备;以及使用所述强制固件描述表来引导所述计算设备。
各个方面包括具有闪存和处理器的计算设备,所述处理器被配置为执行以上概述的方法中的任何方法的操作。各个方面包括具有用于执行以上概述的方法中的任何方法的功能的单元的计算设备。各个方面包括处理器可读存储介质,在其上存储有处理器可执行指令,处理器可执行指令被配置为使得处理器执行以上概述的方法中的任何方法的操作。
附图说明
并入本文并构成本说明书的一部分的附图示出了各个方面中的示例方面,并且与上文给出的总体描述和下文给出的详细描述一起用于说明权利要求书的特征。
图1是示出适于实现各个方面的计算设备的组件框图。
图2是示出适于实现各个方面的计算设备的组件的组件框图。
图3A-3C是示出适于实现各个方面的示例大小减小的固件存储格式的表格。
图4是示出适于实现各个方面的闪存中的示例大小减小的固件存储格式的框图。
图5是示出适于实现各个方面的闪存中的示例大小减小的固件存储格式的框图。
图6是示出适合根据一个方面的用于加载和更新大小减小的固件存储格式的方法的过程流图。
图7是示出适合根据一个方面的用于加载和更新大小减小的固件存储格式的方法的过程流图。
图8是示出适合根据一个方面的用于加载并且切换到特定大小减小的固件存储格式版本的方法的过程流图。
图9是示出适合根据一个方面的用于加载并且恢复到先前大小减小的固件存储格式版本的方法的过程流图。
图10是示出适于与各个方面一起使用的示例移动计算设备的组件框图。
图11是示出适于与各个方面一起使用的示例移动计算设备的组件框图。
图12是示出适于与各个方面一起使用的示例服务器的组件框图。
具体实施方式
将参照附图对各个方面进行详细描述。只要可能的话,遍及附图将使用相同的附图标记来指代相同或相似的部分。对特定示例和实现方式的引用是出于说明性目的,并不旨在限制权利要求书的范围。
各个方面可以包括用于实现大小减小的固件存储格式以及针对固件存储格式的更新和错误管理的方法和实现这种方法的计算设备。各个方面的装置和方法可以包括固件存储格式,该固件存储格式可以包括固件描述表,该固件描述表被配置为描述固件的版本并且以如下的方式来标识与固件版本相关联的固件映像:针对不同的固件版本对闪存进行逻辑分区,其中重叠的分区用于在固件版本之间是共同的映像。各个方面的装置和方法可以包括针对各种固件版本的更新管理,该更新管理可以测试并且将固件的新版本设置为当前版本或无效版本。各个方面的装置和方法可以包括针对各种固件版本的错误管理,该错误管理可以识别固件的当前版本的错误并且切换到固件的先前版本。
术语“计算设备”和“移动计算设备”在本文中可互换用于指代以下各项中的任何一项或全部:蜂窝电话、智能电话、个人或移动多媒体播放器、个人数据助理(PDA)、膝上型计算机,平板型计算机、可转换笔记本电脑/平板电脑(2合1计算机)、智能本、超级本、上网本、掌上电脑、无线电子邮件接收器、启用多媒体互联网的蜂窝电话、移动游戏控制台、无线游戏控制器以及包括内存和可编程处理器的类似的个人电子设备。术语“计算设备”和“移动计算设备”还可以指代物联网(IoT)设备,包括有线和/或无线可连接电器以及电器的外围设备、装饰设备、安全设备,环境调节器设备、生理传感器设备、音频/视频设备、玩具、爱好和/或工作设备、IoT设备集线器等。术语“计算设备”和“移动计算设备”还可以指代个人和大众运输工具的组件。术语“计算设备”还可以指代固定计算设备,包括个人计算机、台式计算机、多合一计算机、工作站、超级计算机、大型计算机、嵌入式计算机、服务器、家庭媒体计算机和游戏控制台。
与现有的固件存储格式相比,固件存储格式可以采用固件描述表(FDT)来减小固件的大小。例如,采用全球唯一标识符(GUID)分区表(GPT)的固件存储格式可以将闪存存储设备的闪存存储空间的多个扇区(例如,32KB)仅用于GPT,而采用固件描述表的固态存储格式可以通过使用闪存存储空间的单个扇区(例如,4KB)那么少来存储固件描述表,从而减少所使用的闪存存储空间量。采用固件描述表的固态存储格式可以包括各种等级的固件描述表,至少包括黄金版本的固件描述表(针对经工厂认证可正常使用的固件),并且还可以包括当前版本的固件描述表(针对计算设备当前使用的固件)和/或试验版本的固件描述表(针对在更新中接收到的新固件,但是未确认供计算设备使用)。
固件描述表的数据可以在闪存存储器空间中的扇区的连续比特处被存储在闪存存储器空间中。固件描述表的连续存储的数据可以包括:签名(例如,4字节),其被配置为标识固件;版本(例如,4字节),其被配置为指示固件的版本;等级(例如,4字节),其被配置为指示固件描述表和/或固件的相关联的实例是黄金、当前还是试验等级;状态(例如,1字节),其被配置为指示固件有效还是无效;固件的映像数量(例如,1字节);以及分区表(PT)条目(例如,高达用于存储固件描述表的指定存储器空间的剩余空间的最大值(诸如480字节)的任何大小),其被配置为提供针对固件的映像的信息,包括闪存存储空间中的映像位置。在各个方面中,固件描述表可以包括预留空间(例如,18字节),其可以在将来用于向固件描述表的一个或多个存储数据指定更多的空间和/或用于向固件描述表的其它存储数据指定空间。
固件存储格式可以利用针对每个固件描述表等级的分区在逻辑上对闪存存储空间进行分区,包括黄金分区、当前分区和/或试验分区。每个分区可以包含匹配等级的相关联的固件描述表的页表条目的映像。分区之间不需要存在任何物理分隔。具有公共映像的固件的不同实例以及因此在相应的固件描述表中的公共页表条目,可以针对公共映像使相应分区的部分重叠。固件存储格式可以通过将公共映像的单个版本用于固件的不同实例,而不是存储公共映像的重复版本,来减少闪存存储空间的使用。
可以更新计算设备的固件。例如,可以使用空中(OTA)更新来更新固件的新版本。这样的更新可以包括经由有线或无线连接从诸如制造商之类的远程发送者接收固件描述表和任何数量的固件映像。计算设备可以使用固件的最新确认的实例(诸如黄金版本或当前版本)来引导。计算设备可以接收并且存储固件的被指定为试验版本的新版本,以将固件的试验版本的映像存储在试验分区中。计算设备可以触发重置以使用固件的试验版本来引导。成功的引导可以触发计算设备通过更改对应的固件描述表的等级条目来将固件的试验版本设置为固件的当前版本。不成功的引导可以触发计算设备使用最新确认的固件的实例来引导,并且使固件的试验版本无效,例如通过更改对应的固件描述表的状态条目和/或通过使闪存存储空间中的固件的试验版本唯一拥有的位置(包括对应的固件描述表和/或固件映像)无效。
可以使用固件存储格式来实现固件的错误管理。正在运行的固件可以在其执行期间检测到错误。响应于错误检测,固件可以设置强制固件描述表cookie,该强制固件描述表cookie指定从其引导对应固件的特定固件描述表。特定固件描述表可以是用于固件的先前无错误版本的固件描述表,包括黄金版本或先前的当前版本。计算设备可以重置并且检查是否设置了强制固件描述表cookie,例如通过检查强制固件描述表cookie的设置比特。响应于设置的强制固件描述表cookie,可以使用指定的固件描述表进行引导。响应于未设置的强制固件描述表cookie,可以使用最新的固件描述表进行引导。
如果正在运行的固件遇到意外的、不可恢复的错误,则该错误可能触发运行主引导加载程序(PBL)来跟踪错误的发生并且将该事件与门限进行比较。可以使用计数器、计时器等来实现跟踪。响应于事件超出门限,计算设备可以重置,以使用固件的先前无错误版本的固件描述表进行引导。响应于该事件超出门限,主引导加载程序可以实现意外错误处理程序并且再次运行固件。
图1示出了包括适于与各个方面一起使用的计算设备10的系统。计算设备10可以包括具有处理器14、存储器16、通信接口18和存储存储器接口20的片上系统(SoC)12。计算设备10还可以包括通信组件22(诸如有线或无线调制解调器)、存储存储器24和用于建立无线通信链路的天线26。处理器14可以包括各种处理设备中的任何一种,例如多个处理器核。
本文使用术语“片上系统”(SoC)来指代一组互连的电子电路,通常但不排他性地包括处理设备、存储器和通信接口。处理设备可以包括各种不同类型的处理器14和处理核,诸如通用处理器、中央处理单元(CPU)、数字信号处理器(DSP)、图形处理单元(GPU)、加速处理单元(APU)、计算设备的特定组件的子系统处理器(诸如用于相机子系统的图像处理器或用于显示器的显示处理器)、辅助处理器、单核处理器和多核处理器。处理设备还可以体现其它硬件和硬件组合,诸如现场可编程门阵列(FPGA)、专用集成电路(ASIC)、其它可编程逻辑器件、离散门逻辑、晶体管逻辑、性能监视硬件,看门狗硬件和时间参考。集成电路可以被配置为使得集成电路的组件驻留在单片半导体材料(例如硅)上。
SoC 12可以包括一个或多个处理器14。计算设备10可以包括一个以上的SoC 12,从而增加处理器14和处理器核的数量。计算设备10还可以包括不与SoC 12相关联的处理器14。各个处理器14可以是如下文参照图2所描述的多核处理器。处理器14可以各自被配置用于可以与计算设备10的其它处理器14相同或不同的特定目的。处理器14中的一个或多个处理器14和相同或不同配置的处理器核可以被分组在一起。处理器14或处理器核的群组可以被称为多处理器集群。
SoC 12的存储器16可以是易失性或非易失性存储器,其被配置用于存储用于由处理器14存取的数据和处理器可执行代码。计算设备10和/或SoC12可以包括被配置用于各种目的的一个或多个存储器16。一个或多个存储器16可以包括易失性存储器,诸如随机存取存储器(RAM)或主存储器、或高速缓冲存储器。这些存储器16可以被配置为临时保存以下各项:从数据传感器或子系统接收的有限数量的数据;基于各种因素预期将来的访问的、从非易失性存储器请求、从非易失性存储器加载到存储器16的数据和/或处理器可执行代码指令;和/或由处理器14生成并且临时存储以供将来快速访问而不存储在非易失性存储器中的中间处理数据和/或处理器可执行代码指令。
存储器16可以被配置为至少临时地存储数据和处理器可执行代码,该数据和处理器可执行代码从诸如另一存储器16或存储存储器24之类的另一存储器设备加载到存储器16,以供处理器14中的一个或多个处理器访问。可以响应于处理器14执行功能来加载被加载到存储器16中的数据或处理器可执行代码。响应于执行功能来将数据或处理器可执行代码加载到存储器16可能导致向存储器16的不成功或“未命中”的存储器访问请求,因为所请求的数据或处理器可执行代码不位于存储器16中。响应于未命中,可以做出向另一存储器16或存储存储器24的存储器访问请求,以将所请求的数据或处理器可执行代码从另一存储器16或存储存储器24加载到存储设备16。响应于执行功能来将数据或处理器可执行代码加载到存储器16可以导致向另一存储器16或存储存储器24的存储器访问请求,并且可以将数据或处理器可执行代码加载到存储器16以供以后访问。
存储存储器接口20和存储存储器24可以协同工作,以允许计算设备10在非易失性存储介质上存储数据和处理器可执行代码。存储存储器24可以被配置为非常类似于存储器16的一个方面,其中存储存储器24可以存储数据或处理器可执行代码以供处理器14中的一个或多个处理器14访问。作为非易失性的存储存储器24可以在计算设备10的电源已经关闭之后保留信息。当重新接通电源并且计算设备10重新启动时,存储在存储器24上的信息对于计算设备10可以是可用的。存储存储器接口20可以控制对存储存储器24的访问并且允许处理器14从存储存储器24读取数据以及将数据写入存储存储器24。
计算设备10的一些或所有组件可以被不同地布置和/或组合,同时仍然服务于各个方面的功能。计算设备10可以不限于每个组件之一,并且每个组件的多个实例可以包括在计算设备10的各种配置中。
图2示出了适于实现一个方面的计算设备的组件。处理器14可以包括多种处理器类型,包括例如CPU和各种硬件加速器,诸如GPU、DSP、APU、子系统处理器等。处理器14还可以包括定制硬件加速器,其可以包括定制处理硬件和/或被配置为实现特定功能集合的通用硬件。处理器14可以包括任何数量的处理器核200、201、202、203。具有多个处理器核200、201、202、203的处理器14可以被称为多核处理器。
处理器14可以具有多个同构或异构处理器核200、201、202、203。同构处理器可以包括多个同构处理器核。处理器核200、201、202、203可以是同构的,因为处理器14的处理器核200、201、202、203可以被配置用于相同目的并且具有相同或相似的性能特性。例如,处理器14可以是通用处理器,并且处理器核200、201、202、203可以是同构通用处理器核。处理器14可以是GPU或DSP,并且处理器核200、201、202、203可以分别是同构图形处理器核或数字信号处理器核。处理器14可以是具有同构处理器核200、201、202、203的定制硬件加速器。
异构处理器可以包括多个异构处理器核。处理器核200、201、202、203可以是异构的,因为处理器14的处理器核200、201、202、203可以被配置用于不同的目的和/或具有不同的性能特性。这样的异构处理器核的异构性可以包括不同的指令集架构、管线、工作频率等。这样的异构处理器核的示例可以包括所谓的“big.LITTLE”架构,其中较慢的低功率处理器核可以与更强大且耗电的处理器核相耦合。在类似的各方面中,SoC(例如,图1的SoC12)可以包括任意数量的同构或异构处理器14。在各个方面中,不是所有的处理器核200、201、202、203都需要是异构处理器核,因为异构处理器可以包括处理器核200、201、202、203的包括至少一个异构处理器核的任何组合。
可以为处理器14的处理器核200、201、202、203中的每一个指定专用高速缓存210、212、214、216,其可以专用于由指定处理器核200、201、202、203进行的读和/或写访问。专用高速缓存210、212、214、216可以存储数据和/或指令,并且使所存储的数据和/或指令可用于专用高速缓存210、212、214、216所专用的处理器核200、201、202、203,以用于由处理器核200、201、202、203执行。专用高速缓存210、212、214、216可以包括如本文中参照图1的存储器16所描述的易失性存储器。
处理器14还可以包括共享高速缓存230,共享高速缓存230可以被配置为通过处理器核200、201、202、203进行读取和/或写入访问。专用高速缓存210、212、214、216可以存储数据和/或指令,并且使所存储的数据和/或指令可用于处理器核200、201、202、203,以用于在处理器核200、201、202、203执行时使用。共享高速缓存230还可以用作用于向处理器14输入和/或从处理器14输出的数据和/或指令的缓冲器。共享高速缓存230可以包括如本文参考图1的存储器16描述的易失性存储器。
在图2中示出的示例中,处理器14包括四个处理器核200、201、202、203(即,处理器核0、处理器核1、处理器核2和处理器核3)。在该示例中,向每个处理器核200、201、202、203指定相应的专用高速缓存210、212、214、216(即,处理器核0和专用高速缓存0、处理器核1和专用高速缓存1、处理器核2和专用高速缓存2、处理器核3和专用高速缓存3)。为了便于解释,本文的示例可以引用图2中示出的四个处理器核200、201、202、203和四个专用高速缓存210、212、214、216。然而,在图2中示出并且在本文中描述的四个处理器核200、201、202、203和四个专用高速缓存210、212、214、216仅是作为示例来提供的,而绝不意味着将各个方面限制为具有四个指定的专用高速缓存的四核处理器系统。计算设备10、SoC12或处理器14可以单独地或组合地包括少于或多于在本文中示出和描述的四个处理器核200、201、202、203以及专用高速缓存210、212、214、216。
处理器14还可以通信地连接到包括在SoC上和/或与SoC分离的易失性和非易失性存储器设备的组合,诸如只读存储器(ROM)232、闪存234和/或随机存取存储器(RAM)236(其任何组合可以是图1中的存储器16的一部分)。只读存储器232可以是非易失性和/或非可编程存储器。只读存储器232可以被配置为:存储用于计算设备和/或计算设备的子系统的基本输入/输出系统(BIOS)和/或主引导加载程序(PBL),其可以是用于引导计算设备的代码;以及加载更高级别的代码和功能,诸如固件、操作系统和/或其它软件程序的代码和功能。只读存储器232可以被配置为使得在没有特定设备和/或不更换只读存储器232的情况下,不能在只读存储器232上更改BIOS和主引导加载程序代码。对BIOS和主引导加载程序的保护可以确保BIOS和主引导加载程序将不被损坏,并且计算设备将能够至少引导和初始化计算设备硬件组件。
闪存234可以是非易失性和/或可编程存储器。闪存234可以被配置为存储用于计算设备的可编程硬件组件的固件,包括代码和/或数据,如本文参考图3-5进一步描述的。固件可以被配置为提供可编程硬件组件的功能和控制。固件可以包括固件描述表(如本文参考图3和4进一步描述的)和固件映像,固件映像可以包括用于执行固件的代码和/或数据。可以通过将额外的固件代码和/或数据覆盖和/或存储到闪存234来修改和/或更新固件。计算设备的制造商可以使用固件更新来纠正固件中的错误和/或提供对计算设备的可编程硬件的新的和/或经更新的功能和/或控制。在各个方面中,固件更新的固件映像可以包括用于固件的更新实例的所有固件映像。在各个方面中,固件更新的固件映像可以包括用于固件的更新实例的固件映像,所述更新实例对于固件而言是新的和/或是从固件的先前实例改变的。
随机存取存储器236可以是易失性和/或可编程存储器。随机存取存储器236可以被配置为在随机存取存储器236被供电以访问固件以执行固件的同时临时存储固件。固件的可执行部分可以在加载到随机存取存储器的固件映像中。可以在固件的执行期间修改固件(特别是固件数据),以采用不同的方式和/或针对不同的可编程硬件组件来实现可编程硬件组件的功能和控制。
处理器14可以访问只读存储器232、闪存234和/或随机存取存储器236中的每一个。处理器14可以访问只读存储器232以取得并且执行存储在只读存储器中的BIOS和主引导加载程序。处理器14可以通过执行BIOS和主引导加载程序来引导计算设备和/或计算设备的子系统。处理器14还可以访问闪存234以取得固件并且将固件存储到随机存取存储器236。处理器14还可以访问闪存234以实现对闪存234中固件的更新。处理器14可以访问随机存取存储器236,以存储、取得和修改固件以执行计算设备的可编程硬件组件的功能和控制。
为了便于参考,术语“硬件加速器”,“定制硬件加速器”,“多核处理器”,“处理器”和“处理器核”在本文中可以互换使用。本文中对所示出的计算设备及其各个组件的描述仅意味着是示例性的,而绝不是限制性的。所示出的示例计算设备的若干组件可以被可变地配置、组合和分离。可以包含更多或更少数量的若干组件,并且它们可以在SoC内以不同的方式定位和连接或者与SoC分离。
图3A-3C示出了适于实现各个方面的示例大小减小的固件存储格式。图3A-3C中的表300、302、304是图3A中的固件描述表300、图3B中的等级表302、以及图3C中的分区表条目表304的表示。在各个方面中,表300、302、304可以描述在闪存(例如,图2中的闪存234)中的固件描述表的类型和大小数据,但是未必是数据如何被存储在闪存中的结构,如本文参考图4进一步描述的。
图3A示出了示例固件描述表300。固件描述表300可以包括与存储在闪存中的固件描述表数据的类型相对应的多个字段和闪存中的固件描述表数据的类型的大小。固件描述表300可以在固件描述表300的字段中包括被配置为标识和定义固件的实例的数据。在各个方面中,固件描述表300可以在固件描述表300的字段中包括数据类型的数据,数据类型包括签名、版本、等级、状态、固件映像的编号(no.)和/或分区表(PT)条目。固件描述表300的签名字段中的签名数据可以被配置为标识固件。例如,可以使用来自固件描述表300中的签名字段的签名数据来进行固件执行的调用,以识别正确的固件以用于执行。在各个方面中,来自在固件描述表300中的签名字段的签名数据可以使用闪存中的任何数量的空间,诸如闪存中的四(4)字节的空间。
固件描述表300的版本字段中的版本数据可以被配置为从固件的具有版本数据的不同值的其它实例中识别固件的实例。在各个方面中,可以向固件的实例分发版本数据的顺序值,并且固件描述表300的版本字段中的版本数据可以指示固件的实例的年龄,相对于固件的另一实例的年龄而言。例如,在用于固件的连续实例的递增的值的方案中,相对于另一固件描述表的版本字段中的另一值版本数据而言固件描述表300的版本字段中的较低值版本数据可以指示相对于固件的另一实例而言固件的较旧实例。
在各个方面中,固件描述表300的版本字段中的版本数据可以用于对固件实例进行优先级排序。在各个方面中,可以使用任何方案来指派固件的实例的版本数据,并且可以使用类似方案来确定固件的多个实例之间的相对关系。在各个方面中,固件的不同实例可以具有至少一个彼此不同的分区表条目。在各个方面中,签名固件描述表数据可以使用闪存中的任何数量的空间,诸如闪存中的四(4)字节的空间。
固件描述表300的签名字段中的签名数据和固件描述表300的版本字段中的版本数据可以在一起唯一地标识固件的特定实例。例如,固件描述表300的签名字段中的签名数据可以用于从具有不同数据的固件中识别共享相同签名数据的固件的所有实例。此外,固件描述表300的版本字段中的版本数据可以用于从共享在多个固件描述表的签名字段中的相同签名数据的固件的实例集合中唯一地识别固件的实例。
固件描述表300的等级字段中的等级数据的一部分可以被配置为指示固件的实例的可靠性等级。在各个方面中,图3B中的等级表302可以示出固件描述表300的等级字段中的等级数据的潜在值、以及计算设备对那些等级固件数据的相关联的解释。固件描述表300的等级字段中的等级数据可以指示如何处理和执行固件的实例,如在本文中参考图6-图9进一步描述的。在各个方面中,固件描述表300的等级字段中的等级数据可以使用闪存中的任何数量的空间,诸如闪存中的四(4)字节的空间。
在各个方面中,值可以与黄金分区相关联,黄金分区可以指示:在固件描述表300的等级字段中具有等级数据的该值的固件的实例是最受信任的固件。在各个方面中,固件描述表300的等级字段中的黄金分区等级数据可以指示固件的实例的固件映像被制造商加载至闪存。固件的黄金分区等级实例可以用于随时引导计算设备和/或计算设备的子系统。在各个方面中,固件的黄金分区等级实例可以是在实现对固件的更新之前固件的存储在闪存上的唯一实例。在各个方面中,可以响应于各种准则,其指示在使用固件的不同等级实例来引导计算设备和/或计算设备的子系统时的失败和/或错误,来使用固件的黄金分区等级实例引导计算设备和/或计算设备的子系统。在各个方面中,与黄金分区等级相关联的、固件描述表300的等级字段中的等级数据的值可以包括任何值,包括等级值集合的任何端值,诸如最小值,例如零值(例如,0x00)。
在各个方面中,和与黄金分区相关联的值不同的值可以与试验分区相关联,试验分区可以指示在固件描述表300的等级字段中具有等级数据的该值的固件的实例是固件的更新。在各个方面中,固件描述表300的等级字段中的试验分区等级数据可以指示:固件的实例的固件映像是由制造商和/或通过先前更新在先前存储到闪存的固件映像的更新。固件的试验分区等级实例可以用于引导计算设备和/或计算设备的子系统以测试固件的试验分区等级实例的固件映像的可靠性。在各个方面中,与黄金分区等级相关联的、固件描述表300的等级字段中的等级数据的值可以包括任何值,包括等级值集合的任何端值,诸如最大值(例如,0x FFFFFFFF)。
在各个方面中,和与黄金分区和试验分区相关联的值不同的值可以与当前分区相关联,当前分区可以指示:在固件描述表300的等级字段中具有用于等级数据的该值的固件的实例是可以用于引导计算设备的固件的可靠版本。在各个方面中,固件描述表300的等级字段中的当前分区等级数据可以指示固件的实例的固件映像是由制造商和/或通过先前更新存储到闪存的固件映像的先前更新。
固件的当前分区等级实例通常可以用于引导计算设备和/或计算设备的子系统。在各个方面中,固件的多个当前分区等级实例可以被存储在闪存中。固件的当前分区等级实例可以指示固件的实例的固件映像是由制造商和/或通过先前更新在先前存储到闪存中的固件映像的更新。固件的当前分区等级实例可以是固件的已经被确定为可靠的先前试验分区等级实例,并且试验分区等级已经被转换为当前分区等级。在各个方面中,与当前分区等级相关联的固件描述表300的等级字段中的等级数据的值可以包括任何值,包括等级值集合的端值之间的任何值,诸如在最小值和最大值之间的任何值(例如,0x00<Y<0xFFFFFFFF)。
在各个方面中,可以响应于各种准则,其指示在使用固件的不同的当前和/或试验分区等级实例来引导计算设备和/或计算设备的子系统时的失败和/或错误,来使用固件的当前分区等级实例引导计算设备和/或计算设备的子系统。
固件描述表300的状态字段中的状态数据可以被配置为标识固件的实例的有效性。固件的实例的有效性可以指示固件的实例是否被认为是固件的可靠实例,该可靠实例先前可能已经被成功执行而没有错误。在固件描述表300的状态字段中具有有效状态数据的固件的实例可以由计算设备执行,并且在固件描述表300的状态字段中具有无效状态数据的固件的实例可以不由计算设备执行。在默认情况下,固件的实例可以在固件描述表300的状态字段中具有有效状态数据,直到根据各种准则将它们视为固件的不可靠实例为止,如本文参考图6-图9进一步描述的。被认为不可靠的固件的实例可以在固件描述表300的状态字段中将其有效状态数据更改为在固件描述表300的状态字段中的无效状态数据。固件的多个实例可以在多个固件描述表的状态字段中具有有效或无效状态数据。在各个方面中,固件描述表300的状态字段中的状态数据可以使用闪存中的任何数量的空间,诸如闪存中的一(1)字节的空间。
固件描述表300的等级字段中的等级数据和固件描述表300的状态字段中的状态数据可以在一起用于确定固件的各个实例的执行顺序,如本文参考图6-图9进一步描述的。例如,从非引导状态开始,计算设备可以使用在固件描述表300的等级字段中具有当前或黄金分区等级数据并且在固件描述表300的状态字段中具有有效状态数据的固件的实例来进行引导。在运行的(即,当前引导的)计算设备上,在重新引导期间,计算设备可以使用在固件描述表300的等级字段中具有试验、当前或黄金分区等级数据并且在固件描述表300的状态字段中具有有效状态数据的固件的实例来进行引导。响应于在执行固件的试验或当前分区等级实例时的错误,计算设备可以切换为使用在固件描述表300的等级字段中具有当前或黄金分区等级数据并且在固件描述表300的状态字段中具有有效状态数据的固件的实例来进行引导。
在各个方面中,计算设备可以使用固件的按照可靠性增加的顺序的各种版本来进行引导,例如,从固件的较低可靠性的试验或当前分区等级实例开始,并且在执行固件的较低可靠性的试验或当前分区等级实例时失败或出错时,切换到固件的较高可靠性的当前或黄金分区等级实例。在各个方面中,在固件的多个当前分区等级实例之间,固件描述表300的版本字段中的版本数据还可以用于确定固件的实例的执行顺序。例如,为了切换到固件的更高可靠性的当前分区等级实例,可以按照年龄增加的顺序(即,最新到最旧)来执行固件的有效和当前分区等级实例。
固件描述表300的映像数量字段中的映像数量数据可以被配置为标识固件的实例的固件映像数量。固件的各个实例可以包括不同数量的固件映像,因为与固件的先前实例中包括的固件映像相比,该固件的实例的每个更新版本可以包括针对该固件的实例的更多或更少的固件映像。额外的固件映像可以为固件提供新的和/或更改的功能,而更少的固件映像可以为固件提供移除功能和/或用于简化固件的代码。针对固件的每个实例,固件的不同实例之间的任何重叠的固件映像可以被包括在固件描述表300的映像数量字段中的映像数量数据中。在各个方面中,固件描述表300的映像数量字段中的映像数量数据可以使用闪存中的任何数量的空间,诸如闪存中的一(1)字节的空间。
在各个方面中,固件描述表300可以另外包括保留数据字段,保留数据字段可以被配置为是闪存中的占位符,以扩展用于固件描述表300的字段和/或可以添加到固件描述表300中的将来的类型的字段和数据的空间。固件描述表300的保留字段可以使用闪存中的任何数量的空间,诸如闪存中的十八(18)字节的空间。
固件描述表300的分区表条目字段中的分区表(PT)条目数据可以被配置为标识和描述固件的实例的固件映像。在各个方面中,图3C中的分区表条目表304可以示出与存储在闪存中的固件描述表300的字段中的另外的类型的数据以及闪存中的固件描述表300中的这些类型的数据的大小相对应的字段。分区表条目表304可以是较大的固件描述表300的子集。在各个方面中,分区表条目表304可以在数据类型的字段中包括数据,该数据包括印象标识符(ID)、起始扇区、和/或大小。
对于固件的实例的每个固件映像,分区表条目表304的字段中的数据可以被包括在固件描述表300中。在各个方面中,可以通过分区表条目表304的字段中的数据集合来标识和描述固件的实例的每个固件映像。在各个方面中,不同的固件分区表300可以在分区表条目表304的字段中包括相同和不同数据的任何组合。分区表条目表304的字段中共享的相同数据可以用于由相应的固件描述表300描述的固件的实例共享的原始和/或经更新的固件映像。分区表条目表304的字段中的不同数据可以用于在相应的固件描述表300之间非共享的不同和/或经更新的固件映像。术语“分区表条目表304的'X'字段中的数据”和“固件描述表300的'X'字段中的数据”在本文中可以互换使用。
分区表条目表304的映像标识符字段中的映像标识符数据可以被配置为标识固件映像。例如,可以使用分区表条目表304的映像标识符字段中的映像标识符数据来识别正确的固件映像用于执行,来进行对执行固件映像的调用。在各个方面中,分区表条目表304的映像标识符字段中的映像标识符数据可以使用闪存中的任何数量的空间,诸如闪存中的四(4)字节的空间。
分区表条目表304的起始扇区字段中的起始扇区数据可以被配置为标识固件映像在闪存中的位置。如本文参考图5进一步描述的,固件的各个实例可以将它们的固件映像存储在闪存的与它们的等级相对应的分区中。闪存的分区可以包括闪存的任何数量的单元,诸如扇区。分区表条目表304的起始扇区字段中的起始扇区数据可以指定闪存的存储固件映像的扇区。分区表条目表304的起始扇区字段中的起始扇区数据可以用于从闪存中取得用于执行和/或要写入到随机存取存储器中的固件映像。在各个方面中,分区表条目表304的起始扇区字段中的起始扇区数据可以使用闪存中的任何数量的空间,诸如闪存中的四(4)字节的空间。
分区表条目表304的大小字段中的大小数据可以被配置为指示闪存中的固件映像的大小。分区表条目表304的大小字段中的大小数据可以以闪存的任何单元来表示,诸如比特和/或字节的各种尺度。分区表条目表304的大小字段中的大小数据可以用于从闪存中取得用于执行和/或要写入到随机存取存储器中的固件映像。在各个方面中,分区表条目表304的大小字段中的大小数据可以使用闪存中的任何数量的空间,例如闪存中的四(4)字节的空间。
在各个方面中,分区表条目表304可以另外包括保留数据字段,其可以被配置为是闪存中的占位符,以用于扩展分区表条目表304的字段和/或可以添加到分区表条目表304的将来的类型的字段和数据的空间。分区表条目表304的保留数据字段可以使用闪存中的任何数量的空间,诸如闪存中的四(4)字节的空间。
如本文中所述的,固件描述表300的每个字段可以使用闪存中的指定数量的空间。在各个方面中,由字段使用的闪存中的空间可以被配置为使得固件描述表300可以被存储在闪存的单个单元(诸如扇区)中。至少一个固件描述表300可以被存储在闪存中,并且其可以被存储在闪存的第一/开始扇区处,诸如在闪存中具有最低地址的扇区。可以是在闪存中存储的唯一的固件描述表300的固件描述表300可以是黄金固件描述表300,即在固件描述表300的等级字段中具有黄金分区等级数据的固件描述表300。任意数量的固件描述表300可以被存储在闪存中。在一些方面中,固件描述表300可以被存储在闪存中的连续扇区中。在一些方面中,最多三(3)个固件描述表300可以被存储在闪存中。在各个方面中,最多三个固件描述表300中的每一个可以在固件描述表300的等级字段中包括不同的等级数据。扇区可以使用的闪存的空间数量可以取决于计算设备的配置。在一个示例中,扇区可以是4KB,并且固件描述表300可以针对每个固件描述表300使用4KB的闪存。对于最多三个固件描述表300,用于固件描述表300的总存储开销可以是12KB。
图4示出了适于实现各个方面的闪存中的示例大小减小的固件存储格式。如本文中所述的,固件描述表数据可以被存储在闪存(例如,图2中的闪存234)的扇区400中。在各个方面中,与固件描述表的字段(例如,签名402、版本404、等级406、状态408、映像数量(no.)410、分区表(PT)条目1 414、分区表条目2 416,分区表条目N 418)相对应的固件描述表数据可以作为连续的数据比特存储在闪存的扇区400中。分区表条目414、416、418的字段可以被细分成分区表条目表的字段(例如,映像标识符(ID)420、起始扇区422、大小424)。分区表条目414、416、418的字段的数量可以是任何整数N。在各个方面中,可以以相同的方式将多个固件描述表的固件描述表数据存储在闪存中的连续扇区400中。在各个方面中,与固件描述表的字段相对应的固件描述表数据可以以任何顺序布置在闪存的扇区400中。在各个方面中,闪存的扇区400中的连续的数据比特可以包括保留比特,和/或分区表条目414、416、418的细分字段可以包括保留比特。
图5示出了适于实现各个方面的闪存中的示例性大小减小的固件存储格式。闪存500(例如,图2中的闪存234)可以被配置为存储固件描述表和固件映像。如本文中所述的,固件描述表可以被存储在闪存500中从闪存500的第一/起始扇区502开始的连续扇区502、504、506中。在各个方面中,存储固件描述表的506的扇区502、504、506中的每一个可以在固件描述表(例如,固件描述表300)的等级字段中存储具有与其它固件描述表不同的等级数据的固件描述表。例如,扇区502可以存储黄金固件描述表,扇区504可以存储当前固件描述表,并且扇区506可以存储试验固件描述表。
此外,闪存500可以被逻辑分区,使得可以配置任意数量的逻辑分区来存储被包括在固件描述表中的固件映像。固件映像可以被存储在闪存中的跟在存储固件描述表的扇区502、504、506之后的连续扇区中。逻辑分区可以与固件描述表相关联。例如,黄金分区等级固件描述表可以与被配置为存储在黄金分区等级固件描述表中包括的固件映像的黄金逻辑分区相关联。在图5所示的示例中,黄金逻辑分区可以包括逻辑分区508a、508b、510a、510b、510c、512。类似地,当前分区等级固件描述表可以与被配置为存储在当前分区等级固件描述表中包括的固件映像的当前逻辑分区相关联。在图5所示的示例中,当前逻辑分区可以包括逻辑分区510a、510b、510c、512、514a、514b、514c、516a、516b。试验分区等级固件描述表可以与被配置为存储在试验分区等级固件描述表中包括的固件映像的试验逻辑分区相关联。在图5所示的示例中,试验逻辑分区可以包括逻辑分区512、516a、516b、518。
黄金逻辑分区、当前逻辑分区和试验逻辑分区可以由相应的固件描述表的分区表条目表数据中包括的固件映像的位置来定义。如本文中所述的,不同的固件分区表可以包括相同和不同的分区表条目表数据的任何组合。换句话说,黄金逻辑分区、当前逻辑分区和试验逻辑分区可以与任何其它逻辑分区完全分开和/或部分地重叠。闪存500中的逻辑分区之间可能不存在物理隔离。在图5所示的示例中,黄金逻辑分区、当前逻辑分区和/或试验逻辑分区可以部分地重叠。逻辑分区508a、508b可以专用于黄金逻辑分区。逻辑分区510a、510b、510c可以包括黄金逻辑分区和当前逻辑分区的重叠部分。逻辑分区512可以包括黄金逻辑分区、当前逻辑分区和试验逻辑分区的重叠部分。逻辑分区514a、514b、514c可以专用于当前逻辑分区。逻辑分区516a、516b可以包括当前逻辑分区和试验逻辑分区的重叠部分。逻辑分区518可以专用于试验逻辑分区。
图6示出了根据一个方面的用于实现加载和更新大小减小的固件存储格式的方法600。方法600可以在计算设备中在以下各项中实现:在处理器(例如,图1和图2中的处理器14)中执行的软件、通用硬件、专用硬件、或者软件配置的处理器和专用硬件的组合,诸如执行计算设备引导系统内的软件的处理器,该计算设备引导系统包括其它各个组件(例如,图1中的存储器16、24、只读存储器232、闪存234和图2中的随机存取存储器236、图5中的闪存500)和各种存储器/高速缓存控制器。为了包含在各个方面中启用的替代配置,实现方法600的硬件在本文中被称为“处理设备”。
在框602中,处理设备可以使用被存储在只读存储器中的代码来引导计算设备和/或计算设备的子系统。在各个方面中,处理设备可以执行被存储在只读存储器中的BIOS和/或主引导加载程序以执行引导过程。
在框604中,处理设备可以从闪存中取得固件并将固件加载到随机存取存储器。从闪存中取得固件可以包括:取得在固件描述表的状态字段中包括有效状态数据的固件的最新实例。例如,可以取得固件的当前分区等级实例,而不是固件的黄金分区等级实例。固件描述表的状态字段中针对固件的当前分区等级实例的有效状态数据可以指示固件的当前分区等级实例对于用于引导计算设备和/或计算设备的子系统而言是可靠的。在各个方面中,在从非引导状态的初始引导期间,在闪存中存储的固件描述表的状态字段中具有有效状态数据的固件的试验分区等级实例可能不存在。如本文中进一步描述的,响应于接收到固件的试验分区等级实例,可以针对可靠性来测试固件的试验分区等级实例。响应于被认为是可靠的,可以将固件的试验分区等级实例转换为固件的当前分区等级实例,并且响应于被认为是不可靠的,可以将固件的试验分区等级实例设置为在固件描述表的状态字段中具有无效状态数据。在各个方面中,取得固件可以包括取得固件描述表和/或固件的实例的固件映像。从闪存中取得的固件可以被存储在随机存取存储器中以用于执行固件。
在框606中,处理设备可以执行被存储在随机存取存储器中的固件映像。执行固件映像可以继续引导过程,并且导致实现与固件相关联的计算设备的可编程硬件组件的功能和控制。
在框608中,处理设备可以接收固件的更新,并且将固件的更新存储到闪存。固件的更新可以包括试验分区等级固件描述表和至少一个固件映像。在各个方面中,试验分区等级固件描述表可以被配置为描述固件映像,其包括先前固件描述表(例如,黄金等级分区固件描述表和/或当前等级分区固件描述表)的至少一个固件映像和/或任意数量的新固件映像的任何组合。在各个方面中,处理设备可以将固件的更新作为由计算设备和/或计算设备的组件的制造商和/或第三方(诸如供应商或服务提供商)发送的空中更新进行接收。处理设备可以经由有线和/或无线连接来接收固件的更新。处理设备可以将在闪存的连续扇区中的试验分区等级固件描述表存储到用于存储当前分区等级固件描述表的扇区。类似地,处理设备可以将在闪存的连续扇区中的任何新的固件映像存储到用于存储针对固件的当前分区等级实例添加到闪存中的固件映像的最后扇区。在各个方面中,可以以乒乓方式发生多个更新,其中闪存的用于存储当前分区等级固件描述表的扇区变为闪存的用于存储试验分区等级固件描述表的扇区,并且用于存储试验分区等级固件描述表的扇区变为用于存储当前分区等级固件描述表的扇区。用于存储不同等级固件描述表的指定的切换可以是基于将试验分区等级固件描述表确认为有效的当前等级固件描述表而发生的。可以实现闪存的用于存储与不同等级的固件描述表相关联的固件映像的扇区的类似的乒乓分配。
在框610中,处理设备可以触发计算设备和/或计算设备的子系统的重置。可以响应于对固件更新的接收和存储来触发重置。
在框612中,处理设备可以重置计算设备和/或计算设备的子系统。在本文中参考图7-图9中的方法700、800、900进一步描述重置计算设备和/或计算设备的子系统,方法700、800、900中的任何方法可以是根据计算设备的配置来实现的。
图7示出了根据一个方面的用于实现加载和更新合适的大小减小的固件存储格式的方法700。方法700可以在计算设备中在以下各项中实现:在处理器(例如,图1和图2中的处理器14)中执行的软件、通用硬件、专用硬件、或者软件配置的处理器和专用硬件的组合,诸如执行计算设备引导系统内的软件的处理器,该计算设备引导系统包括其它各个组件(例如,图1中的存储器16、24、只读存储器232、闪存234和图2中的随机存取存储器236、图5中的闪存500)和各种存储器/高速缓存控制器。为了包含在各个方面中启用的替代配置,实现方法700的硬件在本文中被称为“处理设备”。在各个方面中,方法700还可以描述图6中的方法600的框612和/或被实现为独立方法。
在可选框602中,如参考图6中的方法600的框602所描述的,处理设备可以使用被存储在只读存储器中的代码来引导计算设备和/或计算设备的子系统。在各个方面中,使用被存储在只读存储器中的代码来引导计算设备和/或计算设备的子系统可以在可选框602中实现,以用于在从非引导状态的初始引导期间和/或在重新引导期间引导计算设备和/或计算设备的子系统。在各个方面中,由于可以保存计算设备组件的状态和初始化,因此在重新引导期间可以不必重复在可选框602中使用被存储在只读存储器中的代码来引导计算设备和/或计算设备的子系统。
在框604中,如参考图6中的方法600的框604所描述的,处理设备可以从闪存中取得固件并且将固件加载到随机存取存储器。从闪存中取得固件可以包括取得固件的在固件描述表的状态字段中包括有效状态数据的最新实例。例如,存储的固件的更新可以在固件表描述的等级字段中包括试验分区等级数据,以指示固件的更新是固件的最新实例。存储的固件的更新还可以在固件描述表的状态字段中包括有效状态数据,以确保在下次引导和/或重新引导时执行固件的该实例以执行固件的最新实例。从闪存中取得的固件可以被存储在随机存取存储器中,以用于执行固件。
在框606中,如参考图6中的方法600的框606所描述的,处理设备可以执行被存储在随机存取存储器中的固件映像。执行固件映像可以是引导和/或重新引导过程的一部分。
在确定框702中,处理设备可以确定引导计算设备和/或计算设备的子系统是否成功。在各个方面中,确定引导是否成功可以包括:确定针对执行被存储在随机存取存储器中的固件映像是否检测到错误,该错误指示引导不成功。在各个方面中,确定引导是否成功可以包括:确定检测到的错误数量是否超过错误门限,超过该错误门限指示引导不成功。在各个方面中,确定引导是否成功可以包括确定引导是否在超时门限之前完成,在超时门限之前完成指示引导成功。
响应于确定引导不成功(即,确定框702=“否”),在框704中,处理设备可以使固件的加载实例无效。在各个方面中,固件的加载实例可以是作为固件的更新而接收的固件的试验等级分区实例。为了使固件的加载实例无效,处理设备可以将固件的加载实例的固件描述表的状态字段中的状态数据在闪存中从有效值改变为无效值。
在框612中,如参考图6中的方法600的框612所描述的,处理设备可以重置计算设备和/或计算设备的子系统。
响应于确定引导成功(即,确定框702=“是”),在框706中,处理设备可以将固件的加载实例设置为固件的当前分区等级实例。处理设备可以将固件的加载实例的固件描述表的等级字段中的等级数据在闪存中从试验分区值改变为当前分区值。当前分区值可以包括在等级值集合的端值之间的下一个顺序当前分区值。在诸如乒乓方式更新之类的各个方面中,可能不存在基于改变固件描述表的等级字段中的等级数据的对固件描述表和/或固件映像在闪存内的移动,这是因为闪存的扇区的指定可以与固件描述表的等级字段中的等级数据的改变相对应地进行改变。
在各个方面中,将固件的加载实例设置为固件的当前分区等级实例可以包括将固件描述表写入闪存的用于当前分区等级固件描述表的扇区。在各个方面中,将固件的加载实例设置为固件的当前分区等级实例可以包括将固件的加载实例的固件映像写入闪存的连续扇区,所述连续扇区跟在闪存的用于存储以下内容的扇区之后:固件的黄金分区等级实例的固件映像和/或由固件的加载实例使用的固件的先前的当前分区等级实例的固件映像。在各个方面中,将固件的加载实例的固件描述表和/或固件映像写入闪存可以响应于关闭和/或重新引导计算设备和/或计算设备的子系统的命令而发生,并且可以在使固件的先前的当前分区等级实例无效之后发生。
在框708中,处理设备可以使固件的先前的当前分区等级实例无效。为了使固件的先前的当前分区等级实例无效,处理设备可以将固件的加载实例的固件描述表的状态字段中的状态数据在闪存中从有效值改变为无效值。在各个方面中,使固件的先前的当前分区等级实例无效也可以包括将包括固件描述表和固件映像的固件的被无效的当前分区等级实例存储到闪存中的另一位置和/或存储到存储器存储设备(诸如硬盘驱动器)。
图8示出了根据一个方面的用于实现加载和切换到适合的特定大小减小的固件存储格式版本的方法800。方法800可以在计算设备中在以下各项中实现:在处理器(例如,图1和图2中的处理器14)中执行的软件、通用硬件、专用硬件、或者软件配置的处理器和专用硬件的组合,诸如执行计算设备引导系统内的软件的处理器,该计算设备引导系统包括其它各个组件(例如,图1中的存储器16、24、只读存储器232、闪存234和图2中的随机存取存储器236、图5中的闪存500)和各种存储器/高速缓存控制器。为了包含在各个方面中启用的替代配置,实现方法800的硬件在本文中被称为“处理设备”。在各个方面中,方法800还可以描述图6中的方法600的框612和/或被实现为独立方法。
在可选框602中,处理设备可以使用被存储在只读存储器中的代码来引导计算设备和/或计算设备的子系统。在框604中,处理设备可以从闪存中取得固件并且将固件加载到随机存取存储器。在框606中,处理设备可以执行被存储在随机存取存储器中的固件映像。在各个方面中,可以如参考图6和图7中的方法600、700的(可选)框602、框604和框606所描述的来实现可选框602、框604和框606。
在框802中,处理设备可以检测在执行加载到随机存取存储器的固件的固件映像中的错误。可以以各种已知的方式来实现针对执行固件映像的错误检测,包括错误检测和处理硬件和/或软件,和/或使用性能速度、时间、功率和/或资源使用监测和门限比较来确定是否超过了指示错误的门限。
在框804中,处理设备可以确定是否检测到在执行加载到随机存取存储器的固件的固件映像中的错误。确定是否检测到错误可以包括接收错误信号和/或检查指定存储器位置(诸如错误寄存器)中的错误指示符。
响应于确定没有检测到在执行加载到随机存取存储器中的固件的固件映像中的错误(即,确定框804=“否”),在框606中,处理设备可以执行被存储在随机存取存储器中的固件映像。
响应于确定检测到在执行加载到随机存取存储器的固件的固件映像中的错误(即,确定框804=“是”),在框806中,处理设备可以设置强制固件描述表指示符。强制固件描述指示符可以被配置为指示被指定用作强制固件描述表的固件描述表将被用于引导计算设备和/或计算设备的子系统以用于下一次引导和/或重新引导。强制固件描述指示符可以被存储在指定的存储器位置,诸如强制固件描述寄存器,当引导和/或重新引导计算设备和/或计算设备的子系统时,该指定的存储器位置维持针对强制固件描述指示符的设置。强制固件描述表可以是在固件描述的等级字段中具有当前或黄金分区等级数据的任何固件描述表。在各个方面中,强制固件描述表可以是固件的当前分区等级实例,其在固件描述表的等级字段中具有与固件的正在执行的实例相比更早的版本数据值。强制固件描述表和/或针对强制固件描述表的标识符可以被存储在指定的存储器位置中,诸如强制固件描述寄存器中,当引导和/或重新引导计算设备和/或计算设备的子系统时,该指定的存储器位置维持强制固件描述表和/或标识符。针对强制固件描述表的标识符可以包括固件描述表的字段的任何组合中的数据和/或存储强制固件描述表的存储器中的位置的指示符的唯一组合。
在框808中,处理设备可以使用强制固件描述表来重置计算设备和/或计算设备的子系统。在各个方面中,可以如参考图6中的方法600的框612所描述的,但是特别是使用指定为强制固件描述表的固件描述表来实现重置计算设备。
图9示出了根据一个方面的用于实现加载并且恢复到合适的先前大小减小的固件存储格式版本的方法900。方法800可以在计算设备中在以下各项中实现:在处理器(例如,图1和图2中的处理器14)中执行的软件、通用硬件、专用硬件、或者软件配置的处理器和专用硬件的组合,诸如执行计算设备引导系统内的软件的处理器,该计算设备引导系统包括其它各个组件(例如,图1中的存储器16、24、只读存储器232、闪存234和图2中的随机存取存储器236、图5中的闪存500)和各种存储器/高速缓存控制器。为了包含在各个方面中启用的替代配置,实现方法900的硬件在本文中被称为“处理设备”。在各个方面中,方法900还可以描述图6中的方法600的框612和/或被实现为独立方法。
在可选框602中,处理设备可以使用被存储在只读存储器中的代码来引导计算设备和/或计算设备的子系统。在框604中,处理设备可以从闪存中取得固件并且将固件加载到随机存取存储器。在框606中,处理设备可以执行被存储在随机存取存储器中的固件映像。在各个方面中,可以如参考图6和图7中的方法600、700的(可选)框602、框604和框606所描述的来实现可选框602、框604和框606。
在框902中,响应于检测到在执行加载到随机存取存储器的固件的固件映像中的错误,处理设备可以触发计算设备和/或计算设备的子系统的重置。检测错误可以包括接收错误信号和/或检查指定存储器位置(诸如错误寄存器)中的错误指示符。
在框904中,处理设备可以更新重置计数器。重置计数器可以包括计数器和/或计时器,当加载到随机存取存储器的固件的固件映像的执行中发生错误时可以改变计数器和/或计时器。例如,可以响应于检测到错误来递增计数器。在另一示例中,计时器可以继续计数,直到响应于计算设备和/或计算设备的子系统的引导完成(其可能由于发生错误而延迟)而将该计数器重置为止。
在确定框906中,处理设备可以确定重置计数器的值是否超过重置门限。可以将重置计数器的值与重置门限的值进行逻辑和/或算术比较,以确定重置计数器的值是否超过重置门限。
响应于确定重置计数器的值超过重置门限(即,确定框906=“是”),在框908中,处理设备可以将强制固件描述表设置为在固件描述表的状态字段中具有有效状态数据的先前的当前和/或黄金分区等级固件描述表。可以如本文参考图8中的方法800的框806所描述的来实现设置强制固件描述表。
在框808中,处理设备可以使用强制固件描述表来重置计算设备和/或计算设备的子系统,如本文参考图8中的方法800的框808所描述的。
响应于确定重置计数器的值未超过重置门限(即,确定框906=“否”),在框910中,处理设备可以执行不期望的重置处理程序。
在框612中,处理设备可以重置计算设备和/或计算设备的子系统,如参考图6中所示的方法600的框612所描述的。
可以在包括移动计算设备的各种计算系统中实现各个方面(包括但不限于以上参考图1-图9描述的各方面),在图10中示出了适合与各个方面一起使用的移动计算设备的示例。移动计算设备1000可以包括处理器1002,处理器1002耦合到触摸屏控制器1004和内部存储器1006。处理器1002可以是被指定用于通用或特定处理任务的一个或多个多核集成电路。内部存储器1006可以是易失性或非易失性存储器,并且还可以是安全的和/或加密的存储器、或不安全的和/或未加密的存储器、或其任意组合。可以利用的存储器类型的示例包括但不限于DDR、LPDDR、GDDR、WIDEIO、RAM、SRAM、DRAM、P-RAM、R-RAM、M-RAM、STT-RAM和嵌入式DRAM。触摸屏控制器1004和处理器1002还可以耦合到触摸屏面板1012,诸如电阻式感测触摸屏、电容式感测触摸屏、红外线感测触摸屏等。另外,计算设备1000的显示器不必具有触摸屏能力。
移动计算设备1000可以具有用于发送和接收通信的一个或多个无线电信号收发机1008(例如,Peanut、蓝牙、ZigBee、Wi-Fi、RF无线电)和天线1010,其彼此耦合和/或耦合到处理器1002。收发机1008和天线1010可以与上文提到的电路一起使用以实现各种无线传输协议栈和接口。移动计算设备1000可以包括蜂窝网络无线调制解调器芯片1016,其实现经由蜂窝网络的通信并且耦合到处理器。
移动计算设备1000可以包括耦合到处理器1002的外围设备连接接口1018。外围设备连接接口1018可以被单独地配置为接受一种类型的连接,或者可以被配置为接受各种类型的物理和通信连接,公共或专有的,诸如通用串行总线(USB)、火线、雷电接口或PCIe。外围设备连接接口1018还可以耦合到类似地配置的外围设备连接端口(未示出)。
移动计算设备1000还可以包括用于提供语音输出的扬声器1014。移动计算设备1000还可以包括壳体1020,其由塑料、金属或材料的组合构成,用于包含本文所讨论的组件中的一些或全部。移动计算设备1000可以包括耦合到处理器1002的电源1022,诸如一次性或可再充电电池。可再充电电池也可以耦合到外围设备连接端口以从在移动计算设备1000外部的源接收充电电流。移动计算设备1000还可以包括用于接收用户输入的物理按钮1024。移动计算设备1000还可以包括用于使移动计算设备1000开启和关闭的电源按钮1026。
可以在包括膝上型计算机1100的各种计算系统中实现各个方面(包括但不限于以上参考图1-图9描述的各方面),在图11中示出了膝上型计算机1100的示例。许多膝上型计算机包括触摸板触摸表面1117,其用作计算机的定点设备,并且因此可以接收与在配备有触摸屏显示器和上述的计算设备上实现的那些手势类似的拖拽、滚动和轻击手势。膝上型计算机1100通常将包括处理器1111,处理器1111耦合到易失性存储器1112和大容量非易失性存储器,诸如闪存的磁盘驱动器1113。另外,计算机1100可以具有用于发送和接收电磁辐射的一个或多个天线1108,天线1108可以连接到无线数据链路和/或蜂窝收发机1116(其耦合到处理器1111)。计算机1100还可以包括耦合到处理器1111的软盘驱动器1114和压缩盘(CD)驱动器1115。在笔记本配置中,计算机壳体包括触摸板1117、键盘1118和显示器1119,它们都耦合到处理器1111。计算设备的其它配置可以包括如所公知的耦合到处理器的计算机鼠标或轨迹球(例如,经由USB输入),其也可以结合各个方面来使用。
还可以在固定计算系统(诸如各种商业上可用的服务器中的任何一种)中实现各个方面(包括但不限于以上参考图1-图9描述的各方面)。图12中示出了示例服务器1200。这样的服务器1200通常包括一个或多个多核处理器组装件1201,其耦合到易失性存储器1202和大容量非易失性存储器,诸如磁盘驱动器1204。如图12中所示出的,可以通过将多核处理器组装件1201插入组装件的架子来将其添加到服务器1200。服务器1200还可以包括耦合到处理器1201的软盘驱动器、压缩盘(CD)或数字多功能光盘(DVD)光盘驱动器1206。服务器1200还可以包括耦合到多核处理器组装件1201的网络接入端口1203,用于与网络1205(例如到其它广播系统计算机和服务器的局域网、互联网、公共交换电话网络和/或蜂窝数据网络(例如,CDMA、TDMA、GSM、PCS、3G、4G、LTE或任何其它类型的蜂窝数据网络))建立网络接口连接。
用于在可编程处理器上执行以实现各个方面的操作的计算机程序代码或“代码”可以以诸如C、C++、C#、Smalltalk、Java、JavaScript、Visual Basic、结构化查询语言(例如,Transact-SQL)、Perl之类的高级编程语言或以各种其它编程语言来编写。如本申请中所使用的,存储在计算机可读存储介质上的程序代码或程序可以指其格式是处理器可理解的机器语言代码(例如,对象代码)。
提供前述的方法描述和过程流程图仅仅作为说明性示例,而不旨在需要或暗示各个方面的操作必须按照所给出的顺序执行。如本领域普通技术人员将意识到的,前述方面中的操作的顺序可以按照任何顺序来执行。诸如“此后”、“随后”、“接着”等词不是旨在限制操作的顺序;这些词仅用于引导读者通读方法的描述。此外,任何以单数形式引用权利要求要素,例如,使用冠词“一”、“一个”、“所述”不应被解释为将该元素限制成单数。
结合各个方面所描述的各种说明性的逻辑框、模块、电路和算法操作可以实现成电子硬件、计算机软件、或者两者的组合。为了清楚地描绘硬件和软件的这种可互换性,上文已经对各种说明性的组件、框、模块、电路以及操作围绕其功能进行了总体描述。至于这种功能是实现成硬件还是实现成软件,取决于具体应用和施加在整体系统上的设计约束。本领域技术人员可以针对每个特定应用,以变化的方式实现所描述的功能,但是,这样的实现决定不应被解释为导致脱离权利要求书的范围。
可以利用被设计为执行本文所描述的功能的通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或晶体管逻辑、分立硬件组件、或者其任意组合来实现或执行用于实施结合本文公开的各方面所描述的各种说明性的逻辑、逻辑块、模块、以及电路的硬件。通用处理器可以是微处理器,但在替代的方案中,处理器可以是任何常规的处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、一个或多个微处理器结合DSP核、或者任何其它这样的配置。或者,一些操作或方法可以由特定于给定功能的电路来执行。
在一个或多个方面中,所述功能可以用硬件、软件、固件或其任意组合来实现。如果用软件实现,则可以将所述功能作为一个或多个指令或代码存储在非暂时性计算机可读介质或者非暂时性处理器可读介质上。本文所公开的方法或算法的操作可以体现在处理器可执行的软件模块中,该处理器可执行的软件模块可以驻留在非暂时性计算机可读的或处理器可读的存储介质上。非暂时性计算机可读的或处理器可读的存储介质可以是可以由计算机或处理器存取的任何存储介质。通过举例而非限制性的方式,这种非暂时性计算机可读的或处理器可读的介质可以包括RAM、ROM、EEPROM、闪存、CD-ROM或其它光盘存储、磁盘存储或其它磁存储设备、或者可以用于以指令或数据结构的形式存储期望的程序代码并可以由计算机存取的任何其它介质。如本文所使用的,磁盘和光盘包括压缩盘(CD)、激光光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光光盘,其中磁盘通常磁性地复制数据,而光盘则用激光来光学地复制数据。上述的组合也包括在非暂时性计算机可读和处理器可读介质的范围之内。此外,方法或算法的操作可以作为代码和/或指令中的一个或任何组合、或代码和/或指令集驻留在非暂时性处理器可读介质和/或计算机可读介质上,所述非暂时性处理器可读介质和/或计算机可读介质可以并入计算机程序产品。
提供所公开的各方面的以上描述使任何本领域技术人员能够实施或使用本权利要求书。对于本领域技术人员来说,对这些方面的各种修改将是显而易见的,并且在不脱离本权利要求书的范围的情况下,可以将本文定义的总体原理应用于其它方面和实现。因此,本权利要求书并不旨在受限于本文描述的各方面和实现,而是要符合与所附权利要求书和本文所公开的原理和新颖特征的相一致的最宽的范围。
Claims (30)
1.一种用于在计算设备上实现大小减小的固件存储格式的方法,包括:
将第一固件描述表存储到闪存的第一扇区,其中,所述第一固件描述表包括第一多个数据字段,所述第一多个数据字段被配置为定义固件的第一实例,包括描述第一多个固件映像;
将所述第一多个固件映像存储到所述闪存的第一多个连续扇区;
将第二固件描述表存储到所述闪存的与所述第一扇区连续的第二扇区,其中,所述第二固件描述表包括第二多个数据字段,所述第二多个数据字段被配置为定义所述固件的第二实例,包括描述第二多个固件映像,所述第二多个固件映像包括第三多个固件映像;
将所述第三多个固件映像存储到所述闪存的与所述第一多个连续扇区连续的第二多个连续扇区;以及
通过执行所述第二多个固件映像,使用所述第二固件描述表来引导所述计算设备。
2.根据权利要求1所述的方法,其中,所述第二多个固件映像还包括所述第一多个固件映像中的至少一个固件映像。
3.根据权利要求2所述的方法,其中:
描述第一多个固件映像包括:识别所述闪存中的存储所述第一多个固件映像的位置,所述位置包括所述闪存的第一逻辑分区;以及
描述第二多个固件映像包括:识别所述闪存中的存储所述第一多个固件映像中的所述至少一个固件映像和所述第三多个固件映像的位置,该位置包括所述闪存的第二逻辑分区,所述第二逻辑分区与所述第一逻辑分区在所述闪存中的存储所述第一多个固件映像中的所述至少一个固件映像的第一位置处重叠。
4.根据权利要求1所述的方法,还包括:响应于接收到所述第二固件描述表,重置所述计算设备。
5.根据权利要求1所述的方法,还包括:确定使用所述第二固件描述表来引导所述计算设备是否成功。
6.根据权利要求5所述的方法,其中:
所述第一多个数据字段包括当前分区等级数据和有效状态数据;以及
所述第二多个数据字段包括试验分区等级数据和所述有效状态数据;
所述方法还包括:
响应于确定使用所述第二固件描述表来引导所述计算设备成功:
将所述试验分区等级数据设置为所述当前分区等级数据;以及
将所述第一多个数据字段的所述有效状态数据设置为无效状态数据;以及
响应于确定使用所述第二固件描述表来引导所述计算设备不成功,将所述第二多个数据字段的所述有效状态数据设置为无效状态数据。
7.根据权利要求5所述的方法,还包括:
响应于确定使用所述第二固件描述表来引导所述计算设备不成功,设置强制固件描述表指示符;
重置所述计算设备;以及
使用强制固件描述表来引导所述计算设备。
8.根据权利要求5所述的方法,其中:
所述第一多个数据字段包括当前分区等级数据和第一版本数据;以及
所述第二多个数据字段包括所述当前分区等级数据和第二版本数据,所述第二版本数据被配置为指示所述固件的所述第二实例是所述固件的比所述固件的所述第一实例新的实例,
所述方法还包括:
响应于确定使用所述第二固件描述表来引导所述计算设备不成功,将强制固件描述表设置为包括所述第一版本数据的所述第一固件描述表;
重置所述计算设备;以及
使用所述强制固件描述表来引导所述计算设备。
9.一种计算设备,包括:
闪存;以及
处理器,其被配置为执行包括以下各项的操作:
将第一固件描述表存储到所述闪存的第一扇区,其中,所述第一固件描述表包括第一多个数据字段,所述第一多个数据字段被配置为定义固件的第一实例,包括描述第一多个固件映像;
将所述第一多个固件映像存储到所述闪存的第一多个连续扇区;
将第二固件描述表存储到所述闪存的与所述第一扇区连续的第二扇区,其中,所述第二固件描述表包括第二多个数据字段,所述第二多个数据字段被配置为定义所述固件的第二实例,包括描述第二多个固件映像,所述第二多个固件映像包括第三多个固件映像;
将所述第三多个固件映像存储到所述闪存的与所述第一多个连续扇区连续的第二多个连续扇区;以及
通过执行所述第二多个固件映像,使用所述第二固件描述表来引导所述计算设备。
10.根据权利要求9所述的计算设备,其中,所述第二多个固件映像还包括所述第一多个固件映像中的至少一个固件映像。
11.根据权利要求10所述的计算设备,其中,所述处理器被配置为执行操作,使得:
描述第一多个固件映像包括:识别所述闪存中的存储所述第一多个固件映像的位置,所述位置包括所述闪存的第一逻辑分区;以及
描述第二多个固件映像包括:识别所述闪存中的存储所述第一多个固件映像中的所述至少一个固件映像和所述第三多个固件映像的位置,该位置包括所述闪存的第二逻辑分区,所述第二逻辑分区与所述第一逻辑分区在所述闪存中的存储所述第一多个固件映像中的所述至少一个固件映像的第一位置处重叠。
12.根据权利要求9所述的计算设备,其中,所述处理器被配置为执行还包括以下的操作:响应于接收到所述第二固件描述表,重置所述计算设备。
13.根据权利要求9所述的计算设备,其中,所述处理器被配置为执行还包括以下的操作:确定使用所述第二固件描述表来引导所述计算设备是否成功。
14.根据权利要求13所述的计算设备,其中:
所述处理器被配置为执行操作,使得:
所述第一多个数据字段包括当前分区等级数据和有效状态数据;以及
所述第二多个数据字段包括试验分区等级数据和所述有效状态数据;以及
所述处理器被配置为执行还包括以下的操作:
响应于确定使用所述第二固件描述表来引导所述计算设备成功:
将所述试验分区等级数据设置为所述当前分区等级数据;以及
将所述第一多个数据字段的所述有效状态数据设置为无效状态数据;以及
响应于确定使用所述第二固件描述表来引导所述计算设备不成功,将所述第二多个数据字段的所述有效状态数据设置为无效状态数据。
15.根据权利要求13所述的计算设备,其中,所述处理器被配置为执行还包括以下的操作:
响应于确定使用所述第二固件描述表来引导所述计算设备不成功,设置强制固件描述表指示符;
重置所述计算设备;以及
使用强制固件描述表来引导所述计算设备。
16.根据权利要求13所述的计算设备,其中:
所述处理器被配置为执行操作,使得:
所述第一多个数据字段包括当前分区等级数据和第一版本数据;以及
所述第二多个数据字段包括所述当前分区等级数据和第二版本数据,所述第二版本数据被配置为指示所述固件的所述第二实例是所述固件的比所述固件的所述第一实例新的实例;以及
所述处理器被配置为执行还包括以下的操作:
响应于确定使用所述第二固件描述表来引导所述计算设备不成功,将强制固件描述表设置为包括所述第一版本数据的所述第一固件描述表;
重置所述计算设备;以及
使用所述强制固件描述表来引导所述计算设备。
17.一种计算设备,包括:
用于将第一固件描述表存储到闪存的第一扇区的单元,其中,所述第一固件描述表包括第一多个数据字段,所述第一多个数据字段被配置为定义固件的第一实例,包括描述第一多个固件映像;
用于将所述第一多个固件映像存储到所述闪存的第一多个连续扇区的单元;
用于将第二固件描述表存储到所述闪存的与所述第一扇区连续的第二扇区的单元,其中,所述第二固件描述表包括第二多个数据字段,所述第二多个数据字段被配置为定义所述固件的第二实例,包括描述第二多个固件映像,所述第二多个固件映像包括第三多个固件映像;
用于将所述第三多个固件映像存储到所述闪存的与所述第一多个连续扇区连续的第二多个连续扇区的单元;以及
用于通过执行所述第二多个固件映像,使用所述第二固件描述表来引导所述计算设备的单元。
18.根据权利要求17所述的计算设备,其中:
所述第二多个固件映像还包括所述第一多个固件映像中的至少一个固件映像;
用于描述第一多个固件映像的单元包括:用于识别所述闪存中的存储所述第一多个固件映像的位置的单元,所述位置包括所述闪存的第一逻辑分区;以及
用于描述第二多个固件映像的单元包括:用于识别所述闪存中的存储所述第一多个固件映像中的所述至少一个固件映像和所述第三多个固件映像的位置的单元,该位置包括所述闪存的第二逻辑分区,所述第二逻辑分区与所述第一逻辑分区在所述闪存中的存储所述第一多个固件映像中的所述至少一个固件映像的第一位置处重叠。
19.根据权利要求17所述的计算设备,还包括:用于响应于接收到所述第二固件描述表,重置所述计算设备的单元。
20.根据权利要求17所述的计算设备,还包括:用于确定使用所述第二固件描述表来引导所述计算设备是否成功的单元。
21.根据权利要求20所述的计算设备,其中:
所述第一多个数据字段包括当前分区等级数据和有效状态数据;以及
所述第二多个数据字段包括试验分区等级数据和所述有效状态数据;以及
所述计算设备还包括:
用于响应于确定使用所述第二固件描述表来引导所述计算设备成功,将所述试验分区等级数据设置为所述当前分区等级数据的单元;
用于响应于确定使用所述第二固件描述表来引导所述计算设备成功,将所述第一多个数据字段的所述有效状态数据设置为无效状态数据的单元;以及
用于响应于确定使用所述第二固件描述表来引导所述计算设备不成功,将所述第二多个数据字段的所述有效状态数据设置为无效状态数据的单元。
22.根据权利要求20所述的计算设备,还包括:
用于响应于确定使用所述第二固件描述表来引导所述计算设备不成功,设置强制固件描述表指示符的单元;
用于重置所述计算设备的单元;以及
用于使用强制固件描述表来引导所述计算设备的单元。
23.根据权利要求20所述的计算设备,其中:
所述第一多个数据字段包括当前分区等级数据和第一版本数据;以及
所述第二多个数据字段包括所述当前分区等级数据和第二版本数据,所述第二版本数据被配置为指示所述固件的所述第二实例是所述固件的比所述固件的所述第一实例新的实例;以及
所述计算设备还包括:
用于响应于确定使用所述第二固件描述表来引导所述计算设备不成功,将强制固件描述表设置为包括所述第一版本数据的所述第一固件描述表的单元;
用于重置所述计算设备的单元;以及
用于使用所述强制固件描述表来引导所述计算设备的单元。
24.一种其上存储有处理器可执行指令的非暂时性处理器可读存储介质,所述处理器可执行指令被配置为使得计算设备的处理器执行包括以下各项的操作:
将第一固件描述表存储到闪存的第一扇区,其中,所述第一固件描述表包括第一多个数据字段,所述第一多个数据字段被配置为定义固件的第一实例,包括描述第一多个固件映像;
将所述第一多个固件映像存储到所述闪存的第一多个连续扇区;
将第二固件描述表存储到所述闪存的与所述第一扇区连续的第二扇区,其中,所述第二固件描述表包括第二多个数据字段,所述第二多个数据字段被配置为定义所述固件的第二实例,包括描述第二多个固件映像,所述第二多个固件映像包括第三多个固件映像;
将所述第三多个固件映像存储到所述闪存的与所述第一多个连续扇区连续的第二多个连续扇区;以及
通过执行所述第二多个固件映像,使用所述第二固件描述表来引导所述计算设备。
25.根据权利要求24所述的非暂时性处理器可读存储介质,其中:
所述第二多个固件映像还包括所述第一多个固件映像中的至少一个固件映像;以及
所存储的处理器可执行指令被配置为使得计算设备的处理器执行操作,使得:
描述第一多个固件映像包括:识别所述闪存中的存储所述第一多个固件映像的位置,所述位置包括所述闪存的第一逻辑分区;以及
描述第二多个固件映像包括:识别所述闪存中的存储所述第一多个固件映像中的所述至少一个固件映像和所述第三多个固件映像的位置,该位置包括所述闪存的第二逻辑分区,所述第二逻辑分区与所述第一逻辑分区在所述闪存中的存储所述第一多个固件映像中的所述至少一个固件映像的第一位置处重叠。
26.根据权利要求24所述的非暂时性处理器可读存储介质,其中,所存储的处理器可执行指令被配置为使得计算设备的处理器执行还包括以下的操作:响应于接收到所述第二固件描述表,重置所述计算设备。
27.根据权利要求24所述的非暂时性处理器可读存储介质,其中,所存储的处理器可执行指令被配置为使得计算设备的处理器执行还包括以下的操作:确定使用所述第二固件描述表来引导所述计算设备是否成功。
28.根据权利要求27所述的非暂时性处理器可读存储介质,其中:
所存储的处理器可执行指令被配置为使得计算设备的处理器执行操作,以使得:
所述第一多个数据字段包括当前分区等级数据和有效状态数据;以及
所述第二多个数据字段包括试验分区等级数据和所述有效状态数据;以及
所存储的处理器可执行指令被配置为使得计算设备的处理器执行还包括以下的操作:
响应于确定使用所述第二固件描述表来引导所述计算设备成功:
将所述试验分区等级数据设置为所述当前分区等级数据;以及
将所述第一多个数据字段的所述有效状态数据设置为无效状态数据;以及
响应于确定使用所述第二固件描述表来引导所述计算设备不成功,将所述第二多个数据字段的所述有效状态数据设置为无效状态数据。
29.根据权利要求27所述的非暂时性处理器可读存储介质,其中,所存储的处理器可执行指令被配置为使得计算设备的处理器执行还包括以下的操作:
响应于确定使用所述第二固件描述表来引导所述计算设备不成功,设置强制固件描述表指示符;
重置所述计算设备;以及
使用强制固件描述表来引导所述计算设备。
30.根据权利要求27所述的非暂时性处理器可读存储介质,其中:
所存储的处理器可执行指令被配置为使得计算设备的处理器执行操作,使得:
所述第一多个数据字段包括当前分区等级数据和第一版本数据;以及
所述第二多个数据字段包括所述当前分区等级数据和第二版本数据,所述第二版本数据被配置为指示所述固件的所述第二实例是所述固件的比所述固件的所述第一实例新的实例;以及
所存储的处理器可执行指令被配置为使得计算设备的处理器执行还包括以下的操作:
响应于确定使用所述第二固件描述表来引导所述计算设备不成功,将强制固件描述表设置为包括所述第一版本数据的所述第一固件描述表;
重置所述计算设备;以及
使用所述强制固件描述表来引导所述计算设备。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/669,257 US10915331B2 (en) | 2017-08-04 | 2017-08-04 | Partitioning flash and enabling flexible boot with image upgrade capabilities |
US15/669,257 | 2017-08-04 | ||
PCT/US2018/041392 WO2019027636A1 (en) | 2017-08-04 | 2018-07-10 | FLASH MEMORY PARTITIONING AND FLEXIBLE STARTUP POSSIBILITY WITH IMAGE UPGRADE CAPABILITIES |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111033466A true CN111033466A (zh) | 2020-04-17 |
CN111033466B CN111033466B (zh) | 2023-09-08 |
Family
ID=63165457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880050615.1A Active CN111033466B (zh) | 2017-08-04 | 2018-07-10 | 对闪存进行分区以及实现具有映像升级能力的灵活引导 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10915331B2 (zh) |
CN (1) | CN111033466B (zh) |
WO (1) | WO2019027636A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111813594A (zh) * | 2019-04-11 | 2020-10-23 | 百度(美国)有限责任公司 | 用于自动驾驶车辆的基于硬件的系统的启动失效恢复方案 |
CN114995893A (zh) * | 2022-08-01 | 2022-09-02 | 摩尔线程智能科技(北京)有限责任公司 | 固件的管理方法、闪存、主机及存储介质 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI722269B (zh) * | 2018-01-26 | 2021-03-21 | 和碩聯合科技股份有限公司 | 韌體更新方法及使用此方法的電子裝置 |
US11604443B2 (en) * | 2018-08-23 | 2023-03-14 | Johnson Controls Tyco IP Holdings LLP | System and method for distributed device configuration and authorization |
US10866623B2 (en) * | 2018-11-16 | 2020-12-15 | Dell Products L.P. | Information handling system and method to detect and recover from no power/no post failures |
US11347860B2 (en) * | 2019-06-28 | 2022-05-31 | Seagate Technology Llc | Randomizing firmware loaded to a processor memory |
US11768701B2 (en) * | 2019-09-17 | 2023-09-26 | Western Digital Technologies, Inc. | Exception analysis for data storage devices |
WO2021117939A1 (ko) * | 2019-12-12 | 2021-06-17 | 엘지전자 주식회사 | 펌웨어 제공 장치 및 그 제공 방법 |
US11886592B2 (en) * | 2021-08-11 | 2024-01-30 | Micron Technology, Inc. | Secure firmware update through a predefined server |
EP4250093A1 (en) * | 2022-03-24 | 2023-09-27 | NXP USA, Inc. | Memory configuration within a data processing system |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070294685A1 (en) * | 2006-06-19 | 2007-12-20 | Samsung Electronics Co., Ltd. | Program upgrade system and method for ota-capable portable device |
CN101421700A (zh) * | 2006-04-19 | 2009-04-29 | 英特尔公司 | 支持处理系统的分区中的独立操作系统的方法和设备 |
US20130013907A1 (en) * | 2005-02-15 | 2013-01-10 | Gytheion Networks, Llc | Wireless router remote firmware upgrade |
CN103677884A (zh) * | 2012-09-21 | 2014-03-26 | 华为技术有限公司 | flash分区表文件生成及其数据升级方法、装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7188238B2 (en) * | 2003-05-21 | 2007-03-06 | Intel Corporation | Methods and apparatus to update a basic input/output system (BIOS) |
US9395968B1 (en) | 2006-06-30 | 2016-07-19 | American Megatrends, Inc. | Uniquely identifying and validating computer system firmware |
US9235404B2 (en) | 2012-06-27 | 2016-01-12 | Microsoft Technology Licensing, Llc | Firmware update system |
US8954694B2 (en) | 2012-11-15 | 2015-02-10 | Western Digital Technologies, Inc. | Methods, data storage devices and systems for fragmented firmware table rebuild in a solid state drive |
US9507581B2 (en) | 2015-01-14 | 2016-11-29 | Dell Products Lp | Systems and methods of device firmware delivery for pre-boot updates |
US9612887B2 (en) | 2015-06-26 | 2017-04-04 | Intel Corporation | Firmware-related event notification |
-
2017
- 2017-08-04 US US15/669,257 patent/US10915331B2/en active Active
-
2018
- 2018-07-10 WO PCT/US2018/041392 patent/WO2019027636A1/en active Application Filing
- 2018-07-10 CN CN201880050615.1A patent/CN111033466B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130013907A1 (en) * | 2005-02-15 | 2013-01-10 | Gytheion Networks, Llc | Wireless router remote firmware upgrade |
CN101421700A (zh) * | 2006-04-19 | 2009-04-29 | 英特尔公司 | 支持处理系统的分区中的独立操作系统的方法和设备 |
US20070294685A1 (en) * | 2006-06-19 | 2007-12-20 | Samsung Electronics Co., Ltd. | Program upgrade system and method for ota-capable portable device |
CN103677884A (zh) * | 2012-09-21 | 2014-03-26 | 华为技术有限公司 | flash分区表文件生成及其数据升级方法、装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111813594A (zh) * | 2019-04-11 | 2020-10-23 | 百度(美国)有限责任公司 | 用于自动驾驶车辆的基于硬件的系统的启动失效恢复方案 |
CN114995893A (zh) * | 2022-08-01 | 2022-09-02 | 摩尔线程智能科技(北京)有限责任公司 | 固件的管理方法、闪存、主机及存储介质 |
CN114995893B (zh) * | 2022-08-01 | 2022-11-01 | 摩尔线程智能科技(北京)有限责任公司 | 固件的管理方法、闪存、主机及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2019027636A1 (en) | 2019-02-07 |
US20190042278A1 (en) | 2019-02-07 |
CN111033466B (zh) | 2023-09-08 |
US10915331B2 (en) | 2021-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111033466B (zh) | 对闪存进行分区以及实现具有映像升级能力的灵活引导 | |
US10789117B2 (en) | Data error detection in computing systems | |
US10146627B2 (en) | Mobile flash storage boot partition and/or logical unit shadowing | |
US20160253497A1 (en) | Return Oriented Programming Attack Detection Via Memory Monitoring | |
US20160124740A1 (en) | Data storage device and method for reducing firmware update time and data processing system including the device | |
US20190073305A1 (en) | Reuse Aware Cache Line Insertion And Victim Selection In Large Cache Memory | |
US10503656B2 (en) | Performance by retaining high locality data in higher level cache memory | |
US10339058B2 (en) | Automatic cache coherency for page table data | |
CN114879828A (zh) | 具有持久性存储器存储装置的固件接口 | |
US20120254582A1 (en) | Techniques and mechanisms for live migration of pages pinned for dma | |
US9336082B2 (en) | Validating persistent memory content for processor main memory | |
US20190087344A1 (en) | Reducing Clean Evictions In An Exclusive Cache Memory Hierarchy | |
KR20200113992A (ko) | 메모리 시스템의 복구 동작 중 비휘발성 메모리 오픈 블록의 셀 디스터브를 줄이는 방법 및 장치 | |
US9858196B2 (en) | Power aware padding | |
US10346157B2 (en) | Patch infrastructure for ROM firmware | |
CN109791510B (zh) | 在异构计算中管理数据流 | |
US10678705B2 (en) | External paging and swapping for dynamic modules | |
US11386012B1 (en) | Increasing address space layout randomization entropy via page remapping and rotations | |
US9798479B2 (en) | Relocatable and resizable tables in a computing device | |
KR102706034B1 (ko) | 멀티미디어 압축 프레임 인식 캐시 대체 정책 | |
US10613850B1 (en) | Performant and secure storage and retrieval of firmware variables | |
JP2010277410A (ja) | 情報処理システム、割り込み制御方法及び割り込み制御プログラム |
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 |