UEFI知识及技术介绍(附下载)
共 4853字,需浏览 10分钟
·
2021-06-02 14:28
从我们按下开机键到进入操作系统,对用户来说是一个等待的过程,而对计算机来说是一个复杂的过程。在BIOS时代,这个过程重复了一年又一年,操作系统已经从枯燥的文本界面演化到丰富多彩的图形界面,BIOS 却一直延续着枯燥的过程,BIOS 设置也一直是单调的蓝底白字格式。BIOS 的坚持出于两个原因; 外因是 BIOS 基本能满足市场需求,内因是 BIOS 的设计使得 BIOS的升级 和扩增变得非常困难。随着 64 位CPU逐渐取代 32 位 CPU, BIOS 越来越不能满足市场的需求,这使得 UEFI作为 BIOS的替代者,逐渐开始取代 BIOS的地位。
BIOS 诞生于1975 年的CP/M计算机,诞生之初,也曾是一种先进的技术,并且是系统中相当重要的一个部分。随着 IBM PC 兼容机的流行,BIOS也逐渐发展起来。它"统治"了计算机系统 20多年的时间,在这段时间里,CPU 每 18个月性能提升一倍。计算机软硬件都已经繁衍了无数代,BIOS 诞生之初与之配套的8位 CPU 和DOS 系统都已经退出历史舞台,而 BIOS 依然顽强地存在于计算机中。
BIOS 全称为"基本输入/ 输出系统",它是存储在主板 ROM里的一组程序代码,这些代码包括∶
1)加电自检程序,用于开机时对硬件的检测。
2)系统初始化代码,包括硬件设备的初始化、创建 BIOS 中断向量等。口基本的外围I/O 处理的子程序代码。
3)CMOS 设置程序。
BIOS 程序运行在16 位实模式下,实模式下最大的寻址范围是 1MB,0xOC0000~0xOFFFFF保留给 BIOS 使用。开机后,CPU 跳到 0xOFFFF0处执行,一般这里是一条跳转指令,跳到真正的 BIOS入口处执行。BIOS代码首先做的是"加电自检"(Power On Self Test,POST),主要是检测关机设备是否正常工作,设备设置是否与 CMOS 中的设置一致。如果发现硬件错误,则通过喇叭报警。
POST检测通过后初始化显示设备并显示显卡信息,接着初始化其他设备。设备初始化完毕后开始检查 CPU 和内存并显示检测结果。内存检测通过以后开始检测标准设备,例如硬盘、光驱、串口设备、并口设备等。然后检测即插即用设备,并为这些设备分配中断号、I/O 端口和 DMA 通道等资源。如果硬件配置发生变化,那么这些变化的配置将更新到CMOS 中。
随后,根据配置的启动顺序从设备启动,将启动设备主引导记录的启动代码通过 BIOS 中断读入内存,然后控制权交到引导程序手中,最终引导进入操作系统。
随着 CPU 及其他硬件设备的革新,BIOS 逐渐成为计算机系统发展的瓶颈,主要体现在如下几个方面∶
1)开发效率低∶大部分 BIOS 代码使用汇编开发,开发效率不言而喻。汇编开发的另一个缺点是使得代码与设备的耦合程度太高,代码受硬件变化的影响大。
2)性能差∶ BIOS 基本输人/输出服务需要通过中断来完成,开销大,并且 BIOS 没有提供异步工作模式,大量的时间消耗在等待上。
3)功能扩展性差,升级缓慢∶ BIOS 代码采用静态链接,增加硬件功能时,必须将 16位代码放置在0x0C0000~0xODFFFF 区间,初始化时将其设置为约定的中断处理程序。而且 BIOS 没有提供动态加载设备驱动的方案。
4)安全性∶ BIOS 运行过程中对可执行代码没有安全方面的考虑。
5)不支持从硬盘 2 TB 以上的地址引导∶ 受限于 BIOS 硬盘的寻址方式,BIOS 硬盘采用32 位地址。
UEFI(Unified Extensible Fimware Interface,统一可扩展固件接口)定义了操作系统和平台固件之间的接口,它是 UEFT Forum 发布的一种标准。它只是一种标准,没有提供实现。其实现由其他公司或开源组织提供,例如英特尔公司提供的开源 UEFI实现TianoCore 和 Phoenix 公司的 SecureCore Tiano。UEFI 实现一般可分为两部分:
1)平台初始化:遵循 Platform Initialization标准,由UEFI Forum发布。
2)固件:操作系统接口。
UEFI发端于 20世纪 90年代中期的安腾系统。相对于当时流行的 32 位 IA32 系统,安腾是一种全新的64位系统,BIOS 的限制对这种 64 位系统变得不可接受(BIOS 也正是随着 32 位系统被64 位系统取代而逐渐退出市场的)。因为 BIOS在 64位系统上的限制,1998年英特尔公司发起了Intel Boot Initiative 项目,后来更名为 EFI(Extensible Fimware Interface)。
2003年英特尔公司的安腾 CPU 计划遭到 AMD公司的x86 64 CPU 顽强阻击,x86 64 CPU时代到来,市场更愿意接受渐进式的变化,英特尔公司也开始发布兼容32 位系统的x86_64 CPU。安腾虽然没有像预期那样独占市场,EFI却显示出了它的价值。2005年,英特尔公司联合微软、AMD、联想等 11 家公司成立了Unified EFI Forum,负责制定统一的EFI标准。第一个 UEFI标准——UEFI2.0在2006年1月发布。目前最新的UEFI标准是2013年发布的 UEFI2.4。
UEFI提供给操作系统的接口包括启动服务(Boot Services,BS)和运行时服务(Runtime Service,RT)以及隐藏在 BS 之后的丰富的 Protocol。BS 和 RT 以表的形式(C语言中的结构体)存在。UEFI驱动和服务以 Protocol 的形式通过 BS提供给操作系统。
从操作系统加载器(OS Loader)被加载,到OS Loader执行ExitBootServices(的这段时间,是从 UEFI环境向操作系统过渡的过程。在这个过程中,OS Loader 可以通过BS和RT使用UEFI提供的服务,将计算机系统资源逐渐转移到自己手中,这个过程称为 TSL(Transient System Load)。
当 OS Loader 完全掌握了计算机系统资源时,BS 也就完成了它的使命。OS Loader 调用 ExitBootServices() 结束 BS并回收BS占用的资源,之后计算机系统进人UEFI Runtime 阶段。
在 Runtime 阶段只有运行时服务继续为 OS 提供服务,BS已经从计算机系统中销毁。在TSL 阶段,系统资源通过 BS 管理,BS提供的服务如下。
1)事件服务∶ 事件是异步操作的基础。有了事件的支持,才可以在 UEFI系统内执行并发操作。
2)内存管理∶ 主要提供内存的分配与释放服务,管理系统内存映射。
3)Protocol 管理∶提供了安装 Protocol与卸载 Protocol的服务,以及注册 Protocol通知函数(该函数在 Protocol 安装时调用)的服务。
4)Protocol 使用类服务∶ 包括 Protocol 的打开与关闭,查找支持Protocol的控制器。例如要读写某个PCI设备的寄存器,可以通过 OpenProtocol 服务打开这个设备上的 Pcilo Protocol,用 Pcilo->Io.Read()服务可以读取这个设备上的寄存器。
5)驱动管理;包括用于将驱动安装到控制器的connect 服务,以及将驱动从控制器上卸载的disconect服务。例如,启动时,如果我们需要网络支持,则可以通过loadImage将驱动加载到内存,然后通过 connect 服务将驱动安装到设备。
6)lmage 管理∶ 此类服务包括加载、卸载、启动和退出 UEFI应用程序或驱动。
7 )ExitBootServices∶ 用于结束启动服务。
RT提供的服务主要包括如下几个方面。
1)时间服务∶ 读取/ 设定系统时间。读取/设定系统从睡眠中唤醒的时间。
2)读写 UEFI 系统变量∶读取/设置系统变量,例如 BootOrder用于指定启动项顺序。通过这些系统变量可以保存系统配置。
3)虚拟内存服务∶ 将物理地址转换为虚拟地址。
4)其他服务∶ 包括重启系统的 ResetSystem,获取系统提供的下一个单调单增值等。
UEFI 能迅速取代 BIOS,得益于 UEFI 相对 BIOS 的几大优势。
(1)UEFI的开发效率BIOS 开发一般采用汇编语言,代码多是硬件相关的代码。而在 UEFI中,绝大部分代码采用C语言编写,UEFI应用程序和驱动甚至可以使用 C++编写。UEFI通过固件-操作系统接口(BS 和RT服务)为OS 和OS 加载器屏蔽了底层硬件细节,使得UEFI上层应用可以方便重用。
(2)UEFI系统的可扩展性UEFI 系统的可扩展性体现在两个方面∶ 一是驱动的模块化设计;二是软硬件升级的兼容性。大部分硬件的初始化通过UEFT驱动实现。每个驱动是一个独立的模块,可以包含在固件中,也可以放在设备上,运行时根据需要动态加载。
UEFI 中每个表、每个 Protocol(包括驱动)都有版本号,这使得系统的平滑升级变得简单。
(3)UEFI系统的性能相比 BIOS,UEFI有了很大的性能提升,从启动到进入操作系统的时间大大缩短。性能的提高源于以下 几个方面∶
1)UEFI提供了异步操作。基于事件的异步操作,提高了 CPU利用率,减少了总的等待时间。
2)UEFI舍弃了中断这种比较耗时的操作外部设备的方式,仅仅保留了时钟中断。外部设备的操作采用"事件士异步操作"完成。
3)可伸缩的遍历设备的方式,启动时可以仅仅遍历启动所需的设备,从而加速系统启动。
(4)UEFI系统的安全性UEFI的一个重要突破就是其安全方面的考虑。当系统的安全启动功能被打开后,UEFI在执行应用程序和驱动前会先检测程序和驱动的证书,仅当证书被信任时才会执行这个应用程序或驱动。UEFI 应用程序和驱动采用PE/COFF 格式,其签名放在签名块中。
下载链接:UEFI技术和基础知识
《UEFI技术和基础知识》
《UEFI安全启动技术手册》
免责申明:本号聚焦相关技术分享,内容观点不代表本号立场,可追溯内容均注明来源,发布文章若存在版权等问题,请留言联系删除,谢谢。
电子书<服务器基础知识全解(终极版)>更新完毕,知识点深度讲解,提供182页完整版下载。
获取方式:点击“阅读原文”即可查看PPT可编辑版本和PDF阅读版本详情。
温馨提示:
请搜索“AI_Architect”或“扫码”关注公众号实时掌握深度技术分享,点击“阅读原文”获取更多原创技术干货。