UEFI固件的方法及其计算机系统与流程

文档序号:11828831阅读:420来源:国知局
本发明关于一种UEFI固件的计算机处理执行方法,尤其是关于一种包含多个不同启动加载器之变数/变量及指令集,并且是用于辅助不同启动加载器之启动前的初始化设定的UEFI固件的计算机处理执行方法及其计算机系统。
背景技术
::以传统的计算机系统而言,计算机系统只能启动单一个操作系统。具体而言,操作系统的启动通常是由低阶层指令代码处理,其中低阶层指令码是用来当计算机系统的各个硬件元件与操作系统及执行于该操作系统中其他高阶层软件之间的中介。此低阶层的指令代码常被称为基本输入/输出系统(BasicInput/OutputSystem,亦即BIOS)固件,并提供了一组软件程序供高阶层软件可与计算机系统的硬件进行互动。每当计算机系统被通电开启时,该固件会执行一些程序来进行通电自检的测试(Power-OnSelfTest,亦即POST)以测试并启动计算机系统中的所有硬件元件,并且在其后将控制权转让操作系统。此些硬件元件可包含系统主储存器、硬盘和键盘。然而,随着技术的进步,许多不同的计算机系统和操作系统如雨后春笋般涌现,基于传统BIOS标准的启动固件,其原本是专门设计给国际商业机器公司(InternationalBusinessMachine、IBM)的个人电脑,已成为现代操作系统如何控制及操作硬件的限制点。在新的硬件和软件的技术继续被研发出来的情况下,此限制点已成为能硬件及软件间能有更好的互动的主要障碍。故此,有另一组新的BIOS固件标准被提出并已被市场上许多业者广泛的采用。这种新的标准被称为统一可延伸固件界面或统一可扩展固定接口 (UnifiedExtensibleFirmwareInterface、简称为UEFI)。随着UEFI标准的应用,BIOS企业可生产UEFI固件供各种计算机系统。同时,生产操作系统的公司可通过生产符合UEFI标准的操作系统来利用UEFI固件所提供的服务优势。然而,UEFI标准指定固件与操作系统的加载程序(bootloader)或核心(kernel)必须是大小匹配。例如,一个64位的UEFI固件只能加载64位UEFI操作系统启动加载器或核心。因此,对于具有可支援不同处理器模式(处理器指令集、亦即processorinstructionsets)的计算机结构(例如,x86_64)且符合UEFI标准的计算机系统,启动不同操作系统的不同处理器模式分别必须使用到不同的启动加载器映像档案(bootupimage,亦即已被编译的启动加载器的原始码)。例如,为了能在x86_64的计算机系统下能够支持启动32位或64位的操作系统,分别针对该32位集64位的操作系统的UEFI固件必须被编译并安装于该计算机系统中。对于储存量有限或因设计上实体空间不足供摆设足够到的储存器的计算机系统,储存各该UEFI固件的原始档案的条件会成为此种空间有限的计算机系统的重大问题。此外,在其他情况下,例如UEFI固件已将计算机系统启动为某个处理器模式时,虽然操作系统启动加载器(或核心kernel)可随意更换处理器模式,但执行时期服务(RuntimeServices)的使用会被禁止(除非核心又被切换回来)。因此,有必要降低多个UEFI启动固件的复杂性以致使能支援多个符合UEFI标准的操作系统。技术实现要素:本发明的一个目的在于提供一种计算机系统及其具有能够支持不同的处理器模式的多个操作系统的UEFI固件的方法。本发明提供一种计算机系统及方法,其具有一UEFI固件支援启动不同操作系统的不同模式,本系统及方法可减少UEFI固件所需要使用的空间。根据本发明的一实施例,计算机系统包括一个储存器及一处理器,其中储存器储存一UEFI固件。该UEFI固件可支援多个不同的启动加载器 (bootloaderprograms)的初始化设定(pre-bootinitialization)。其中,该UEFI固件具有多个指令及多个对应于不同启动加载器的组态数据(configurationdata)。该处理器是可操作式耦合于该储存器,并且是用于执行该UEFI固件的多个指令;其中,该些指令可包括执行以下步骤:检测该处理器的指令集的类型;以该处理器,依据一模式选择判断一启动选择模式,其中该启动选择模式对应于检测到的指令组类型,且该模式选择是对应于UEFI固件执行后必须执行的启动加载器的类型;以该处理器,从多个该储存器中该UEFI固件的多个组态数据中取得一个共同组态数据;以该处理器从该储存器中,从对应该启动选择模式的该UEFI固件的该多个组态数据中取得一独特组态资料(distinctconfigurationdata),其中该独特组态数据包括处理器指令集及执行时期服务;产生对应于该启动选择模式的一启动加载器地址(bootloaderaddress);以及依据该共同组态数据及该独特组态数据,执行位于该储存器中该启动加载器地址对应的指位子的启动加载器程序。于一实施例中,判断该启动选择模式的步骤进一步包含:以该处理器从一界面装置接收一选择指令;以及依据该选择指令判断该启动选择模式。于一实施例中,该界面装置为一输入/输出装置,该输入/输出装置耦接至该处理器并且可被该UEFI固件侦测到,该选择指令是由该输入/输出装置产生。于一实施例中,判断该启动选择模式的步骤进一步包含:以该处理器,在执行该启动加载器程序的步骤前,判断一启动标记是否有在该UEFI固件的组态数据中被设定过,其中该启动标记表示一特定启动加载器程序:若有设定该启动标记,以该处理器组态该启动选择模式以对应于该启动标记所表示的启动加载器程序;若没有设定该启动标,以该处理器依据一预设启动加载器程序组态该启动选择模式。于一实施例中,判断该启动标是否有被设定的步骤进一步包含:以该处理器,依据该启动选择模式设定该预设启动加载器程序。于一实施例中,该使用者界面包含多个模式选择项,该方法进一步包含:以该处理器,接收与该使用者界面相关的一选择指令;以及从该选择指令判断该启动选择模式。于一实施例中,在判断该启动选择模式的步骤前,进一步包含:以该处理器,输出一使用者界面供一显示装置显示,该显示装置耦接至该处理器。于一实施例中,产生该启动加载器地址的步骤进一步包含:当执行该UEFI固件时,检测该处理器的该指令集的类型;以该处理器,取得相对所侦测到的该指令集类型的该独特组态数据,以致使能对应的执行相对该侦测到处理器指令集类型的该启动加载器程序。根据本发明的另一个实施例,本发明提供一种用于执行该支援多个不同启动加载器的初始化设定的UEFI固件,其中该UEFI固件位于一储存器,该储存器是可操作地耦合于该处理器,该方法包括:以该处理器,执行该UEFI固件;当执行该UEFI固件时:检测该处理器的指令集的类型;依据一模式选择,判断一启动选择模式,其中该启动选择模式对应于所检测到的该指令集的类型,且该模式选择是对应于用于执行该UEFI固件后执行的一启动加载器的类型;以该处理器,从该储存器中,从该UEFI固件的多个组态数据中取得一个共同组态数据;以该处理器,从该储存器对应于该启动选择模式的UEFI固件的该多个组态数据中,取得一独特组态数据,其中该独特组态数据包括处理器指令集及执行时期服务;产生对应该启动选择模式的一启动加载器地址;以及,根据该共同组态数据及该独特组态数据,执行在一储存器中相对该启动加载器地址所指的启动加载器程序。于一实施例中,该处理器包含一中央处理单元,以及该储存器包含闪存储存器及只读储存器。于一实施例中,该启动加载器程序对应于一操作系统程序。于一实施例中,从该指令中判断该启动选择模式的步骤进一步包含:以该处理器,从一界面装置接收一选择指令;以及从该选择指令中判断该启动选择模式。于一实施例中,该界面装置为一输入/输出装置,该输入/输出装置耦接于该处理器并且会被该UEFI固件侦测到,以及该选择指令由该输入/输出装置产生。于一实施例中,该界面装置包含一触碰显示器、键盘、滑鼠装置、指示笔、影像感测器及声音感测器。于一实施例中,从该指令中判断该启动选择模式的步骤进一步包含:以该处理器,在执行该启动加载器程序的步骤前,判断一启动标记是否有在该UEFI固件的组态数据中被设定过,其中该启动标记表示一特定启动加载器程序:若有设定该启动标记,以该处理器组态该启动选择模式以对应于该启动标记所表示的启动加载器程序;若没有设定该启动标,以该处理器依据一预设启动加载器程序组态该启动选择模式。于一实施例中,在判断该启动标记是否有被设定过的步骤后,进一步包含:以该处理器,根据该启动选择模式设定该预设启动加载器。于一实施例中,进一步包含一显示器装置,该显示器装置用于显示一使用者界面,其中该显示装置耦接于该处理器。于一实施例中,该使用者界面包含多个模式选择项,该指令的步骤进一步包含:以该处理器,接收与该使用者界面相关的一选择指令;以及从该选择指令判断该启动选择模式。附图说明图1为本发明包含计算装置的一操作环境的一实施例;图2为一计算装置的开机/启动结构的一实施例;图3为从一只读存储器中断执行启动码的一方法;图4为用于从一次可编程存储器中执行另一启动码的一方法;图5为启动码及一启动修补码的一实施例;图6为用于将启动码烧录至一一次可编程存储器的熔丝的方法;图7为一系统单晶硅(SoC)的实施例。附图符号说明100计算机系统102中央处理器单元104芯片组106北桥(northbridge)108南桥(southbridge)110网适配器112板上图形适配器114主储存器116通用串行总线端口118引脚120SATA(串行高级技术附件)端口122ATA100端口124声音适配器126电源管理电路128时钟产生电路130SCSI主总线适配器132系统管理总线134以太网控制器136固件137非易失性随机存取储存器138超I/O装置202操作系统302OS启动加载器304EFI启动服务306EFI执行期服务308平台性固件312启动加载器314其他规格的界面316平台硬件318EFI系统分区322OS分区410处理器420记忆体422UEFI固件424指令集426组态数据427同组态数据428独特组态数据430组件440储存器430A显示器401、402、403、404、405、406、407、408、409步骤方法300310、320、330、340、350、360、370步骤具体实施方式本发明的各种实施例是提供用于执行启动加载器固件(bootupfirmware)的方法及系统,其启动加载器固件可支援对多个不同启动加载器中其中之一进行初始化设定。在以下的详细描述中,将会搭配附图进行说明,其所示的附图为具体的实施例或示例。然而,这些实施例仅是为了描述本发明及技术范围,而不应被解释为对本发明的一种限制。敬请参照附图,其中类似的标号在该些图示中表示类似的元件,以下将会说明本发明各方面的实施例及其较佳的操作环境。在附图中,标号的最左边的数字标识该附图首次出现的顺序。在说明及附图的不同情况下,使用相同的图标表示为相同的元件。本发明提供一种计算机系统及其方法,用于执行一UEFI固件,该UEFI固件可支援启动加载器程序(bootloaderprogram)的初始化设定。在较佳情况下,该计算机系统包含(但不限于此)笔记本电脑、个人计算机、伺服器、手持式计算设备,如移动式通讯装置及平板电脑,以及可穿戴的计算设备。图1及以下的讨论内容旨在提供可实现本发明的合适的计算环境的简要说明。然而,本领域的技术人员将可认识到,本发明还可以以其他合适的计算环境中实现。此外,本领域的技术人员将理解,本发明也可与其他计算机系统配置,包括多处理器系统(multiprocessorsystems)、基于微处理器的或可编程的消费电子产品、小型计算机、大型计算机等实施。本发明也可以在分布式计算环境(distributedcomputingenvironment)实施,其中任务是由多个远端处理装置执行,且该些远端处理装置是通过一通信网路彼此连接。请参照图1,图1为一示范式的计算机架构,可用于实现本发明的各种实施例。在此应当理解的是,虽然在此所描述的实施例是以一传统的桌上型计算机装置或伺服器计算装置讨论,然而本发明的实施例亦可与几乎任何类型的计算机装置使用或实现。图1为一计算机系统100的计算机架构的示范,该计算机系统100可被运作地从固件启动一操作系统。图1中的区块用于表 示计算机架构中的功能组件,而并非一定是代表单独地实体组件。所描述到的功能组件在保持计算机架构的整体方向及目的的情况下,可以被组合、分离或被除去。为了提供本文所描述的功能性,该计算机系统100包括一基板或“主板”,其是多个组件或装置可通过一系统总线或其他通信路径的方式连接的一印刷电路板。在一实施例中,中央处理器单元(CentralProcessingUnit,简称CPU)102与芯片组104相互地运作。中央处理器单元102可为标准的中央处理器,可进行计算机装置运行中所需要的算数及逻辑运算。该中央处理器单元102,在此以及在其他实施例中,可包括一或多个微处理器、微控制器、现场可编程门阵列(Fieldprogrammablegatearray,简称FPGA)、复杂可编程逻辑器件(Complexprogrammablelogicdevice,简称CPLD)、专用集成电路(applicationspecificintegratedcircuit,简称ASIC)及/或任何其它电子计算设备。该芯片组104包括北桥(northbridge)106及南桥(southbridge)108。北桥106提供中央处理器单元102与计算机系统100其余部分之间的一界面。北桥106还提供了一界面至一或多个随机存取储存器(RandomAccessMemory,简称RAM),用于当计算机系统100中的主储存器114,以及该北桥106更可能提供一界面至一板上图形适配器(on-boardgraphicsadapter)112。北桥106还可以通过一网适配器110启用网路通信功能。网适配器110能够将该计算机系统100经由一网路连接至一或多个其他的他计算机。网适配器110可进行连接的网路可以包括局域网(LocalAreaNetwork,简称LAN)或广域网(WideAreaNetwork,简称WAN),例如常见于办公室的LAN及WAN联网环境、企业范围计算机网络(enterprise-widecomputernetworks)、内联网(intranets)及网路上。该北桥106系连接到该南桥108。南桥108是负责控制计算机系统100的许多输入/输出功能。特别是,南桥108可提供一或多个通用串行总线(UniversalSerialBus,简称USB)端口116、一声音适配器124、一以太网控制器134及一或多个通用输入/输 出(generalpurposeinput/output,简称GPIO)引脚118。南桥108还可以提供一个总线,用于连接周边卡设备,如符合BIOS启动规范(BIOSbootspecification,简称BBS)标准的SCSI主总线适配器130。在一实施例中,总线包括周边组件互连(Peripheralcomponentinterconnect,简称PCI)总线。南桥108还可以提供一系统管理总线132,用于管理计算机系统100中的各种组件。在南桥108运作时,也可以利用电源管理电路126及时钟产生电路128也可以在南桥108。南桥108还可用于提供一或多个界面来将大容量储存设备连接到计算机系统100。例如,根据一实施例中,南桥108包括串行高级技术附件(SerialAdvancedTechnologyAttachment,简称SATA)适配器,用于提供一或多个串行高级技术附件端口120及一个高级技术附件100适配器,该高级技术附件100适配器是用于提供一或多个ATA100适配器端口122。该串行ATA100适配器端口120及ATA100适配器端口122可被连接至一或多个大容量储存设备,其中大容量储存设备可储存操作系统、应用程序及其他数据。本领域技术人员应已熟知的是,一操作系统包括控制一计算机的运作及分配资源的一组程序。一应用程序是一个在操作系统上运行的软件(或运行于其他时期环境(runtimeenvironment)中)并且会使用计算机资源来执行计算机系统100的使用者所期望被执行的应用程序的特定任务。连接到该南桥108及该SCSI主总线适配器130(以及其相关的计算机可读介质)的大容量储存设备可供计算机系统100非易失性储存(non-volatilestorage)的功能。虽然在本文中计算机可读介质指的是大容量储存装置,如硬碟/硬盘或光碟驱动器(CD-ROMdrive),本领域技术人员应可理解的是,计算机可读介质可为该计算机系统100可读取的任何介质。以举例而言(而不受此举例限制),计算机可读介质可以包括计算机储存介质和通信介质。计算机储存介质包括易失性和非易失性(volatileandnon-volatile)、可移动和不可移动介质,以任何方式或资料储存技术(例如,计算机可读指令、资料结构、程序模块或其他资料)实现。计算机储存介质包括(但不限于)RAM、 ROM、EPROM、EEPROM、闪存或其他固态储存器技术、CD-ROM、DVD、HD-DVD、BLU-RAY或其他光学储存、磁带盒、磁带、磁盘储存或其它磁储存设备,或该计算机任何可被利用的介质来储存所需信息/资料。南桥108可提供一低引脚计数(Lowpincount,简称LPC)界面/接口,用于连接超I/O装置138。该超I/O装置138是负责提供多个输入/输出端口,包括一键盘端口、一滑鼠端口、一串行界面/接口、一并行端口以及其他类型的输入/输出端口。该LPC界面或另一个接口可被用于连接至一储存介质,例如ROM或非易失性随机存取储存器(NVRAM)137,例如快闪储存器。该计算机储存介质可被用于储存该固件136,其中该固件136包括用于协助启动该计算机系统100以及用于在该计算机系统100内元件之间传送数据的指令及数据。固件136可包括符合UEFI标准的程序代码(programcode)。应当理解的是,除了该固件136包括符合UEFI标准的固件,其它固件的类型及组合亦可被包括在固件136中。举例而言,固件136可以包括附加地或替代地一个BIOS固件及/或其他现技术中以熟知的类型的固件。以下与附图搭配提供UEFI固件136的运作的相关说明。应当理解的是,计算机系统100可以不包括图1中所有显示地组件,且亦可能包括在图中未明显示的其他组件,或者可以利用与图1完全不同的结构。敬请参照图2,更多关于符合UEFI标准的一系统(可被利用来提供一操作环境给以下各个实施例)将会在下进行说明。如图2所示,该系统包括一平台硬件(platformhardware)316及操作系统(Operatingsystem,简称OS)202。一平台性固件(platformfirmware)308可通过使用OS启动器(OSloader,或有时被称为启动加载器或OS启动加载器)302从EFI系统分区(EFIsystempartition)318取得OS程序(指令)代码。相同的,该OS启动加载器302可从其他位子取得OS程序代码,例如包括从连接的周边设备或者从固件136本身中取得。该EFI系统分区318亦可为一种结构性可共享系统分区(architecturallyshareablesystempartition)。因此,该EFI系统分区318是定 义一分区及资料系统,其是设计以允许多个供应商之间能安全地共享大容量的储存。此外,一OS分区322亦可被使用。一旦被启动,OS启动加载器302会继续启动完整的操作系统202,可能是以阶段式的方式启动加载,例如通常与Linux系统中常会用到的GRUB启动加载器。该OS启动加载器302可以使用EFI启动服务304并且与其他支援的规格连接/当界面,以进行调查、了解、以及初始化各种平台组件和管理该些组件的操作系统202。因此,其他规格的界面314亦可存在于系统中。举例而言,高级配置和电源管理接口(AdvancedConfigurationandPowerManagementInterface,简称ACPI)及系统管理BIOS(SystemManagementBIOS,简称SMBIOS)的规格可被支援。EFI启动服务304提供界面给各种设备,以及提供可用于启动期间使用的系统功能。EFI执行期服务306可在启动阶段被提供给该OS启动加载器302,以及在操作系统202执行时提供给该操作系统202使用。例如,执行时服务可被提供,以确保在操作系统202的正常运作中,操作系统202可能会需要的硬件资源可适当的被抽象化(abstractionofbaseplatformhardwareresources)。EFI可扩展平台的固件,通过加载EFI驱动程序及EFI应用程序镜像(applicationimages),可利用到EFI定义的执行时服务及启动服务。一旦EFI固件被启动,该EFI固件将会把控制权转交给该启动加载器312。敬请参照图3,图3描述UEFI固件启动一操作系统的不同阶段。如图3所示,当计算机系统100通电时,本发明的UEFI固件会被计算机系统100的处理器执行。该UEFI固件将首先进入一个安全阶段(SecurityPhase,亦即SEC),其中在此阶段中还没有任何储存器/记忆体在该计算机系统100中被启用或初始化。在本阶段中,由于储存器还尚未被初始化,处理器的高速缓冲储存器(cache)以随机储存器(RAM)方式使用来初始确认该中央处理单元(CPU)、该芯片组及该主机板。接着,UEFI固件会进入预Pre-EFI初始化(Pre-EFIInitialization,简称PEI)阶段,其中该计算机系统100的中央处理单元、该芯片组、该主机板及该储存器会被初始化。在驱动执行(Driver Execution,简称DXE)阶段,启动服务、执行时服务及驱动程序执行调度服务(driverexecutiondispatcherservices)可被执行以初始化计算机系统100的任何其他硬件。继DXE阶段后,UEFI固件会进入驱动设备选择(BootDeviceSelection,简称BDS)阶段。在BDS阶段,会尝试对操作系统对应的启动加载程序的控制台设备以及各种驱动器进行初始化。在暂态系统负载(TransientSystemLoad,简称TSL)阶段中,控制权将会被转给操作系统以继续计算机系统100的启动,并且再到达运行时期(Runtime,简称RT)阶段。图4显示本发明的一实施例。如图4所示,计算机系统100可包括处理器410、记忆体420、组件430、储存器440以及显示器430A,其中该处理器410是分别耦合至该记忆体420、该组件430、该储存器440及该显示器430A。本领域的技术人员应该能够理解的是,图4中所描述的计算机系统100可与图1的计算机系统结合或分开的看待。在本实施例中,记忆体420可为快闪储存器或CMOS,用以储存UEFI固件422,其中该UEFI固件422具有指令集424和组态数据426。储存器440可为硬碟(harddiskdrive)、外接式储存器、快闪储存器、网络硬盘或任何其他的储存器。其中,包括计算机系统100的操作系统用的启动加载器的该EFI分区(EFIpartition)是储存于该储存器440中。该组件430及该显示器430A可被视为是在启动期间内被执行的UEFI固件初始化的硬件设备。图5为执行于计算机系统100中的UEFI固件的流程示意图。参照图4及5,当计算机系统100于步骤401中通电时,该计算机系统100将会开始执行该UEFI固件422。在一实施例中,UEFI固件422可侦测及确认该处理器410的指令集(instructionset)来判断该计算机系统100的处理器架构的种类。举例而言,在图5的示范所示,若该处理器被确定为一个非x86处理器架构,例如ARM处理器架构,该UEFI固件422将会执行步骤403以继续进行启动的程序。出于解释的目的,本发明以下内容将会以x86的芯片组架构进行说明。然而,本领域技术人员应能轻易了解到本发明可应用于其他不 同芯片组架构中,以下的解释说明并不意味着本发明应限制于x86架构范围下。如图4及5所示,若处理器410被确认是为x86架构,该UEFI固件422将会前进到步骤404并进入PEI阶段。当处理器的预验证(pre-verification)及初始化进行完成后,通过执行该UEFI固件422,该处理器将会在步骤405中判断处理器的处理器模式或指令集的类型。在本实施例中,若该处理器模式被确定是32位元,该UEFI固件422将会进行DXE阶段的步骤406。然而,若该处理器模式确定为64位,该UEFI固件422将会进行到DXE阶段的步骤408。如上述所提过,在UEFI标准下于启动期间(bootperiod)中,该UEFI固件422只能引用相同大小的指令集的启动加载器程序。以图5中的实施例为举例,若计算机系统100是以64位模式初始化预操作系统环境,该UEFI固件只能引用/启动相对于一64位操作系统的启动加载器程序。同样的,若该UEFI固件422以32位模式将预操作环境(pre-OSenvironment)进行初始化,该UEFI固件只能引用或呼叫相对于一32位操作系统的启动加载器程序。由于这一事实,即32位和64位指令集是完全不同的,UEFI固件的制造商通常会需要编译对应于32位模式及64位模式的两个单独的固件映像,以确保计算机系统100可以分别被启动至32位操作系统或64位操作系统。然而,在此情况下会增加储存固件映像所占取的总储存空间。此外,在提供固件更新或针对UEFI固件中各别映像进行修补程序或维护时会变得十分复杂及困难,因为制造商将会需要为每个不同的映像进行重安装程序(reflash),或者为了能同步所有不同固件映像的更新而去跟踪每个映像的组态表(configurationtable)的每个变量数,此现象会增加系统的复杂度。请参见图6A,图6A为UEFI固件的一新的数据结构的实施例。如图6A所示,本文提议将不同的固件映像包装在单一个映像包装中。为了实现这一点,在本实施例中,32位固件映像和64位固件映像各自的组态表中的变量数据将会进行比较,并归类为共同数据或独特数据。任何变量数据同时共同存在于32位及64位的固件映像中将会被归类为共同数据;相对的,任何变 量数据不共同存在于32位及64位的固件中(亦即,只存在于32位的或64位的固件映像)将会被归类为独特数据。当编译成单一的固件映像时,所有共同数据将会被分组至一共同组态数据427的列表中,而所有的独特数据将会被分组至一独特组态数据428的列表中。举例而言,如图6所示的组态数据126的一实施例,共同组态数据127可包括各种变量数据,其可表示预设启动的操作系统或表示所有不同启动加载器共同可用的启动图像/标志(bootuplogo)。通过将共同数据分组再一起,可从该些不同固件映像中删除重复的变量数据。以此方式,固件映像包装的总尺寸可以被减少。此数据结构的另一个优点在于,制造商可以更好地跟踪不同固件映像的变量数据,同时又可更简单的进行UEFI固件的更新。此外,在操作系统环境中的期间,变量数据的任何变化将会在计算机系统100被重启动时即时的被反映出来。举例而言,若在操作系统的64位模式下更改预设启动模式为32位模式,当计算机系统100下次被重启动时,计算机系统100会先侦测到该预设启动模式为32位模式,并且会对应的初始化各个硬件组件以及以32位处理器模式进行启动程序。通过此方式,相对的32位操作系统将会被启动起来。在其他不同实施例中,当计算机系统100通电并且在PEI阶段后但在DXE阶段前,该UEFI固件可指示该处理器来先初始化一硬件控制台,例如键盘、触碰显示器或任何其它能够允许使用者输入简单的指令的控制台。在此情况下,使用者可键入或输入代表一模式选择的命令/指令;其中,该模式选择是指一特定的处理模式及/或使用者所欲计算机系统100启动的操作系统。举例而言,按压功能键“1”可代表指示给UEFI固件以下资信:使用者想在计算机系统100启动至32位模式的操作系统。或按压功能键“2”可代表使用者希望该UEFI固件启动至64位模式的操作系统。如图5及图6A所示,由于不同的处理器模式需要相应不同的指令集以使得处理器能够理解和正确执行指令,UEFI固件422亦可以有指令424的例表,其中该指令424的列表具有指令I1和I2。再回到双种操作系统(32位及64位)的例子中,指令I1可以对应于32位指令集而指令I2可以对应于 64位的指令集。当执行UEFI固件422到达步骤405时,在本实施例中,组态数据126中的变量数据可先被检查以确定哪个处理器模式应当被执行。例如,若一GUID预设启动模式是设定为32位模式时,UEFI固件422的执行将会进入步骤406的DXE阶段。如前述提起过,在DXE阶段下,对应于处理器模式的指令集及执行时服务可被执行。在此举例中,32位的指令及I2将会被执行。处理器将会取得对应于启动选择模式(从共同组态数据427的检查预设启动模式的变量数据来判断)的共同组态数据427及独特组态数据428。处理器接着会对应于该启动模式选择产生一启动加载器地址,以致使在储存器440(EFI分区)中于相对该启动加载器地址所指的位址的启动加载器程序可根据取得的共同组态数据及独特组态数据被执行。换句话说,只有对应于该启动选择模式的指令424及组态数据126会被取得来进行EFI分区内该对应的启动加载器程序的启动。通过此方式,在进入OS环境前(pre-OSenvironment),硬件组件的初始化可相对于该特定的操作系统及特定的启动加载器程序(以及对应于该启动选择模式)被定制化。在本实施例中,在步骤406或步骤408的DXE阶段中,执行时服务可被启动。本领域技术人员应当理解的是,在比较32位处理器模式及64位处理器模式时,由于启动执行时服务需要呼叫具有不同参数(parameters)的方法(function),亦即会使用不同的functioncall,步骤405至406以及步骤405至408分别会产生不同执行时服务,其分别是被各别的操作系统使用。举例而言,与启动该启动加载器程序的执行类似,执行时服务的执行可依据对应于该启动选择模式的一或多个该指令集424、该共同组态数据427及该独特组态数据428的组合。请参考图7,图7示出UEFI固件的计算机处理器执行方法的流程图,其中该UEFI固件支援多个启动加载器程序的初始化程序。如图7所示,该方法300包括步骤310至370。此些步骤将在下面详细描述:步骤310包括以该处理器执行该UEFI固件。如图1及4所示,该UEFI固件(136,422)可被储存于一储存器420中,其中该储存器可包括非易失 性随机存取储存器(Non-VolatileRandomAccessMemory,简称NVRAM)或快闪储存器(flashmemory)。如图4所示,处理器410是耦接于该储存器420,并且会执行该UEFI固件422。方法300的步骤320包括:当执行该UEFI固件422时,检测该处理器的指令集的类型。如图4及5所示,当该计算机系统100通电时,执行的UEFI固件422会确认该处理器的指令集的类型。在本实施例中,为简单起见,图5已被简化以描绘该指令集是x86处理器/芯片组架构或非x86处理器/芯片组架构的指令集。本领域技术人员应当理解,任何其他类型的芯片组架构亦可以被使用。例如ARM芯片组架构也可以被使用。通过UEFI固件422确认该处理器的指令集的类型,本发明所揭露的单一封装/包装的该UEFI固件422可供UEFI固件制造商及供应商一种简单的单一编译启动加载器源代码映像(singularcompiledbootupsourcecode),其可自动检测芯片组架构的类型并相应地初始化硬件组件。通过此方式,UEFI固件制造商只需要提供一编译映像给多个具有不同芯片组架构的不同的计算机系统。步骤330包括根据模式选择判断一启动选择模式,其中该启动选择模式是对应该侦测到的指令集的类型,以及该模式选择是对应于该UEFI固件执行完后需要执行的启动加载器程序的类型。在本实施例中,指令集的类型是指计算机系统100中该处理器的芯片组架构。举例而言,若检测到的指令集类型属于x86_64的芯片组架构,该启动选择模式可以是一个处理器模式在16位、32位或64位,其对应于16位、32位或64位指令集的向后支援(backwardssupport)的x86_64芯片组。该模式选择较佳地是根据从组态数据426列表中于共同组态数据426里侦测到的一预设启动变数(defaultbootupvariable)产生。在一实施例中,组态数据426的共同组态数据427中的该预设启动变数可被视为一启动标记,其是代表计算机系统100应该要启动加载的启动加载器程序。在本实施例中,此启动标记可被设为GUID的变量/变数以使得任何在运行中的操作系统可改变预设的启动模式。通过此方式,在下次计算机系统100重新开机或通电时,UEFI固件422的执行将会启动加 载对应于该启动标记被设定的操作系统。举例而言,若使用者是使用64位的操作系统,并且希望能在计算机系统100重新启动时使用32位的操作系统,使用者可通过64位操作系统更改预设启动变量或启动标记来使得在下一次计算机系统100通电启动时32位的操作系统会被自动启动了。然而,在其它不同的实施例中,模式选择可根据使用者的输入来确定。例如,在PEI阶段后一控制台(例如,键盘或触碰显示器)可被初始化,以使得使用者可输入或键入一命令以指示UEFI固件以某个处理器模式或某个操作系统启动。在另一个实施例中,此使用者的指令输入可由处理器侦测并处理,并且处理器可相对的设定该启动标记。通过此方式,由于UEFI固件尚未在pre-OS环境下以任何特定的处理器模式进行初始化,该UEFI固件有时间及机会先检查该启动标记并相应的启动欲启动的操作系统。方法300的步骤340包括以该处理器从储存器终于该UEFI固件的多个组态数据其中之一取得该共同组态数据。在本实施例中,组态数据426的该共同组态数据427包括为所有操作系统进行pre-OS环境的初始化的共同变量。例如,若有一特定的标志图像需要在POST期间显示(无论是哪个操作系统将被启动),该标志图像的组态变量会被认为是共同于所有启动加载器程序。因此,此共同组态变量将会被储存于该共同组态数据427中,而通过此方式可将此组态变量的复本移除掉,以致使UEFI固件的总大小可被降低(例如,客户可有更多储存空间在原始的UEFI固件上增加新功能等用途)。换句话说,通过将多个UEFI固件映像包装为单一个映像包装并且删除掉副本的共同变量,可减少储存空间的使用空间以利于其他用途。步骤350包括以该处理器从该储存器中于对应该启动选择模式的UEFI固件的该多个组态数据里取得一独特组态数据,其中该独特组态数据包括处理器指令集(processorinstructionsets)及执行时服务(runtimeservices)。在本实施例中,对应于启动选择模式的独特组态数据427是从组态数据426取得。换言之,不属共同于所有操作系统且为独特于某个启动选择模式的组态变量才会被取得。在另一个实施例中,独特组态数据427可包括处理器的指令集, 并且亦可具有指示供执行时期服务给操作系统。步骤360包括根据启动选择模式产生一启动加载器地址。在本实施例中,UEFI固件422的处理器执行将会产生对应于该启动选择模式的启动加载器地址。启动加载器地址较佳为位于储存器中(例如,储存器440)具有一启动加载器程序可启动加载欲执行的操作系统的一地址。举例而言,若启动选择指的是32位的处理器模式,该处理器较佳将产生指向可以启动相对的32位操作系统的该启动加载器程序的地址。步骤370包括依据该共同组态数据及该独特组态数据,执行位于对应该启动加载器地址的储存器中的该启动加载器程序。在本实施例中,为了能定制硬件设备的初始化于指定的处理器模式(指令集)以致使能符合相对地操作系统,取得的该共同组态数据427将与对应于该特定的启动加载器程序的独特组态数据428结合在一起。通过此方式,可使得必要的pre-OS环境被完全初始化。换句话说,通过将共同组态数据427与对应于目标的操作系统的独特组态数据428结合,UEFI固件中对应该目标操作系统的处理模式的指令集可被执行以初始化任何必要的硬件组件。此外,随着独特组态数据428及对应于目标操作系统的指令集I1或I2,UEFI固件422亦可以执行执行时服务,以使得在目标操作系统已启动运行后可经由该执行时服务使用一些硬件的服务。本发明已由上述相关实施例加以描述,然而上述实施例仅为实施本发明的范围。必须指出的是,已公开的实施例并未限制本发明的范围。相反地,包含于权利要求范围的精神及范围的修改及均等设置包含于本发明的范围内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1