uefi hii 配置 (UEFI与配件初始化)

文章编号:8954 更新时间:2024-02-20 分类:互联网资讯 阅读次数:

资讯内容

在BIOS畛域采用UEFI规范后的渺小影响是引人瞩目的。如今,UEFI已是固件,操作系统,附加设施和其余行业规范的必备组件。基于Intel架构的PC生态系统中的大少数产品都是基于原先的EFI规范或其继任者:UEFI规范,或是PI规范。这些规范已成为X86架构的PC生态系统中配件初始化的基石。

本文将讨论如何运行UEFI平台初始化(PI)规范作为使能芯片和配件平台的框架。咱们将学习和了解规范提供的构建块元素,还会对平台启动环节,共同形式和经常出现用途做一些引见。此外,咱们还将检视各类解决器,内存和图形控制器以及支持芯片的驱动程序。

引见与回忆 uefihii配置UEFI与配件初始化

在过去的十年中,PC悄悄教训了一场由芯片使能化推进的反派。行业从繁多的PC演变成为采用多种架构的不同产品线,引入了可裁减的和面向组件的工业规范固件架构,同时BIOS环境采用了这些架构和规范。这场反派的开局有很多要素,但最关键的是由于要求以具有老本效益的方式初始化和经常使用日益复杂的芯片和产品。

不同的需求催生了行业规范的制订。但即使在有明白需求的状况下,行业规范也不只仅是写入文件就算制订成功的。UEFI论坛所制订的PI架构之所以成为宽泛接受和认可的可裁减工业规范架构并作为一种规范,基于以下五个要素:

它被写入UEFI平台初始化规范中。提供了二进制可互操作组件架构,其关键作用是在加载OS之行启动芯片初始化。它理论被以为是一个BIOS架构规范。

•它在两个开源软件开发环境(EFI开发套件(EDK)和EDKII)中获取成功;这些工具都可在Buildsoftwarebetter,together上找到。这些工具包提供了可用性强,易重复经常使用的成功方式,模块开发商可以作为参考,来构建各种合乎UEFI和PI规范的产品。

•它在BIOS产品中被实例化为理想上的规范成功,经过被称为IntelGreenH的概念(蕴含工业规范接口的头文件等)。只要求最小水平的移植,就可以在多个多个BIOS代码库中的经常使用。

•它可以经常使用UEFI颁布的自认证测试(Self-CertificationTest,简称SCT)启动测试。SCT会审核各种UEFI规范中定义的接口的成性能否合乎规范。

•他被行业上游的配件,软件,系统消费商运行,因此市场需求量很高。

•提供了少量的平台和芯片参考代码成功,譬如CPU,SIO,放开配件平台(Minnow系列和Galilo)。

作为一个BIOS软件规范,肯定要合乎这样一个不凡要求:肯定能支持多种不同优惠。咱们在此重点讨论其中两个:配件初始化和系统调试。它触及到源代码和二进制模块的兼容性和互操作性。经过合乎该要求以便有效地成功面向组件的架构,该架构由整个行业中支持Intel架构的PC生态系统的泛滥公司经常使用。以咱们之前讲过的PI为例,二进制的兼容性由规范文档和测试(SCT)保障,源代码兼容性经过EDK和IntelGreenH成功。靠着全行业内BIOS,配件,和软件供应商的支持,PI获取了片面普及。

为了更好地探求如今的芯片Enabling支持环境,有必要重温PI定义自身,和基于它的可裁减的芯片初始化模型,以及或许的时机。

PI的架构

什么是BIOS?名字是basicinput/outputsystem的缩写。BIOS的终极指标是初始化配件平台并疏导操作系统。

最早的PC/XT系统的BIOS只要8KB,也能启动DOS。那是在1982年,IBM发明了它。从那以后在教训了一段安静期后,BIOS获取了飞速退化,尤其在UEFI降生后。

咱们把最后的BIOS称为传统BIOS,称UEFI类疏导代码为UEFI,不论是哪一样,一些关键的职责都是不变的:首先,二者都有平台初始化的关键使命。这一环节其实是在平台重启(s3,s5及其余)之后立刻口头的一段代码。传统BIOS中,这是供应商特定的流程和结构,但很多时刻只是些不要求堆栈的汇编代码和启动块,不同的BIOS厂商(IBV)间接的代码差距很大,不具有互操作性,规范性很低。而在UEFI中,针对这一环节,提出了专门的平台初始化规范(UEFIPISpec)。在基于PI的平台初始化中,SEC和PEI阶段肩负前期初始化的责任。基于UEFIPI的疏导的时序相关如下图所示:

之后,每个配件平台都要求发现I/O总线,从主机总线适配器调度opROM(optionROM)等等。在传统BIOS中,此I/O枚举出当初上电自检(PowerOnSelfTest,简称POST)阶段。在惯例BIOS上没有POST的真正规范。但是,关于基于UEFIPI的固件,此阶段的口头出当初驱动程序口头环境(DXE)中。DXE还可以作为UEFI外围,用于支持基于UEFI的操作系统。

在BIOSPOST和DXE之后,就到了规范形容的平台接口局部。关于PC/ATBIOS,该规范包括在x86架构上以16位实形式口头的理想上的终止可调用接口(例如,磁盘的Int13h,视频的Int10h)。关于UEFI,则是UEFI疏导服务和协定protocol(例如,EFI_BLOCK_IO_PROTOCOL与BIOSint13h相似),由UEFI规范对此启动详细说明。在该阶段口头时期,第三方驱动可以从磁盘或外置适配器中读取而未必由平台制作商(PM)系统板提供。

上文所述的二者区别至关关键,由于从一个形象的,由PM提供的口头规定转变成为详细的,第三方代码可以运转的空间,这一成功的品质对构建可信平台有很大的影响。

下图展现了通用BIOS初始化流程。此流程包括在POST时期平台CPU,内存和I/O设施的初始化。POST流程相似于前图中的DXE流程。

UEFI固件

在配件层之上,OS之下的安保架构就是固件,如下图:

由于目前和未来或许有平台固件的若干种代码的成功,因此本文将对平台初始化(PI)规范及其一些代表性的代码库启动讨论。

作为背景,UEFI论坛的PI上班组——PIWG提供基于英特尔PEI和DXE规范的PI架构规范。PI体系结构规范于UEFI2.0规范中独立进去。PI架构平台依然可以启动现今的操作系统。AMD,AMI,Apple,Dell,HP,IBM,Insyde,Intel,Lenovo,Microsoft,andPhoenix共同领有这一规范。PIWG的义务是准许以后创立了参考代码的芯片供应商将此参考代码打包为嵌入PI架构固件成功的模块。下图说明了PI范围。

UEFI和PI规范仅作为论述关于接口定义和机制的规范资料,但是没有诸如为什么这么做和如何做的详细内容。后者(PI)仅作为设计指南。

与传统BIOS的繁多目的性同样,UEFIPI经过阐释驱动程序模型(例如基于依赖性表白式的PEI模块(PEIM)和DXE驱动程序)所带来的软件可裁减性来成功配件矫捷性。可裁减性点也或许被作为恶意软件的攻打点。这类恶意软件基本上不能被OS所领有的防护技术(例如杀毒软件)检测到,由于恶意软件可以在OS之前就被完整口头。因此,基于UEFI的pre-OS疏导环境以及其余的pre-OS可裁减性的安保完整性基础肯定确保稳如泰山,同时还要提供足够的灵敏性来支持配件矫捷性。

PI阶段旨在仅由平台制作商(PM)而不是第三方(与UEFI及其选项ROM/加载程序/驱动程序模型同样)可裁减。在这个PI环节中,代码的装置和其行为是在平台制作商的授权下启动的;下文中简称为PM_AUTH。让PM才干裁减PI,保障了系统的安保性。

下图形容了UEFIPI疏导流程,包括仅PM可裁减的PI代码和第三方可裁减UEFI。

芯片初始化

UEFIPI提供了一个软件环境,准许芯片供应商提供简直一切必需的外围芯片初始化。为了本讨论的目的,咱们不辨别UEFI和PI这两组规范,由于二者的运行范围中有太多相似的用于组件开发及其互操作性的基础架构。

关于配件自我初始化,软件初始化配件相对而言老本更低和灵敏性更好,所以依然是必要的。在过去20年中,咱们看四解决器从10万晶体管增长到1000万个以上。这种增长,带来了一系列愈发复杂的特色和才干。而软件依然是初始化和支持这种越来越复杂的配件的最有效的方法。

出于本文的主题思考,咱们关注的是构建X86架构系统的关键组件(外围芯片):解决器,内存控制器,图形控制器,存储控制器,系统总线控制器,IO控制器等。PC中当然还有许多额外的设施,但他们也可以从本文中类推而得,不在详述。此外,这些设施往往在疏导环节中的稍后时期被初始化,更多地依赖于其余工业规范,如USB,PCIE和ACPI。在某些状况下,BIOS在其初始化他们中起到的作用并不清楚。

1。芯片初始化出当初哪?

外围芯片初始化依赖于分阶段的方法。在初始系统复位时,仅有局部十分有限的配件资源可用;不能访问设施,不能访问存储器等等限度。这才造成了随着配件的初始化以及可用资源的参与,BIOS为软件的反常运转始终地扭转操作环境。在PI中:

•在SEC阶段,系统从复位开局运转(由主机疏导解决器取回的第一指令),经过初始化解决器高速缓存(Cache)来作为暂时内存经常使用,咱们有了堆栈,从而可以口头c程序,而后转到PEI阶段。

•在PEI最开局阶段,仅大批栈和堆可用,咱们要求找到并使能足够咱们经常使用的终身内存,理论是内存颗粒或内存条(DIMM),而后转入DXE。

•DXE阶段有了终身存储空间,真正开局担任初始化外围芯片,而后转换到BDS阶段。

•外围芯片初始化成功后BDS阶段开局,并继续初始化疏导操作系统(输入,输入和存储设施)所需的配件。纵观PI的整个阶段,BDS对应的是口头UEFI驱动程序模型来疏导OS这一环节。

流程中有几个不凡的子阶段:

•PEIpre-mem

•PEIpost-mem

如上表所示,芯片初始化普及整个疏导环节。之所以这样设计,而不将初始化内容放在一同成功,关键是基于老本和复杂性的思考:随着疏导的启动,有更多的基础架构可用,初始化一组芯片性能模块的老本和复杂性降低。这不是说SMM初始化环节不复杂,而是说,在终身内存和DXE服务可用后,其后阶段的复杂性虽依然维持在复杂一级,但确实不如之前环节复杂。这里所说的老本,说的是要在存储器可用前,从未紧缩的FLASH存储器间接口头程序(XIP)。最终结果就是,在表中罗列的大少数外围芯片初始化优惠可以由PI模块正当且便宜地成功,成功度理论能占到所有义务的90%以上。

2。芯片初始化如何成功?

咱们以Intel的方案为例,芯片初始化代码以芯片对应的程序包(Package)的方式提供。这些封装包可以支持单个产品,多个产品,与单个产品相关联的相似产品,甚至或许支持超过多种产品。样例包括平台电源治理(platformpowermamagement,简称PPM)参考包(其理论支持多代芯片),南桥芯片(platformcontrollerhub,简称PCH)参考包(理论只支持对应一代的芯片)和集成时钟控制器(integratedclockcontroller,简称ICC)参考包,ICC仅在PCH用于特定性能时才适用。对象模型的复杂性源于整个平台的复杂性以及参考包经常使用的灵敏性。PPM参考包理论在产品开发周期的前期启用,因此,将其与总是必需的解决器代码离开封装,为客户提供了产品开发的灵敏性。

每个蕴含有各种阶段的驱动程序,例如memory之前的PEIM(pre-memory,PEIM),UEFI疏导服务以及运转时服务(DXE),系统治理形式(systemmanagementmode,简称SMM)驱动以及其余。这些DLL文件理论以源方式,在惯例芯片参考包中递送,普通蕴含:

1.源代码

2.自定义接口及其文档

3.用于在开源EDK/EDKII中经常使用的结构文件。

4.示例代码

5.静态库(staticlibraries)

6.设计和移植文档

为了缩小支持的性能数量,针对特定版本的工业规范接口和适用库,开发对应的芯片参考包并经过检验,即Intel的GreenH方案。该方案的意义在于,经过封装特定的一组文件,使得提供具有易集成和可重用性的源代码而不无需修正变得可行。而经过业内讨论,分歧赞同在头文件中蕴含服务协定调用表(servicestables)及公共协定(Commonprotocol)定义,如此一来就防止了少量的源代码可移植性疑问

虽然PI提供了丰盛的基础服务类型,甚至有时刻,他的才干显得有些多余,但是,用工业规范接口来笼罩一切或许的芯片个性或许仍力有不逮。因此,参考包还提供了自定义接口。这些接口理论采取变量、HOB、PPI、Protocl,以及依赖相关(dependency)、回和谐其余UEFI和PI类型的服务。应用这个工具箱,芯片厂家可以尴尬搞的芯片初始化提供丰盛的服务。在以后的芯片参考封装包中,理论还有提供一组设置接口Policy,准许经常使用者依据主板或许设计的不同来定制某些参数。一切这些既保障了芯片包的独立性,又提供了很高的灵敏性,繁难OEM经常使用。

总的来说,经常使用提供代码的芯片参考包并采用IntelGreenH,OEM等经常使用者可以运行宽泛可用的EDK/EDKII构建模块,他们只需关注如何将这些模块集成到他们的BIOS构建环境并在其BIOS中施展芯片参考封装包的各种个性。如此一来,芯片供应商便可以提供在碎片化的环境中也能重复经常使用的芯片初始化实现代码,而OEM等也可以专一于自己的外围业务。

BIOS角色的转变

1。成功一次性即可

PI准许芯片供应商开发芯片初始化代码,并使其用在各种场所下可用。以前,诸多公司各自基于所用芯片(saidsilicon,简称SI)的有限文档来启动外围芯片初始化上班。这样做的清楚缺陷就是SI消费者在芯片上成功的初始化或许与芯片制作商的原本用意天壤之别。此外,SI消费商虽担任初始化代码的成功和验证,但对SI消费者而言它却要自己开发,其中出现了重大的脱节。显然由PI带来的芯片初始化代码包可以一次性开发,各处经常使用,保障了消息的连接和准确。

2。部署

为防止搅扰敏感的模拟信号量,也出于总体规划的思考,越来越多的SI消费者将系统板设计和SI消费商严密咨询起来,更多地思考在SI初始代码上做文章。正如上文提到的,SI消费商消费SI初始化代码以在外部验证SI。假设SI消费方和经常使用方都为其系统板固件支持了UEFIPI规范,SI消费方可颁布其SI初始化模块,同时颁布SI物理器件。这样,就可以在采用的部署模型中成功配件和固件的无延时。

3。集成

支持UEFI和UEFIPI规范的系统的出现亦扭转了PC固件生态系统中各个玩家的相关和责任。

在以前(UEFI和PI出现之前),芯片供应商提供参考源代码来形容用于初始化其特定芯片或芯片组的关键初始化和性能步骤。BIOS供应商经常使用该代码,对其启动修正后用到他们的代码库中,并将每个参考代码段链接到它们的程序中。为一切客户提供BUG修复服务费时费劲费资本,由于每个客户都教训了鬼才知道的步骤构成了自己共同的指标代码库,旁人保养何其困难(这正是没有规范的时刻的行业困境)。BIOS的品质保障依赖于性能测试或自主开发的API测试,由于(过后)很少有明白定义的API。裁减BIOS的惟一规范方法是可选ROM,20多年来基本没有什么变动(从BIOS的降生到UEFI降生之间的时期,相较于PC性能的突飞猛进,这个物品原封不动显得如许不合群)。

随时期的推移,许多芯片供应商开局为他们的产品研发外围源代码包,并为每个他们支持的BIOS代码库研发插件层。这种方案在过后确实缓解了芯片供应商面临的一些疑问。由于如今,他们只要求研讨一个疑问,做出一点扭转:就是使外围可以上班在一切的指标代码库。但也对BIOS供应商提出一个新的难题。由于每个芯片供应商都在各自研发这样一个插件层,每家公司都有自己的BIOS代码库,有不同的芯片供应渠道。代码的通用性其实还是没有获取基本改善。

随着UEFI和起初PI的推广,行业全体行进了一大步。如今每一个芯片供应商可以封装支持他们的芯片驱动程序。规范定义了它们是如何启动的,如何颁布接口,以及如何发现接口的。由于规范化,不同的BIOS厂商代码库不再有千差万别的插件层。使其再也不用被每个客户(BIOS供应商或OEM)奴役(一家一本天书,说奴役还真不是夸张)。

这种新形式发生了一系列影响:

1.一旦写成,随处可用。假设BIOS环境合乎规范,合乎规范的驱动可以拔出就任何BIOS和他应该施展作用的中央。

2.芯片供应商消费驱动,随着UEFI运行时期愈久,与芯片支持相关的一切源代码的任何疑问都会由芯片供应商担任。

3.可测试性的提高。UEFI为启动系统所需的一切服务都提供了明白定义的API,这些API成功的鲁棒性(rubustness,起源于rubust,强健,强健的意思,计算机的鲁棒性普通指可观察性,可复原性,照应性,义务规范性)关于确保互操作性至关关键。为了能充散施展这些API的好处,UTWG(UEFI测试上班组)为每一版的规范制订了SCT。

4.孤立到模块化BIOS。BIOS已越来越多地作为一个平台,使泛滥驱动和运行得以良喜气转,而不再是一堆代码体的错乱堆放。

5.驱动提供内置的可定制化。在以前的模型中,为特定平台或产品的定制化是由OEM或BIOS供应商在开发周期的前期启动解决,而且经常触及间接修正供应商所提供代码的操作。如今芯片供应商经过采用PI规范的平台性能数据库(PlatformConfiguration>BIOS环球的外部上班原理一经公共规范告发和阐释,许多新的灵感就会川流不息。UEFI使得有肯定代码基础的人都有或许启动底层的开发,相较于老旧的BIOS的艰涩,复杂,UEFI着实繁难了太多,何况还有规范的EDK供你经常使用,任何有想法的人都可以在自己的PC上启动验证,正所谓众人拾柴火焰高,UEFIBIOS性能增长之快仿佛也不那么让人惊讶了。

互操作性例子

UEFIPI规范并没有给你构建一个PC平台所需的一切,许多小型芯片组件——嵌入式控制器,超级I/O控制器(superI/O,也叫做I/O芯片,从486以后的主板开局采用,在南桥这样的高速设施和串行、并行接口、软盘驱动器及键盘鼠标等少量低速设施之间必然存在资源的不婚配,而要求经过转换和治理。SuperI/O芯片则成功了该性能),OTG设施等等要求自己开发。但是,PI规范提供了可以构建品质牢靠的固件的松软基础(虽然没有给你砖瓦,但却给了你土,水,和火)。

咱们以PI规范中对系统治理总线(SystemManagementBus,简称SMBus)的支持为例,做一个比拟详细的表述。这物品原本是为支持电池治理子系统而开发的,这种双线多主式总线接口已开展成用于传感器敌对台治理的规范主板边带总线。自1995年推出以来,它已成为其余行业规范的一个组成局部,包括PCI,IPMI,DASH以及ASF。

规范中形容了两个形容SMBus主控制器的低级个性的API:EFI_PEI_SMBUS2_PPI(用于PEI阶段)和EFI_SMBUS_HC_PROTOCOL(用于DXE阶段)。这些API准许在SMBus地址上发送和接纳命令,而无需对配件接口启动专门的学习:

typedefstruct_EFI_SMBUS_HC_PROTOCOL{EFI_SMBUS_HC_EXECUTE_OPERATIONExecute;EFI_SMBUS_HC_PROTOCOL_ARP_DEVICEArpDevice;EFI_SMBUS_HC_PROTOCOL_GET_ARP_MAPGetArpMap;EFI_SMBUS_HC_PROTOCOL_NOTIFYNotify;}EFI_SMBUS_HC_PROTOCOL;

这个协定接口结构具有到不同形象函数的函数指针。Execute会经过SMBus向指标SMBus设施发送指令。ArpDevice和GetArpMap将解决SMBus地址解析协定,为SMBus设施调配惟一的地址并报告结果。当SMBus设施发送事情通知时,Notify准许其余驱动程序注册回调。

操作者无需了解SMBus主控制器在配件中如何成功,实践上,他都不要求知道配件是不是真的存在。就这样,只需GreenH中定义了接口规范,芯片供应商在芯片参考代码包中蕴含了其成功,OEM或IBV即可间接调用而不用思考过多细节,互操作性获取极大提高。

后记

UEFIPI的出现,使得固件开发也可以像点菜一样,规划好菜式,依据口味,一项一项组合,再配上一些自己的秘方即可。从此,BIOS工程师过上了幸福的生存(无法能。。)。

UEFI的拼图中有一块关键的局部:UEFI驱动模型(UEFIdrivermodel),咱们会在无时机的独自引见。

UEFI历史和架构其余文章:

欢迎大家关注本专栏和用微信扫描下方二维码参与微信群众号"UEFIBlog",在那里有最新的文章。关注群众号,留言资料,有一些地下芯片资料供下载。

标签: 电脑配件BIOSUEFI

本文地址: https://yihaiquanyi.com/article/69a75f6825a08b9e94cf.html

上一篇:numa与uma的差别NUMA与UEFI...
下一篇:电路维修24小时上门电路quot为什么quot要铺...

发表评论