CN115113912A - 组成模块化固件的方法、装置及计算机程序产品 - Google Patents
组成模块化固件的方法、装置及计算机程序产品 Download PDFInfo
- Publication number
- CN115113912A CN115113912A CN202110829531.1A CN202110829531A CN115113912A CN 115113912 A CN115113912 A CN 115113912A CN 202110829531 A CN202110829531 A CN 202110829531A CN 115113912 A CN115113912 A CN 115113912A
- Authority
- CN
- China
- Prior art keywords
- module
- firmware
- modules
- firmware package
- computing device
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- 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
-
- 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
-
- 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
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
技术领域
本公开大致涉及计算装置,特别涉及用以使计算装置得以运作的固件。
背景技术
当今的计算装置(例如个人计算机、服务器及其他装置)中,固件可用于各种目的。启动固件(boot firmware),像是基本输入输出系统(Basic Input/Output System;BIOS)及/或统一可扩展固件接口(unified extensible firmware interface;UEFI),在计算装置启动时处理各种初始化程序,像是初始化及帮助与计算装置的硬件的沟通,以及初始化操作系统。固件通常是于制造的期间,储存及安装在存储器中(例如串行外设接口只读存储器(Serial Peripheral Interface Read Only Memory;SPI ROM))。
若终端使用者希望对固件作改变,像是除错的议题、提升效能、定制化,或者添加新功能,使用者会需要向开发者提出请求,像是原始设备制造商(Original EquipmentManufacturer;OEM)或原始设计制造商(Original Design Manufacurer;ODM)。一旦提出请求,OEM或ODM就会对固件作所请求的修改,并重建固件映像。此新固件映像,于是需要被安装在计算装置中,无论是由OEM、ODM或者是终端使用者所安装。可能也会需要额外的步骤,像是新固件映像的验证/测试,以及计算装置的重新启动。这整个程序,可能是昂贵且费时的。此外,无论所请求的改变的类型或范围,合并新固件映像所需的时间与金钱投入可能大约相同。因此,即使是对固件编码做出的小改变,也可能终究需要可观的时间与费用。
发明内容
“实施例”一词及类似的用语意图广泛地指代本发明及以下权利要求的所有申请标的。包含这些词汇的陈述不应被理解为限制在此所述的申请标的或限制以下的权利要求的含义或范围。在此所涵盖的本公开的实施例,是由以下的权利要求而非本发明内容所限定。本发明内容是本公开的各方面的高阶综述,并且介绍了一些概念,这些概念在以下实施方式的段落中会进一步描述。本发明内容并不旨在标识出所请求的申请标的的必要特征,也不旨在单独用于决定所请求的申请标的的范围。通过参考本发明的整个说明书的适当部分、任何或所有的附图,以及每个权利要求,应当理解本申请标的。
本公开的实施例包含一种组成模块化固件的方法,包括存取来自计算装置的本地端储存的固件映像。固件映像包含主要模块及模块列表。该方法还包括执行主要模块,执行主要模块包含初始化计算装置的一个或多个硬件资源。该方法还包括存取关联于固件映像的模块列表。模块列表包含关联于模块库的一组所选取模块的唯一标识信息(uniqueidentification information)。模块库包含多个可执行模块。该方法还包括基于该组所选取模块,组成固件包。组成固件包包含存取该组所选取模块的每一模块。该方法还包括执行固件包。
在某些情况中,组成固件包还包括存取关联于该组所选取模块的至少一个模块的依附信息。组成固件包还包括使用依附信息鉴别附加模块。在某些情况中,附加模块未包含在该组所选取模块中,在这种情况中,组成固件包还包括将附加模块添加到固件包。在某些情况中,依附信息鉴别母模块及子模块。在这种情况中,组成固件包还包括使用依附信息产生模块序列。产生模块序列包含在子模块之前,将母模块部署于模块序列中。在这种情况中,执行固件包包含基于模块序列执行固件包。
在某些情况中,模块库储存在固件映像中。在某些情况中,至少某些模块库储存在经由网络接口可存取的远端储存装置。在这种情况中,存取该组所选取模块的每一模块包含经由网络接口,存取来自远端储存装置的该组所选取模块的至少一个模块。
在某些情况中,计算装置包含处理器及独立处理器。在这种情况中,执行主要模块、存取模块列表,以及组成固件包,是由独立处理器所实施;以及执行固件包是由主处理器所实施。在某些情况中,组成固件包还包括将该组所选取模块的每一模块复制到主处理器可存取的系统存储器中。在这种情况中,执行固件包包含存取来自系统存储器的固件包。在某些情况中,该方法还包括存取来自固件映像的配置参数,并将配置参数储存在系统存储器中。该方法还包括将模块序列储存在系统存储器中,模块序列指示执行固件包的模块的顺序。在这种情况中,执行该固件包还包括,以模块序列所指示的顺序,执行固件包的每一模块。执行固件包的每一模块,包含应用配置参数。
在某些情况中,该方法还包括存取关联于模块列表的配置参数,其中执行固件包包含应用配置参数。在某些情况中,该方法还包括在执行固件包之后,初始化操作系统。在某些情况中,该方法还包括更新模块列表,以产生已更新模块列表,已更新模块列表具有一组已更新所选取模块。该组已更新所选取模块不同于该组所选取模块。在这种情况中,该方法还包括重新启动计算装置,以及基于该组已更新所选取模块,组成已更新固件包。该方法还包括执行已更新固件包。在某些情况中,计算装置包含一个或多个硬件资源及一个或多个附加硬件资源。执行该固件包包含初始化一个或多个附加硬件资源。
本公开的实施例包含一种计算机程序产品,有形地实施于非暂态机器可读取储存介质中,包含多个指令,设置以使一个或多个数据处理设备实施上述的任何方法。
本公开的实施例包含一种组成模块化固件的计算装置。该计算装置包括第一硬件装置、第二硬件装置,以及一个或多个处理器。该计算装置还包括非暂态计算机可读取储存介质,含有多个指令,当在一个或多个处理器上执行时,使一个或多个处理器实施操作。所述多个操作包含存取固件映像,固件映像包含主要模块及模块列表。所述多个操作还包括执行主要模块,执行主要模块包含初始化第一硬件装置。所述多个操作还包括存取关联于固件映像的模块列表。模块列表包含关联于模块库的一组所选取模块的唯一标识信息。模块库包含多个可执行模块。所述多个操作还包括基于该组所选取模块,组成固件包。组成固件包包含存取该组所选取模块的每一模块。所述多个操作还包括执行已更新固件包,执行已更新固件包包含初始化第二硬件装置。
在某些情况中,组成固件包还包括存取关联于该组所选取模块的至少一个模块的依附信息。组成固件包还包括使用该依附信息鉴别附加模块。在某些情况中,附加模块未包含在该组所选取模块中,在这种情况中,组成固件包还包括将附加信息添加到固件包。在某些情况中,依附信息鉴别母模块及子模块。在这种情况中,组成固件包还包括使用依附信息产生模块序列。产生模块序列包含在子模块之前,将母模块部署于模块序列中。在这种情况中,执行固件包包含基于模块序列执行固件包。
在某些情况中,固件映像储存在非暂态计算机可读取储存介质中。在某些情况中,至少某些模块库储存于经由网络接口可存取的远端储存装置。在这种情况中,该计算装置还包括网络接口。存取该组所选取模块的每一模块包含经由网络接口,存取来自远端储存装置的该组所选取模块的至少一个模块。
在某些情况中,一个或多个处理器包含主处理器及独立处理器。执行主要模块、存取模块列表,以及组成固件包,是由独立处理器所实施;以及执行固件包是由主处理器所实施。在某些情况中,组成固件包还包括将该组所选取模块的每一模块复制到主处理器可存取的系统存储器中。执行固件包包含存取来自系统存储器的固件包。在某些情况中,所述多个操作还包括存取来自固件映像的配置参数,并将配置参数储存在系统存储器中。所述多个操作还包括将模块序列储存在系统存储器中。模块序列指示执行固件包的模块的顺序。在这种情况中,执行该固件包还包括,以模块序列所指示的顺序,执行固件包的每一模块。行固件包的每一模块,包含应用配置参数。
本公开的额外的特征及优点,将会在以下的叙述中列举,且会在某种程度上,从叙述中显而易见;或者可通过在此列举的原则的实现所得知。本公开的特征及优点,可通过附带的权利要求中特别指出的器械及组合的手段,所实现与获得。本公开的这些特征及其他特征,将从以下的叙述及附带的权利要求而变得完全显而易见,或者可通过在此列举的原则的实现所得知。
附图说明
本说明书参考以下附带的附图,其中在不同图中使用相同的参考符号,是意图绘示相同或类似的组件。
图1是根据本公开的某些示例描绘实现模块固件组成的计算环境的示意图。
图2是根据本公开的某些示例描绘初始的固件套件及可执行的固件包的示意图。
图3是根据本公开的某些示例描绘多个计算装置上所使用的一般模块库的示意图。
图4是根据本公开的某些示例描绘模块化组成多个计算装置上的固件的程序的流程图。
图5是实现本公开的某些示例及特征的示例系统架构的方块图。
本公开可接受各式各样的修改及替代的形式。某些代表性的实施例,已被附图中的示例所显示,并将在此被详细地叙述。然而,应被理解的是,本发明并非意图限定于所公开的特定形式。反之,本公开涵盖所有的修改、均等物,以及落在如附加的权利要求所定义的本发明的范围与精神的内的替代方案。
具体实施方式
本公开的某些示例与特征涉及计算装置的启动固件,该启动固件可模块化地及动态地组成,以帮助实现对于计算装置的固件的改变与更新。固件映像可包含主要模块及模块列表,主要模块负责某些基本的初始化,模块列表可包含于启动程序的期间所执行的附加模块(additional modules)的列表。模块列表可用以鉴别及存取从模块库(modulelibrary)所选取的模块,像是经由全局唯一标识符(globally unique identifier;GUID)。一旦取得所选取模块,便可将所需依附模块(无论是否包含在所选取模块中)及配置设定列入考虑,而执行所选取模块。模块库可以是完全储存于本地端(例如部分的分布式固件映像)、完全储存于远端(例如经由网络连接所存取),或者是混杂本地端与远端。
本公开的某些示例与特征,能以任何于启动期间使用固件的适用的计算装置所使用,像是个人计算机(例如笔记型计算机、桌上型计算机,或者类似的装置)、可携式计算装置(例如平板、智能型手机,或者类似的装置),或者计算服务器(例如机架式服务器或刀锋服务器)。启动程序可以在计算装置上电后开始,也可以在重新启动后开始。于启动程序的期间,执行启动固件。传统的启动固件经常是BIOS及/或UEFI固件,然而本公开并非意图限制固件的任何特定结构风格。
根据本公开的某些示例,模块化的固件映像可至少包含主要模块及次要模块。主要模块包含平台依附(例如芯片组依附(chipset-dependent))基本必要编码(platform-dependent basic essential code),用以对存取次要模块及随后的附加模块所必要的某些硬件资源进行初始化。举例来说,主要模块可包含用以允许读取储存附加模块的储存装置的编码。次要模块包含模块列表,以及可选地包含配置参数。模块列表是,于启动程序的期间所使用的所有模块的列表。在某些情况中,模块列表被称为模块配方(module recipe)或固件配方(firmware recipe)。次要模块可储存在非易失性随机存取存储器(non-volatile random access memory;NVRAM)中,允许模块列表依需求而修改,像是经由管理接口或应用程序接口(application programming interface;API)。模块列表的修改,可允许个人对最终在计算装置启动期间所执行的固件进行修改。配置参数可包含通用参数(global parameters)或模块特定参数(module-specific parameters),当附加模块被执行时,模块特定参数可被传到任何的附加模块。
在某些情况中,使用者(例如终端使用者、经销商、制造商、开发者,及其他使用计算装置者)可根据系统需求修改模块列表,毋须对整个固件进行程序改写以及重建固件映像。举例来说,制造商可实现遍及大量不同产品的相同的固件映像,仅仅针对每个不同产品的个别需求调整主要模块及/或次要模块。在这种示例中,低端个人计算机与高端个人计算机可享有相同固件映像,包含相同的模块库,但是不同的次要模块。于是,低端个人计算机的次要模块可包含对于低端个人计算机的硬件与特征而言特定的模块列表,而使低端个人计算机仅使用其模块列表上的那些模块来启动。同样地,高端个人计算机的次要模块可包含对于高端个人计算机的硬件与特征而言特定的模块列表,而使高端个人计算机仅使用其模块列表上的那些模块来启动。为了实现出第三产品(例如中阶个人计算机),制造商可重复使用相同的固件映像,仅为那个特定产品修改次要模块。在某些情况中,模块库可储存于本地端(例如储存在SPI ROM上),像是储存于分配给计算装置的固件映像中。在其他情况中,某些模块库或所有模块库可位于远端的储存装置上,像是网络服务器。如在此所使用的,于本地所储存及存取的模块库可称为带内(in-band)模块库,而在远端所储存及存取的模块库,像是经由网络接口,可称为带外(out-of-band)模块库。在某些情况中,带内模块库可仍然经由网络接口所更新(例如经由基板管理控制器(baseboard managementcontroller;BMC)的网络接口)。
此外,若有需要或想要为固件的个别的模块作更新,本公开的某些示例允许轻易地进行如此更新。在某些情况中,新固件映像可产生及分配给所有的计算装置,伴随着每个计算装置仅保留其主要模块及/或次要模块,或者伴随着新的主要模块及/或次要模块。在其他情况中,模块库的模块可被个别地更新及分配,包含基于依附的任何相关模块(例如,若所更新模块目前是依附于新的母模块或所更新的母模块,则那个母模块亦可被更新;同样地,在某些情况中,所更新模块可能要求依附于所更新模块的子模块也要被更新,在这种情况中子模块亦可被更新)。在某些情况中,可更新整个模块库或者部分的模块库(例如,储存在远端储存装置的某些或所有的模块库)。
如在此所使用的,“固件映像”一词可以是指单一文档(例如二进制文档),或者是多个文档。举例来说,在某些情况中,固件映像可将主要模块、次要模块及模块库包含在单一文档中。然而在其他情况中,包含主要模块、次要模块及模块库的固件映像,可切分为多个文档(例如,包含主要模块的第一文档、包含次要模块的第二文档,以及包含模块库的第三文档)。在某些情况中,“固件映像”一词可以是指位于连续存储器空间(contiguousmemory space)的单一文档或多个文档。
根据本公开的某些示例,计算系统可使用主处理器(main processor)以启动。如在此所使用的“主处理器”一词,可包含能用以读取及执行启动固件编码的任何处理装置,像是为特定目的所建置的处理器(purpose-built processor)、计算装置的中央处理单元(central processing unit;CPU),或是中央处理单元的核心。在某些情况中,启动程序亦可使用附加的独立处理器(independent processor)。如在此所使用的“独立处理器”一词,意图表示独立处理器被分派到实施主处理器所未实施的某些启动功能的任务。独立处理器可与主处理器隔绝,使得独立处理器内所载入的编码及数据在执行的期间,无法被主处理器直接存取。独立处理器可以是任何适用的处理器,像是外部的微控制器,或是中央处理单元内的核心(例如平台安全性处理器(platform security processor;PSP),像是通过信赖的执行环境所实现的平台安全性处理器)。这种独立处理器(例如PSP)可以是隔绝的安全性处理器,独立于计算装置的主核心所运行。这种独立处理器可负责提供硬件的信任根(rootof trust)、训练存储器、将BIOS复制进动态随机存取存储器(dynamic random accessmemory;DRAM),以及释出对于核心(例如x86核心)的控制权。
在启动程序的期间仅使用主处理器时,可执行主要模块以初始化各种硬件资源,接着可存取次要模块以鉴别模块列表及任何现存的配置参数。主处理器会接着继续组成含有模块列表中的每个所选取模块的固件包(firmware bundle),然后执行该固件包。在某些情况中,组成固件包仅包含鉴别待执行的模块,像是通过包含来自模块列表的所选取模块,以及包含执行任何所选取模块可能必要的任何附加的依附模块(dependent module)。在某些情况中,组成固件包包含产生模块序列,或者模块将被执行的顺序。处理器可接着通过存取模块库及执行每个所指派模块,以执行固件包。在某些情况中,处理器直接从模块库执行模块,然而并非总是必须如此。在某些情况中,组成固件包包含将所指派模块复制到储存位置,然后从储存位置执行所述多个模块。一旦所指派模块已全数执行完毕,处理器可初始化及/或将控制权移交给操作系统。
根据本公开的某些示例,当独立处理器与主处理器并列使用以启动计算机时,独立处理器可被分派到从次要模块的模块列表鉴别出所选取模块的任务,接着将所选取模块复制到储存主处理器可存取的储存装置(例如系统存储器)。在某些情况中,独立处理器可执行主要模块,然后存取次要模块。在其他情况中,独立处理器可仅将所选取模块复制到系统存储器,而让主处理器执行主要模块,再接着执行复制出来的所选取模块。
在一个示例中,当启动程序开始,独立处理器可初始化系统存储器;检查来自储存组件(例如模块列表)的系统需求;载入及存取模块库(例如在本地端及/或远端);基于系统需求(例如模块列表),将所选取模块复制到系统存储器,视需要包含依附模块;可选地将附加的存储器设定及/或模块序列储存至一张表(table);以及释出对主处理器的控制权。一旦主处理器的控制权已释出,主处理器能可选地执行主要模块;可选地从该张表载入存储器设定及/或模块序列;以及可选地使用模块序列,以执行复制出来的模块。
在某些情况中,模块列表是在启动程序的期间所执行的所选取模块的GUID的列表,然而并非总是必须如此。在某些情况中,模块列表可包含附加信息,像是一个或多个注释(例如指示关联于特定GUID的模块的名称或目标的注释)。模块列表可以是使用者可更新的。在某些情况中,模块列表能以特定顺序所存在,或者可包含序列信息,然而并非总是必须如此。在某些情况中,模块序列是基于每个所选取模块的模块属性,而自动地产生。
在某些情况中,模块列表可包含关联于特定模块GUID的替代模块(alternatemodule)GUID。举例来说,模块列表可包含“模块A”的模块GUID,以及关联于模块A的模块GUID的“模块A1”的模块GUID。在这种情况中,模块A1可以是模块A的替代版本或新版本,当模块A及模块A1同时可相容于计算机系统,若可用时,将会被使用。处理器可在模块库中搜寻模块A1,且如果找出模块A1,则进一步使用那个模块。然而,若无法在模块库中找到模块A1,处理器可退回使用模块A。
在某些情况中,模块列表可采取记录收集(collection of record)的形式,或者被解读为记录收集。每笔记录可代表一段所执行的编码。在某些情况中,记录可包含单一模块GUID,在这种情况中,记录表示将会使用给定的模块GUID。在某些情况中,记录可包含基本模块(basic module)GUID,以及那个基本模块GUID的一个或多个替代模块GUID。因此,如在此所使用的短语“该组所选取模块的每个模块”及类似的短语,可视情况包含:(i)在该组所选取模块中的各处,所鉴别出的所有模块;或(ii)模块列表的每笔记录的一个模块。因此,对于仅包含模块A及替代模块A1的模块列表而言,执行“该组所选取模块的每个模块”可以是指仅执行模块A1,或者是在模块A及模块A1同时可相容于计算机系统时,若模块A1无法取得而仅执行模块A。
在某些情况中,次要模块中的模块列表是储存于本地端,像是SPI ROM,或是计算装置的BMC的存储器中,然而并非总是必须如此。在某些情况中,模块列表能储存在可经由网络接口所存取的远端储存装置中。在某些情况中,可使用管理接口(例如BMC网页使用者接口(WebUI)或通用非同步接收发送器(universal asynchronous receiver/transmitter;UART)控制台)以提供模块列表及/或配置参数的管理。
每个模块可包含属性信息。属性信息可以是表(table)的形式,然而并非总是必须如此。属性信息可包含模块的GUID、模块的版本信息,以及依附信息。依附信息可包含任何的母模块依附(例如必须在执行给定模块之前所执行的模块)及/或任何子模块依附(例如必须在执行给定模块之后所执行的所需子模块,或是需要在执行子模块之前执行给定模块的可选子模块)。其他信息亦可包含在属性信息中,像是模块位置(例如存储器中的位置)、模块大小、所需变数或参数,以及可选变数或参数。
当存取模块库及/或当组成固件包时,可对来自模块列表的每个所选取模块存取属性信息。属性信息可用以(i)确保所选取的是正确的模块;(ii)鉴别待执行而未包含在模块列表中的任何附加模块;(iii)以及产生模块序列,确保母依附模块是在其子模块之前所执行。
举例来说,若用以初始化图形处理单元(graphics processing unit;GPU)卡的GPU模块包含在模块列表中,则那个GPU模块可包含依附信息,指示出用以提升存储器位址空间的存储器模块将先被执行。若那个GPU模块尚未在模块列表中,它将会被包含在待执行的固件包中。通过使用依附信息,包含存储器模块的模块序列可在GPU模块之前所产生。在某些情况中,母依附模块本身可能需要更进一步的母依附模块。
在某些情况中,可使用管理接口(例如BMC WebUI、UART控制台,或者任何其他适用的接口)以检查模块库中的给定模块的属性(例如依附属性)。在某些情况中,若管理接口是用以提供或修改模块列表(例如在次要模块中),则管理接口可自动检查所选取模块的属性,并加入任何必要的依附模块。在某些情况中,管理接口可更进一步自动将模块列表安排进模块序列中,以确保母依附模块是在其子依附模块之前所执行。在某些情况中,管理接口可储存惯用的模块列表及/或配置设定,允许使用者将惯用的模块列表及/或配置设定部署遍及多个计算装置。
本发明可以许多不同的形式所实施。代表性的实施例被附图所显示,并将在此被详细地叙述。本公开为本发明的原则的示例或图解,且并非意图将本公开的广泛的观点限制于绘式的实施例。在此基础上,例如在摘要、发明内容及实施方式等段落中被公开,但并未明确地在权利要求中列举的元件及限制,不应被单独地、集体地、暗示地、推论地或其他方式地并入至权利要求中。为了本详细叙述的目的,除非被具体地否认,否则单数形包含复数形,反之亦然;且“包含”一词意指“无限制地包含”。此外,表近似的词汇,例如“约”、“几乎”、“大体上”、“大概”及类似的词汇,能在此被用来意指“在”、“近”、“近于”、“3-5%的范围内”或“可接受的制造公差内”,或者其任何的逻辑组合。
这些图示的示例,是提供以向读者介绍此处所讨论的整体主题,而并非意图限制所公开概念的范围。以下段落参考附图而叙述各种额外的特征及示例,附图中相同的符号表示相同的元件,且指向性的叙述是用以叙述图示的实施例,但也如同图示的实施例,不应用以限制本公开。附图中所包含的元件,可能未依比例所绘制。
根据本公开的某些示例,图1是描绘实现模块固件组成的计算环境100的示意图。计算装置102可以是任何适用的计算装置,像是个人计算机、服务器或其他装置。计算装置102可包含主处理器104,以及可选地包含独立处理器106。主处理器104可以是任何适用的处理器,像是CPU,或是CPU的一个或多个核心。独立处理器106于使用时,可以是微控制器(例如为特定目的所建置的微控制器)、分离于CPU的处理器,或者是CPU的核心,像是安全核心(secure core),像是通过信赖的执行环境所实现的平台安全性处理器。计算装置102能可选地包含管理控制器158,像是基板管理控制器(BMC)。计算装置102可包含本地端储存装置108,遍及一个或多个储存装置,像是只读存储器、随机存取存储器,以及类似的储存装置。计算装置102可包含附加组件,像是各种附加的硬件组件、总线、外围,以及类似的组件。
当计算装置102启动时,可执行来自固件套件(firmware package)116的某些固件模块,固件套件116是储存在计算装置102的本地端储存装置108中。固件套件116包含平台特定(platform-specific)固件152,平台特定固件152是特定于计算装置102本身,或是特定于计算装置102的某些硬件元件。平台特定固件152的执行可使主处理器104及/或独立处理器106使用计算装置102的某些组件,像是某些储存组件、电源组件,或网络组件。
在执行平台特定固件152之后,主处理器104或独立处理器106可鉴别一个或多个附加模块,以基于平台特定固件152中的模块列表而执行。模块列表可包含模块库138的选定的模块。模块库138可以是在本地端、远端,或者是本地端与远端的组合所实现。于本地端实现时,模块库138可仅包含模块库组件178。模块库组件178可储存在本地端储存108中,像是部分的固件套件116。于远端实现时,模块库138可仅包含模块库组件118,模块库组件118是储存在远端储存装置112(例如固件服务器或网络可寻址储存(network addressablestorage)装置)上。于本地端与远端的组合实现时,模块库138可将模块库组件178及模块库组件118两者皆包含在内。
当至少某些模块库138是在远端实现时,主处理器104或独立处理器106可使用网络接口180(例如有线或无线的网络接口),经由网络110(例如局域网络(local areanetwork;LAN)、广域网络(wide area network;WAN)、云端网络,或网际网络)存取远端储存装置112。当至少某些模块库138是在远端实现时,主处理器104或独立处理器106可在搜寻另一处之前,先在某一处搜寻某个模块。举例来说,在搜寻给定的模块GUID时,可在搜寻模块库组件118之前,先搜寻模块库组件178。可先使用其他顺序,以及预先设定的顺序。
如图1中所描绘,计算环境100可包含第二计算装置114。第二计算装置114可以与计算装置102相同,或者是类似于计算装置102,只不过是带有不同的固件套件120。单纯出于图示的目的,第二计算装置114的组件并未被描绘出。固件套件120可包含模块库组件139,模块库组件139与模块库组件178完全相同。同样地,在模块库138是于本地端与远端的组合所实现的情况下,模块库138可被类似地定义为模块库组件139与模块库组件118的组合。第二计算装置114的至少某些平台特定固件153,是不同于计算装置102的平台特定固件152。
在一个示例中,计算装置102与第二计算装置114皆可以是带有相同硬件的相同装置。计算装置102与第二计算装置114各自的平台特定固件152与平台特定固件153,可以是近乎完全相同的,带有用以初始化多个组件(例如硬件)的相同的编码,所述多个组件(例如硬件)是用以读取其各自的模块列表。在本示例中,平台特定固件152与平台特定固件153之间只有模块列表是不同的。因此,当计算装置102启动,计算装置102将会执行关联于其平台特定固件152中的模块列表的固件,藉此执行来自模块库138(例如来自模块库组件178)的特定一组固件模块。当第二计算装置114启动时,第二计算装置114将会执行关联于其平台特定固件152中的模块列表的固件,藉此执行来自模块库138(例如来自模块库组件139)的不同一组固件模块。如此一来,计算装置102及第二计算装置114可彼此具有不同的能力、状态或用途。
在某些情况中,第二计算装置114是非常不同于计算装置102的装置。举例来说,计算装置102可以是储存局域网络(storage area network;SAN)的储存装置,而第二计算装置114可以是应用程序服务器。在计算装置102与第二计算装置114中所使用的硬件以及规格需求与应用程序,可以是不同的。然而,供应给每个装置的固件套件116与固件套件120可以是近乎完全相同的,带有完全相同的模块库组件178与模块库组件139,但不同的平台特定固件152与平台特定固件153。出于平台特定固件152与平台特定固件153的差异,计算装置102与第二计算装置114能够适当地初始化其各自的硬件,以读取其各自的模块列表,然后执行来自模块库138的各自选定的模块。如此一来,计算装置102可被适当地初始化以作为储存局域网络的储存装置所使用,而第二计算装置114则可被适当地初始化以作为应用程序服务器所使用。
当模块库138中的任何模块需要被更新时,这种更新可推出作为单一的模块,或者可包含在新的固件套件116与固件套件120中,又或者可在远端的储存装置112上自动更新。当想要改变计算装置102的固件中所使用的特定模块或设定时,可更新平台特定固件152的模块列表或其他设定(例如配置参数)。
在某些情况中,计算环境100可包含管理计算装置160。管理计算装置160可耦接至网络110,以与计算装置102进行通讯,以管理其固件。管理计算装置160可用以对平台特定固件152作调整(例如对模块列表作改变,或者对配置参数或其他设定作改变),或者可对某些或所有的模块库组件178作更新,又或者可将固件套件116整个替换掉。管理计算装置160可与计算装置102中的管理控制器158互动,然而并非总是必须如此。
根据本公开的某些示例,图2是描绘初始的固件套件216及可执行的固件包240的示意图。固件套件216可以是任何适用的固件套件,像是图1的固件套件116。如图2中所描绘,整个模块库238是展示为部分的固件216,然而并非总是必须如此。在其他情况下,某些或所有的模块库238是位于远端储存装置中,像是图1的远端储存装置112。
固件套件216包含平台特定固件252及模块库238。平台特定固件252包含主要模块222及次要模块224。主要模块222包含计算装置(例如图1所述的计算装置102的主处理器104或独立处理器106)可执行的基本编码,以初始化其某些组件(例如硬件),所述多个组件(例如硬件)是用以存取次要模块224、存取模块库238,及/或实施存取与执行来自模块库238的特定模块所需的任何其他任务。
次要模块224可包含模块列表282,并且可选地包含配置参数256。次要模块224可储存在可写入的存储器中,像是NVRAM,然而并非总是必须如此。
模块列表282为所选取模块的列表,将使用于给定的计算装置的启动程序中。在某些情况中,模块列表282是完整的,然而并非总是必须如此,因为在某些情况中,其他依附模块毋须包含在模块列表282本身当中,即可自动实现。如图2中所描绘,模块列表282鉴别出要包含在固件包240中的模块A及模块C。虽然模块列表282被描绘为“A”与“C”,模块列表282会包含待实现的模块的GUID。举例来说,模块列表282会包含模块C 230的GUID(例如在此更进一步详述的B516efee-2a80-4c10-a976-ff453d6c4bf1),而非使用“C”来表示待实现的是模块C 230。模块可以其他方式所组织。此外,模块列表282可包含附加信息,像是若可用时所使用的替代模块(例如给定模块的替代版本)、注释,以及其他信息。
配置参数256可包含,在启动程序的期间所使用的变数或其他设定。这些参数可使用于解读模块列表282(例如协助鉴别使用哪个版本的给定模块)、组成固件包240,或者执行固件包240的一个或多个模块227、模块233、模块231。配置参数256可以是在启动程序的期间持续使用的全局参数(global parameters),或者是至少在执行固件包240的期间持续使用的全局参数。
模块库238可包含任意数个模块,如图2中所描绘的模块A 226至模块n 236。模块A226、模块B 228、模块C 230、模块D 232、模块E 234及模块n 236可储存在一起,然而并非总是必须如此。模块库238的每个模块A 226、模块B 228、模块C 230、模块D 232、模块E 234及模块n 236,可以是不同的。在某些情况中,模块库238的多个模块可实施类似的功能(例如初始化相同部分的固件),但是以不同的方式或不同的结果所实施。在某些情况中,模块库238的多个模块可用以取得相同的结果,但可使用不同硬件以不同方式来这么做。
出于图示的目的,模块C 230被更详细地叙述,然而模块库238的任何其他模块226、228、232、234、236可包含类似的元件。模块C 230可包含模块属性242及模块编码254。模块编码254是被执行为部分固件包240的真实编码。模块属性242可包含模块GUID244及依附信息,像是母依附GUID 246及子依附GUID 248。出于图示的目的,完整的GUID(例如”B516efee-2a80-4c10-a976-ff453d6c4bf1”)被描绘给模块GUID 244,但缩写版本的GUID(例如“D”、“A”、“E”)被描绘在母依附GUID 246与子依附GUID 248中。
当组成固件包240时,可存取模块列表282中的每个模块的模块属性242,以鉴别出任何潜在的依附信息。通过使用该依附信息,可以判断固件包240中是否有任何的附加模块必须被使用,以及判断使用的顺序。
在图2中所描绘的示例中,次要模块224中的模块列表282表示模块A 226及模块C230待使用。当模块C 230的模块属性242被存取时,可见模块D 232及模块A 226均被列入母依附GUID 246的片段中。因此,当组成固件包240时,模块A 226及模块D 232被包含在内,并且是在模块C 230之前被包含。更具体而言,由于模块A 226已被包含在模块列表282中,依附信息将用以确保模块A 226是在模块C 230之前被包含,因为模块A 226是模块C 230的母模块。然而,模块D 232并不在模块列表282中,因此会被新包含进来,并且是在模块C 230之前被包含。
在本示例中,模块E 234被列入模块C 230的子依附GUID 248的片段中。在某些情况中,这个子模块将在模块C 231之后自动被包含在固件包240中的某个位置,然而并非总是必须如此。在某些情况中,若模块列表282亦包含这个子模块(例如模块E 234),该子模块将会仅被包含在固件包240中,在这种情况中,该子模块将会在模块C 231之后,才会被包含。
每当加入一个不在模块列表282上的模块(例如模块D 232),那个模块的模块属性242将被存取,以判断是否存在任何的依附信息。若存在依附信息,则那个依附信息将会用以添加附加模块及/或将给定的模块调配到固件包中正确的顺序。
出于图示的目的,固件包240被描绘为一组模块227、模块223及模块231。固件包240是由平台特定固件252及模块库238所组成。出于图示的目的,在固件包240本身之中,模块A 226是以模块A 227为代表,模块D 232是由模块D 233为代表,模块C 230是由模块C231为代表。图2中所描绘的模块227、模块233、模块231可以是(i)其各自的模块226、模块232、模块230的副本;(ii)其各自的模块226、模块232、模块230的模块编码254的副本;(iii)指向其各自的模块226、模块232、模块230的指标(pointers),或是其各自的模块226、模块232、模块230的GUID;或(iv)指向其各自的模块226、模块232、模块230的模块编码254的指标。
因此,在某些情况中,固件包240可以是一种实际的文档,内含于启动程序的阶段所执行的编码。在某些情况中,固件包240可以是一种模块顺序的文档,指示要存取及执行那些模块。在这种情况中,固件包240可在执行之前组成,然而并非总是必须如此。在某些情况中,固件包240可以是所欲模块的执行顺序的抽象代表(abstraction representative),像是若在组成固件240的程序的期间,经手启动程序的处理器直接执行模块。在这种情况中,“组成”固件包240包含相继地执行每个待执行的模块。
根据本公开的某些示例,图3是描绘多个计算装置360、计算装置364与计算装置368上所使用的一般模块库338的示意图。模块库338可以是任何适用的模块库,像是图2的模块库238。模块库338可以是部份的固件套件316,并可与平台特定固件352储存在一起(例如连续地,或者是在本地端),或者是储存在远端。模块库338包含多个模块,像是模块326、模块328、模块330、模块332、模块334及模块336。
在图3的示例中,计算装置A 360、计算装置B 364及计算装置C 368个别包括相同的硬件,且个别具有固件套件316的完全相同的副本,包含主要模块322的完全相同的副本,除了在其各自的次要模块324中的差异。计算装置A 360的次要模块324包含模块列表362,表示模块A 326及模块C 330;计算装置B 364的次要模块324包含模块列表366,表示模块A326及模块E 334;以及计算装置C 368的次要模块324包含模块列表370,表示模块B 328及模块C 330。
在计算装置A 360的启动程序的期间,将会执行其主要模块322的副本,接着将会存取其模块列表362。模块列表362表示模块A 326及模块C 330。因此,如同从图2的模块列表282所组成的固件包240,固件包372将会从模块列表362所组成。固件包372包含模块A326、模块D 332及模块C 330。虽然模块D 332不再模块列表362上,模块D 332仍被加入固件包372,因为模块D 332是模块C的母依附模块。同样地,由于模块A 326及模块D 332皆为模块C 330的母依附模块,在固件包372中,模块A 326及模块D 332皆会出现在模块C 330之前。计算装置A 360执行固件包372的每个模块,以完成其启动程序。
在计算装置B 364的启动程序的期间,将会执行其主要模块322之副本,接着存取其模块列表366。模块列表366表示模块A 326及模块E 334。因此,固件包374将会组成以包含模块A 326及模块E 334。在本示例中,无论是模块A 326或是模块E 334皆不包含任何的模块依附。计算装置B 364执行固件包374的每个模块,以完成其启动程序。
在计算装置C 368的启动程序的期间,将会执行其主要模块322的副本,接着将会存取其模块列表370。模块列表370表示模块B 328及模块C 330。因此,固件包376将会组成以包含模块B 328及模块C 330。在本示例中,由于模块A 326及模块A 332是模块C 330的母依附,它们也包含在固件包376的组成中。此外,在本示例中,模块B 328是模块D 332的子依附。因此,由于模块D 332及模块B 328包含在固件包376中,模块B 328是在模块D 332之后所包含。计算装置C 368执行固件包376的每个模块,以完成其启动程序。
每个计算装置A 360、计算装置B 364及计算装置C 368的次要模块324,其各自的模块列表362、模块列表366与模块列表370的小改变,导致每个这些计算装置使用不同的固件模块所启动。虽然传统的技术会需要为每个这些计算装置A 360、计算装置B 364及计算装置C 368产生新的固件映像;本公开的某些示例允许对所有计算装置A 360、计算装置B364及计算装置C 368使用单一的固件套件316,仅在可轻易写入的次要模块324中有小改变。
此外,若模块A 326待更新(例如修正错误或实现新功能),使用者可以只更新模块A 326,接着提供该更新给每个计算装置A 360、计算装置B 364及计算装置C 368,以更新其模块库338的本地端储存的模块A 326,或者提供该更新给远端的储存装置,以更新模块库338的远端储存的模块A 326。
此外,虽然在第一示例中是以带有相同硬件的不同计算装置所叙述,在第二示例中,计算装置A 360、计算装置B 364及计算装置C 368可以是单计算装置在不同时间(例如分别为第一时间、第二时间与第三时间)的不同情况。在这种示例中,计算装置B 364可以是在通过移除模块C 330及加入模块E 334,以将模块列表362更新至模块列表366之后的计算装置A 360。在这种示例中,当计算装置于第一时间使用模块列表362启动时,它将会使用固件包472以启动。然而,在将模块列表362更新至模块列表366之后,那个相同的计算装置可以在第二时间使用固件包474以启动。因此,单纯通过对次要模块324作改变,即可以不同的两组固件编码启动单计算装置。
每个模块326、模块328、模块330、模块332、模块334及模块336可代表于启动程序的期间,可被计算装置所执行的编码单位。在一示例中,某些模块可代表用以实现系统管理规格或协定的编码,像是Redfish标准。在本示例中,模块C可代表Redfish版本1.5,而模块E可代表Redfish版本1.1。于是,在模块列表362与模块列表366中的些微模块列表362与模块列表366中的些微差异,可分别使计算装置A 360与计算装置B 364以不同的固件包372与固件包374所启动,而带往Redfish标准的不同的实现。在某些情况中,单模块列表可将模块C330列为模块E 334的较佳替代。在这种情况中,若可能的话会使用模块C 330,但若模块C330无法取得或者无法使用,则可改用模块E 334。
在某些情况中,计算装置A360、计算装置B 364及计算装置C 368可包含不同的硬件。在这种情况中,计算装置A360、计算装置B 364与计算装置C 368各自的固件包372、固件包374与固件包376,可用以初始化不同的硬件组件。然而在某些情况中,可使用不同的硬件以存取次要模块324、存取模块库338,或者执行计算装置A 360、计算装置B 364与计算装置C 368各自的固件包372、固件包374与固件包376。在这种情况中,计算装置A 360、计算装置B 364与计算装置C 368可个别使用不同的主要模块,而非使用相同的主要模块322。因此,可使用计算装置A 360、计算装置B 364与计算装置C 368各自的主要模块中的不同编码,以初始化其适合的硬件组件。
根据本公开的某些示例,图4是描绘模块化组成固件的程序400的流程图。程序400可以是在任何适合的计算装置上所实施,像是图1所述的计算装置102。
在区块402,可存取固件映像。存取固件映像可包含存取含有固件映像的本地端存储器。存取固件映像可包含对计算装置供电,以使计算装置的处理器(例如主处理器或独立处理器)存取及开始执行固件映像。
在区块404,执行固件映像的主要模块。执行主要模块可包含初始化计算装置的至少一个硬件组件。该至少一个硬件组件可以是用以实施以下将更进一步详述的一个或多个区块406、区块408及区块410的一种组件。举例来说,在区块408的实施需要使用网络接口的情况中,则主要模块在区块404的执行可包含网络接口的初始化。
在区块406,可存取模块列表。模块列表可表示一组所选取模块,待使用于实施程序400的计算装置的启动。在区块406所存取的模块列表可以是使用者可修改的,像是经由文字编辑器或管理接口。在某些情况中,在区块406的模块列表可包含关联于给定模块的一个或多个较佳替代模块,然而并非总是必须如此。在某些情况中,模块列表可储存在,在区块402所存取的固件映像的次要模块中,然而并非总是必须如此。
在可选的区块424,可存取配置参数。配置参数可以是平台特定及/或使用者可修改的参数,于程序400的期间所使用,像是在区块408组成固件包的期间,及/或于以下将更进一步详述的区块420执行一个或多个模块的期间。
在区块408,可组成固件包。固件包是在实施程序400的计算装置启动的期间,待执行的模块的列表、待执行的一组模块,或待执行的模块的代表。固件包是基于在区块406所存取的模块列表。在区块408组成固件包,可包含反复地在模块列表中所鉴别出该组所选取模块的每个模块间跨越。在较佳替代模块表示一个给定模块的情况中,若较佳替代模块被鉴别出以及被使用,则该给定模块可以被跳过。
对于从区块406,模块列表中所鉴别出所选取模块的每个模块而言,在区块408组成固件包,可包含在区块410存取来自模块库的模块。在区块410存取模块可包含将模块设置于模块库中,像是使用模块的GUID。在某些情况中,在区块410存取模块可包含存取储存在实施程序400的计算装置中的本地端储存装置上的模块库组件。在某些情况中,在区块410存取模块可包含存取储存在远端储存装置上的模块库组件,该模块库组件可经由实施程序400的计算装置的网络接口所存取。
在某些情况中,在区块408组成固件包,包含在区块412为给定模块(例如在区块410所存取的每个模块)存取依附信息。每个模块可包含模块依附信息,模块依附信息表示给定模块与一个或多个其他模块之间的依附链(chain of dependency)或依附关系。存取模块依附信息可包含存取母依附信息(例如一个或多个母依附GUID)及/或存取子依附信息(例如一个或多个子依附GUID)。
在某些情况中,依附信息可使用在区块414,以将模块列表的模块(例如该组所选取模块)排列至模块序列中。将模块排列至模块序列中可包含排列模块,以使得在模块序列中,每个模块是在其任一母依附模块之后以及其任一子依附模块之前出现。于是,当固件包在区块420所执行时,任何母模块可以是在需要母依附模块的模块执行之前所执行。
在某些情况中,在区块416,可使用模块依附信息以鉴别欲加入固件包的附加模块。在某些情况中,母依附模块或子依附模块可表示为可选的或需要的,然而并非总是必须如此。在某些情况中,可假定所列出的任何母依附模块或子依附模块都是需要的。当所需依附模块(例如母依附模块或子依附模块)被列入给定模块的依附信息中,但未被列入来自模块列表的该组所选取模块中,在区块408构成固件包,可包含在区块416将所需依附模块添加至固件包(例如将所需依附模块以正确的顺序添加至模块序列,像是参考区块414)。添加所需依附模块可包含在那个模块上实施区块408的所有示例,就如同它原本被包含在模块列表中一般,像是参考那个模块以实施区块410、区块412、区块414及区块416。
在某些情况中,像是使用单一处理器(例如主处理器)以实施程序400时,在区块408固件包可以是以模块序列或模块集合的形式所组成。此固件包可在区块420执行。固件包的执行可包含执行在区块408所组成的固件包的每个模块,包含来自区块106的模块列表的每个该组所选取模块,以及在区块416所添加的任何附加模块。
在某些情况中,像是使用多个处理器以实施程序400时,在区块408组成固件包,可包含在区块418将给定模块复制到系统存储器。在这种情况中,可由独立处理器执行程序400的某些示例,在区块420将固件包的执行留给主处理器。在这种情况中,在区块408组成固件包可由独立处理器所实施,并可包含在区块418将给定模块复制到系统存储器。复制给定模块可包含在区块408将每个待执行模块复制为部份的固件包,包含来自区块406的模块列表的每个该组所选取模块,以及在区块416所添加的任何附加模块。在某些情况中,复制模块可包含使用区块414的模块序列,以将模块以模块序列的顺序进行复制。在某些情况中,区块414的模块序列可分开地储存在主处理器可存取的表中(例如储存在系统存储器中)。在某些情况中,在区块418将模块复制到系统存储器,可包含将存储器设定储存在主处理器可存取的表中(例如含有模块序列的表,或是储存在系统存储器中的另一张表)。
当使用多个处理器时,在区块408组成固件包之后,独立处理器可将控制权移交给主处理器。在区块420,主处理器可接着执行固件包。在这种情况中,执行固件包可包含存取储存在系统存储器中的固件包。在某些情况中,主处理器可更进一步存取其他信息,像是含有模块序列及/或存储器设定的表,其他信息可被主处理器用以存取及执行固件包。
在配置参数在区块424所存取的情况中,于给定模块的执行期间,可将配置参数传递给一个或多个(例如一个、某些或所有)在区块420所执行的模块。
在固件包已在区块420所执行之后,在区块422,计算装置能可选地进入操作系统。在某些情况中,在区块420所执行的模块可帮助或触发操作系统的载入。
虽然程序400的区块是以特定的顺序所描绘,在某些情况中,程序400的区块可以不同的顺序发生,可选地包含额外的区块及/或较少的区块。在一示例中,在使用独立处理器时的某些情况中,在区块406存取模块列表,以及在区块408组成固件包,可在主要模块在区块404执行之前发生。在这种情况中,在区块418独立处理器已完成将每个该组所选取模块的每个模块复制到系统存储器时,独立处理器可将控制权移交给主处理器,主处理器可在区块420执行固件包之前,在区块404接着执行主要模块。
图5是实现本公开的某些特征及程序(像是参考图4的程序400所呈现)的示例系统架构500的方块图。系统架构500可用以实现服务器、使用者装置、计算装置(例如图1所述的计算装置102、第二计算装置114、远端储存装置112,或管理计算装置160),或是任何其他适用以实施本公开的某些或所有示例的装置。系统架构500可以在运行从已编译指令所取得的软件应用程序的任何电子装置上所实现,包含但不限于个人计算机、服务器、智能型手机、电子平板、游戏机、电子邮件装置,以及类似的装置。在某些实现中,系统架构500可包含一个或多个处理器502(例如主处理器及可选的独立处理器)、一个或多个输入装置504、一个或多个显示装置506、一个或多个网络接口508,以及一个或多个计算机可读取介质。每个这些组件可被总线512所耦接。
显示装置506可以是任何公知的显示技术,包含但不限于使用液晶显示(LiquidCrystal Display;LCD)或发光二极管(Light Emitting Diode;LED)技术的显示装置。处理器502可使用任何公知的处理器技术,包含但不限于图形处理器及多核心处理器。输入装置504可以是任何公知的输入装置技术,包含但不限于键盘(包含虚拟键盘)、滑鼠、轨球(trackball),以及触摸感应垫(touch-sensitive pad),或显示器。在某些情况中,可使用声音输入以提供声音信号,像是个人说话的声音信号。总线512可以是任何以知的内部或外部总线技术,包含但不限于工业标准架构(industry standard architecture;ISA)、扩展工业标准架构(extended industry standard architecture;EISA)、外围组件互连(peripheral component interconnect;PCI)、快速外围组件互连(PCI Express)、无总线(NoBus)、通用串行总线(universal serial bus;USB)、串行进阶技术附接(Serial ATA),或火线(FireWire)。
计算机可读取介质510可以是参与提供指令给处理器502以执行的任何介质,包含但不限于非易失性储存介质(例如光盘、磁盘、快闪盘等)或易失性的介质(例如同步动态随机存取存储器(SDRAM)、只读存储器(ROM)等)。举例来说,计算机可读取介质510(例如储存装置、介质及存储器)可包含缆线,或者含有比特流(bit stream)的无线信号,以及其他类似的介质。然而,当被提及时,非暂态计算机可读取储存介质明确地排除像是能量、载波信号(carrier signals)、电磁波及信号本身的介质。
计算机可读取介质510可包含各种指令,以实现操作系统514,以及应用程序520,像是计算机程序。操作系统514可以是多使用者的、多重处理的(multiprocessing)、多重任务的(multitasking)、多执行线程的(multithreading)、即时的,以及类似的操作系统。操作系统514实施基本任务,包含但不限于:从输入装置504辨识输入;将输出发送给显示装置506;记录计算机可读取介质510上的文档或目录;控制可通过I/O控制器所直接控制的外围装置(例如储存盘、接口装置等);以及管理总线512上的流量。计算机可读取介质510可包含各种指令以实现固件程序,像是BIOS。在某些情况中,计算机可读取介质510可包含固件套件,固件套件包含主要模块、次要模块,以及模块库中的任意数个附加模块(例如图2的主要模块222、次要模块224及模块库238)。计算机可读取介质510可包含各种指令,以实现在此所叙述的任何程序,包含但不限于至少图4的程序400。
存储器518可包含高速随机存取存储器及/或非易失性存储器,像是一个或多个磁盘储存装置、一个或多个光学储存装置,及/或闪存(例如与非(NAND)、或非(NOR))。存储器518(例如计算机可读取储存装置、介质及存储器)可包含缆线,或者含有比特流的无线信号,以及类似的介质。然而,当被提及时,非暂态计算机可读取储存介质明确地排除像是能量、载波信号、电磁波及信号本身的介质。存储器518可储存在操作系统上,像是达尔文(Darwin)、RTXC、LINUX、UNIX、OSX、WINDOWS,或是嵌入式操作系统,像是VxWorks。在某些情况中,根据本公开的某些示例的固件套件的示例,可储存在存储器518中。
系统控制器522可以是独立于处理器502所运作的服务处理器。在某些实现中,系统控制器522可以是基板管理控制器(BMC)。
本公开的某些示例及特征,可以在一个或多个计算机程序中有利地实现,计算机程序能在可程序化系统上执行,可程序化系统包含至少一个可程序化处理器,耦接以从数据储存系统、至少一个输入装置及至少一个输出装置接收数据及指令,以及将数据及指令传输至数据储存系统、至少一个输入装置及至少一个输出装置。计算机程序是一组指令,可直接或间接地使用在计算装置中,以实施某些活动或造成某些结果。计算机程序可以是以任何形式的程序语言(例如Objective C、Java)所编写,包含已编译或已解读的语言,并且能以任何形式所部署,包含部署为单独的程序,或者是部署为模块、组件、子程序(subroutine),或者适用于计算环境的其他单位。
适用于执行程序指令的处理器包含,例如通用微处理器及特别用途微处理器两者,以及单一处理器,或是任何一种计算装置的多个处理器或核心的其中一者。一般来说,处理器会从只读存储器或随机存取存储器或上述两者接收指令及数据。计算装置的必要元件是处理器以执行指令,以及一个或多个存储器以储存指令及数据。一般来说,计算装置也会包含一个或多个大量储存装置(mass storage device),以储存数据文档。这种装置包含磁盘,像是内部硬盘(internal hard disk)及可移磁盘(removable disk)、磁光盘(magneto-optical disk)及光盘。适用于有形地实施计算机程序指令及数据的储存装置,包含所有形式的非易失性存储器,包含例如半导体存储器装置,像是可擦除可程序化只读存储器(erasable programmable read only memory;EPROM)、电子可擦除可程序化只读存储器(electrically erasable programmable read only memory;EEPROM)及闪存装置;磁盘,像是内部硬盘及可移磁盘;磁光盘;以及CD-ROM与DVD-ROM盘。处理器及存储器可补充或纳入专用集成电路(application specific integrated circuit;ASIC)。
为了提供与使用者的互动,特征可实现在具有显示装置以及键盘与指向装置(pointing device)的计算装置上,像是阴极射线管(cathode ray tube;CRT)或LCD屏幕等显示装置以向使用者展示信息,以及像是鼠标或轨球以让使用者提供输入给计算装置。
本公开的某些示例可以在计算机系统中实现,该计算机系统包含后端组件(像是数据服务器)、中间软件(middleware)组件(像是应用程序服务器或网际网络服务器)、前端组件(像是具有图形使用者接口或网际网络浏览器的客户端计算装置),或者上述的任何组合。系统的组件可被任何形式或媒介的数位数据通讯所连接,像是通讯网络。通讯网络的示例包含,例如局域网络(LAN)、广域网络(WAN),以及形成网际网络的计算机与网络。
计算系统可包含客户端及服务器。客户端及服务器一般是互为彼此的远端,且通常是通过网络进行互动。客户端与服务器的关系,是通过在各自的计算机上运行且彼此具有客户端与服务器关系的计算机程序所形成。
所公开实施例的一个或多个特征或步骤,可以是使用应用程序接口(API)所实现。API可定义一个或多个参数,该一个或多个参数被传递于呼叫应用程序(callingapplication)及其他软件编码(例如操作系统、函数库例程(library routine)、函数)之间,所述多个软件编码提供服务、提供数据,或者实施操作或计算。API可实现为程序码中的一个或多个呼叫,基于API文规格文件中所定义的约定,通过参数列表或其他结构发送或接收参数。参数可以是常数(constant)、秘钥(key)、数据结构、对象、对象类别(objectclass)、变数、数据类型、指标、阵列、列表,或是另一个呼叫。API呼叫及参数可以任何一种程序语言所实现。程序语言可定义程序设计师会运用来存取API支持功能的词汇及呼叫约定(calling convention)。在某些实现中,API呼叫可将运行应用程序的装置的能力,像是输入能力、输出能力、处理能力、电源能力、通讯能力,以及类似的能力,回报给应用程序。
以上对于实施例的叙述,包含图示的实施例,仅出于例证及叙述的目的所提出,而并非意图穷举或限制于所公开的确切形式。对于本领域通常知识者而言,许多的修改、调适及其使用将是显而易见的。在不背离本发明的精神或范围的前提下,可根据此处的公开,对所公开实施例做出许多改变。因此,本发明的广度及范围不应受限于任何一种上述的实施例。
虽然本发明已参考一种或多种实现所图示及叙述,当本领域通常知识者阅读与理解本说明书及附加的附图,将会想到或知道均等的替代及修改。此外,虽然本发明的特定特征可能已仅参考数种实现之一所公开,在可能需要或利于任何给定的特定应用的情况下,这种特征可以与其他种实现的一个或多个其他特征合并。
在此所使用的术语仅以叙述特定的实施例为目的,而并非意图限制本发明。如在此所使用的,单数形“一”及“该”意图亦包含复数形,除非文意明显另有所指。此外,倘若“包含”、“具有”、“带有”等用词或者其变形,被使用在实施方式及/或权利要求中,这类词汇意图被包含在类似于“包括”一词的方式中。
除非另有定义,在此所使用的所有词汇(包含技术性及科学性的词汇),与本技术领域的普通技术的人一般所理解的,具有相同的含意。此外,像是被定义在一般所使用的字典中的词汇,应被解读为具有与它们在相关技术的文意中一致的含意,且除非在此被明确地如此定义,否则所述多个词汇不会被解读为理想化或过度正式的概念。
[符号说明]
100:计算环境
102:计算装置
104:处理器
106:独立处理器
108:本地端储存装置
110:网络
112:远端储存装置
114:第二计算装置
116:固件套件
118:模块库组件
120:固件套件
138:模块库
139:模块库组件
152:平台特定固件
153:平台特定固件
158:管理控制器
160:管理计算装置
178:模块库组件
180:网络接口
216:固件套件
222:主要模块
224:次要模块
226:模块A
227:模块A(副本)
228:模块B
230:模块C
231:模块C(副本)
232:模块D
233:模块D(副本)
234:模块E
236:模块n
238:模块库
240:固件包
242:模块属性
244:模块GUID
246:母依附GUID
248:子依附GUID
252:平台特定固件
254:模块编码
256:配置参数
282:模块列表
316:固件套件
322:主要模块
324:次要模块
326:模块A
328:模块B
330:模块C
332:模块D
334:模块E
336:模块n
338:模块库
352:平台特定固件
360:计算装置A
362:模块列表
364:计算装置B
366:模块列表
368:计算装置C
370:模块列表
372,374,376:模块包
400:程序
402-424:区块
500:系统架构
502:处理器
504:输入装置
506:显示装置
508:网络接口
510:计算机可读取介质
512:总线
514:操作系统
518:存储器
520:应用程序
522:系统控制器。
Claims (10)
1.一种组成模块化固件的方法,包括:
存取来自计算装置的本地端储存装置的固件映像,该固件映像包含主要模块及模块列表;
执行该主要模块,其中执行该主要模块包含初始化该计算装置的一个或多个硬件资源;
存取关联于该固件映像的该模块列表,其中该模块列表包含关联于模块库的一组所选取模块的唯一标识信息,其中该模块库包含多个可执行模块;
基于该组所选取模块,组成固件包,其中组成该固件包包含存取该组所选取模块的每一模块;以及
执行该固件包。
2.根据权利要求1所述的方法,其中组成该固件包还包括:
存取关联于该组所选取模块的至少一个模块的依附信息;
使用该依附信息鉴别附加模块,其中该附加模块未包含在该组所选取模块中;以及
将该附加模块添加到该固件包。
3.根据权利要求1所述的方法,其中组成该固件包还包括:
存取关联于该组所选取模块的至少一个模块的依附信息,其中该依附信息鉴别母模块及子模块;以及
使用该依附信息产生一块序列,其中产生该模块序列包含在该子模块之前,将该母模块部署在该模块序列中,其中执行该固件包包含基于该模块序列执行该固件包。
4.根据权利要求1所述的方法,其中该计算装置包含主处理器及独立处理器;
其中执行该主要模块、存取该模块列表,以及组成该固件包,是由该独立处理器所实施;以及
其中执行该固件包是由该主处理器所实施;
其中组成该固件包还包括将该组所选取模块的每一模块复制到该主处理器可存取的系统存储器中;以及
其中执行该固件包包含存取来自该系统存储器的该固件包。
5.根据权利要求4所述的方法,还包括:
存取来自该固件映像的多个配置参数,并将所述多个配置参数储存在该系统存储器中;以及
将模块序列储存在该系统存储器中,其中该模块序列指示执行该固件包的所述多个模块的顺序;
其中执行该固件包还包括以该模块序列所指示的该顺序,执行该固件包的每一模块;
其中执行该固件包的每一模块,包含应用所述多个配置参数。
6.根据权利要求1所述的方法,还包括:
更新该模块列表,以产生已更新模块列表,该已更新模块列表具有一组已更新所选取模块,其中该组已更新所选取模块不同于该组所选取模块;
重新启动该计算装置;
基于该组已更新所选取模块,组成已更新固件包;以及
执行该已更新固件包。
7.一种计算机程序产品,有形地实施在非暂态机器可读取储存介质中,包含多个指令,设置以使一个或多个数据处理设备实施权利要求1所述的方法。
8.一种组成模块化固件的计算装置,包括:
第一硬件装置及第二硬件装置;
一个或多个处理器;以及
非暂态计算机可读取储存介质,含有多个指令,当在该一个或多个处理器上执行时,使该一个或多个处理器实施操作,包含:
存取固件映像,该固件映像包含主要模块及模块列表;
执行该主要模块,其中执行该主要模块包含初始化该第一硬件装置;
存取关联于该固件映像的该模块列表,其中该模块列表包含关联于模块库的一组所选取模块的唯一标识信息,其中该模块库包含多个可执行模块;
基于该组所选取模块,组成固件包,其中组成该固件包包含存取该组所选取模块的每一模块;以及
执行该固件包,其中执行该固件包包含初始化该第二硬件装置。
9.根据权利要求8所述的计算装置,还包括网络接口,其中存取该组所选取模块的每一模块包含经由该网络接口,存取来自远端储存装置的该组所选取模块的至少一个模块。
10.根据权利要求8所述的计算装置,其中该一个或多个处理器包含主处理器及独立处理器;
其中执行该主要模块、存取该模块列表,以及组成该固件包,是由该独立处理器所实施;以及
其中执行该固件包是由该主处理器所实施;
其中组成该固件包还包括将该组所选取模块的每一模块复制到该主处理器可存取的系统存储器中;以及
其中执行该固件包包含存取来自该系统存储器的该固件包。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/205,818 US20220300276A1 (en) | 2021-03-18 | 2021-03-18 | Modular firmware composition |
US17/205,818 | 2021-03-18 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115113912A true CN115113912A (zh) | 2022-09-27 |
Family
ID=83284740
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110829531.1A Pending CN115113912A (zh) | 2021-03-18 | 2021-07-22 | 组成模块化固件的方法、装置及计算机程序产品 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20220300276A1 (zh) |
CN (1) | CN115113912A (zh) |
TW (1) | TWI777636B (zh) |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6381693B2 (en) * | 1998-12-31 | 2002-04-30 | Intel Corp. | Arrangements having firmware support for different processor types |
US6633976B1 (en) * | 2000-08-10 | 2003-10-14 | Phoenix Technologies Ltd. | Method of storing BIOS modules and transferring them to memory for execution |
US7454603B2 (en) * | 2002-02-11 | 2008-11-18 | Intel Corporation | Method and system for linking firmware modules in a pre-memory execution environment |
US7774596B2 (en) * | 2005-02-02 | 2010-08-10 | Insyde Software Corporation | System and method for updating firmware in a secure manner |
US8707297B2 (en) * | 2006-07-26 | 2014-04-22 | Dell Products L.P. | Apparatus and methods for updating firmware |
TWI349882B (en) * | 2007-09-04 | 2011-10-01 | Quanta Comp Inc | Firmware update system and method for update the same |
US8898654B2 (en) * | 2012-08-29 | 2014-11-25 | Microsoft Corporation | Secure firmware updates |
WO2017052528A1 (en) * | 2015-09-23 | 2017-03-30 | Hewlett Packard Enterprise Development Lp | Selecting and loading firmware volumes |
US10331434B2 (en) * | 2016-12-21 | 2019-06-25 | Quanta Computer Inc. | System and method for remotely updating firmware |
US10503489B1 (en) * | 2018-05-22 | 2019-12-10 | Quanta Computer Inc. | Updating firmware via a remote utility |
US10922071B2 (en) * | 2019-03-13 | 2021-02-16 | Quanta Computer Inc. | Centralized off-board flash memory for server devices |
-
2021
- 2021-03-18 US US17/205,818 patent/US20220300276A1/en active Pending
- 2021-06-29 TW TW110123673A patent/TWI777636B/zh active
- 2021-07-22 CN CN202110829531.1A patent/CN115113912A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
TWI777636B (zh) | 2022-09-11 |
TW202238379A (zh) | 2022-10-01 |
US20220300276A1 (en) | 2022-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106227579B (zh) | 一种Docker容器构建方法及Docker管理控制台 | |
JP7090657B2 (ja) | アプリケーションをアップグレードするための方法、装置、デバイスならびに記憶媒体 | |
US9626181B2 (en) | Systems and methods to securely inject binary images and code into firmware | |
Zimmer et al. | Beyond BIOS: developing with the unified extensible firmware interface | |
US7162626B2 (en) | Use of common language infrastructure for sharing drivers and executable content across execution environments | |
CN109478135A (zh) | 优化的uefi重新引导过程 | |
US10810017B2 (en) | Systems and methods for handling firmware driver dependencies in host operating systems while applying updates from bootable image file | |
US10025587B2 (en) | Method of bootup and installation, and computer system thereof | |
US8539214B1 (en) | Execution of a program module within both a PEI phase and a DXE phase of an EFI firmware | |
US10664598B1 (en) | Firmware security patch deployment | |
CN114222975A (zh) | 使用存储器孔径冲刷顺序的数据保存 | |
US20140366045A1 (en) | Dynamic management of composable api sets | |
EP3207453B1 (en) | Api versioning independent of product releases | |
JP2023507709A (ja) | 統合された参照及び二次のマーキング | |
CN115291946A (zh) | 鸿蒙系统移植方法、装置、电子设备及可读介质 | |
US9727390B1 (en) | Invoking a firmware function | |
US11340882B2 (en) | Systems and methods for enforcing update policies while applying updates from bootable image file | |
US8078637B1 (en) | Memory efficient peim-to-peim interface database | |
US7873807B1 (en) | Relocating a program module from NVRAM to RAM during the PEI phase of an EFI-compatible firmware | |
US20150212866A1 (en) | Management system for service of multiple operating environments, and methods thereof | |
US20230093197A1 (en) | Generating executables for target operational environments | |
CN115113912A (zh) | 组成模块化固件的方法、装置及计算机程序产品 | |
US8135943B1 (en) | Method, apparatus, and computer-readable medium for generating a dispatching function | |
Thiruvathukal | Gentoo linux: the next generation of linux | |
CN114253615B (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 |