探秘主流BIOS架构:UEFI

6f27eb547c512bebd477ae97e0b38606.gif

回顾计算机的发展历史,并不是一开始就形成了现在的硬件+固件+操作系统这样的分工合作。在大型机时代(20世纪60年代),比如《人月神话》中曾经介绍过的IBM System/360,其硬件、操作系统是同时开发的,操作系统直接与硬件配合,不需要固件。

e49a504fb64c07bb25d76bbc2c3fbbc6.png

图1 IBM System/360

进入20世纪80年代,个人计算机(Personal Computer,简称PC)蓬勃发展,现代计算机进入PC时代,一直持续到至今。PC的流行,对人类的活动产生了巨大的影响,我们现在已经无法想象没有计算机的生活了。

PC之所以在短短几十年间在全球流行,其中一个最重要的因素是社会化的分工。与大型机、小型机时代不同,PC时代的每个公司只负责PC的一个部分。微软和Intel组成的Wintel联盟,不是包揽PC的所有部件。你可以使用Intel的CPU、微软的Windows系统、华硕的主板、Kingston的内存、七彩虹的显卡,再加上其他厂家的硬盘、键鼠、电源等,组成完整的计算机系统。

这种合作,我们现在称之为生态系统。在这个生态系统中,每一个参与者只负责其中一部分。大家遵循一定的标准,各司其职,把自己的部分做到最好,性价比做到最高。产生的结果,就是PC的成本越来越低,软件越来越丰富,整个生态系统生机盎然、欣欣向荣。

大量的硬件,带来的是各种各样的兼容性问题。纵观PC系统架构,下有五花八门的硬件,上有操作系统和复杂的应用软件。如何让这些纷纭复杂的软件运行在各种硬件上?答案是固件,也就是我们常说的Basic Input Output System(简称BIOS)。

也就是说,在软件和硬件之间增加固件层,由固件来管理硬件差异。这样可以大大减轻操作系统的负担,使之以一种统一的方式来掌控五花八门的硬件。

在目前的市场上,存在各种BIOS架构,包括UEFI、Coreboot、Uboot等。不同的BIOS架构,所实现的功能有所不同,不过必须提供操作系统所需要的接口。目前主流的BIOS架构是UEFI,特别是PC上,几乎成为事实上的标准。如图2给出了UEFI的启动流程。

d214e9638c7663e6d3d527fd1937d44c.png

图2 UEFI启动的7个阶段

UEFI的7个阶段分别为SEC(安全验证)、PEI(EFI前期初始化)、DXE(驱动执行环境)、BDS(启动设备选择)、TLS(操作系统加载)、RT(运行时)和AL(灾难恢复)。其中,前三个阶段是UEFI初始化阶段,DXE阶段加载了大量的硬件驱动,此后UEFI环境就准备好了。

BDS阶段负责选择启动设备,之后将会启动操作系统的OS Loader。由OS Loader去加载操作系统的Kernel,将操作系统启动起来。这些工作,都会在TLS阶段完成。

OS Loader会收集各种资源,包括内存的状况、ACPI的情况等,之后会触发ExitBootServices(),告知BIOS操作系统将接管权限。

OS Loader不是由BIOS提供的,是由操作系统提供的。在完成操作系统启动后,UEFI BIOS将不再有控制权,而是转接给操作系统。BIOS退出后,还会提供Runtime Services、SMI Handler等服务,供操作系统使用。

随着PC的发展,BIOS与操作系统早就密不可分了。BIOS负责初始化硬件,为操作系统提供各类硬件信息,并启动操作系统。完成启动工作后,BIOS交出控制权,并为操作系统提供Runtime Service等服务,以及ACPI、SMBIOS等Table。如图3所示,是一张显示操作系统和UEFI结构的宏观图。

4d662daf7615c7dee43252b8cbf038a4.png

图3 UEFI和操作系统软件架构

进入操作系统后,UEFI BIOS提供的接口包括三类:

 1) UEFI Runtime ServicesUEFI运行时服务)

包括Variable Services、Real Time Clock Services、Status Code Services、Reset Services              

等。

 2) Version Information(版本信息)

包括UEFI Specfication Version(UEFI规范版本)、Firmware Vendor(固件厂商)、Firmware Revision(固件修订版本)等。

3)System Configuration Table(系统配置表)

包括ACPI Table、SMBIOS Table、HOB List、DXE Services Table、SAL System Table等。

虽然此时BIOS已经退出运行舞台,但仍旧在操作系统上发挥巨大的作用。比如按照ACPI标准提供的ACPI Table,它以对象化的方式描述计算机系统的硬件,报告给操作系统。我们最切身体会的关机、睡眠(休眠或待机)等电源事件,就是在ACPI Table控制下进行的。

操作系统的运行,特别是对硬件的掌控,依赖于UEFI BIOS提供的各类支持。对于操作系统内核开发而言,有必要深入了解UEFI架构以及其相应的开发知识。

想要了解更多关于UEFI的相关技术欢迎阅读《UEFI编程实践》

9862739b13330a8ede21d1965b3d0e88.png

《UEFI编程实践》书中提供了33个UEFI应用和驱动示例,以及多个用来配合实验的Windows程序、Linux程序和嵌入式程序。涵盖了构建程序架构、调试方法、构建GUI、各种总线外设的访问、网络应用开发、UEFI驱动和Option ROM开发等内容,特别介绍了国产计算机下的UEFI开发,是偏实战操作的技术性书籍。

作者介绍:

罗 冰  物理隔离安全领域专家,主导开发过网络隔离卡、双网隔离机、国产隔离系统、单向光传输系统等各类安全产品,拥有十几项发明和实用新型专利。<br />致力于UEFI技术的研究、实践,以及相关产品的开发,在CSDN和知乎上设有“UEFI开发探索”专栏。译著有《现代X86汇编语言程序设计》《21世纪机器人》,目前就职于国内某网络安全公司,担任总工程师。

c7f71f5f36571c22a8e4daad3771cbd1.gif

607d96eab1ee211f6636299857f94ff0.png

扫码关注【华章计算机】视频号

每天来听华章哥讲书

7a51014ffcd0169a97f8374ea7548243.gif

更多精彩回顾

书讯 | 11月书讯(上)| 拿下这些新书,赢在起跑线

书讯 | 11月书讯(下) | 拿下这些新书,赢在起跑线

资讯 | 什么是ETL?一文掌握ETL设计过程

书单 | 8本书助你零基础转行数据分析岗

干货 | 架构设计的新思路,《架构之道》读书笔记

收藏 | 终于有人把微服务讲明白了

上新 | 【新书速递】构建高质量软件:持续集成与持续交付系统实践

f17e35567e1ed83223f864843bbdc027.gif

07454493bf1ddee2210a61cd783fd629.gif

点击阅读全文购买

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值