送书
回顾计算机的发展历史,并不是一开始就形成了现在的硬件+固件+操作系统这样的分工合作。在大型机时代(20世纪60年代),比如《人月神话》中曾经介绍过的IBM System/360,其硬件、操作系统是同时开发的,操作系统直接与硬件配合,不需要固件。
图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的启动流程。
图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结构的宏观图。
图3 UEFI和操作系统软件架构
进入操作系统后,UEFI BIOS提供的接口包括三类:
包括Variable Services、Real Time Clock Services、Status Code Services、Reset Services
等。
包括UEFI Specfication Version(UEFI规范版本)、Firmware Vendor(固件厂商)、Firmware Revision(固件修订版本)等。
包括ACPI Table、SMBIOS Table、HOB List、DXE Services Table、SAL System Table等。
虽然此时BIOS已经退出运行舞台,但仍旧在操作系统上发挥巨大的作用。比如按照ACPI标准提供的ACPI Table,它以对象化的方式描述计算机系统的硬件,报告给操作系统。我们最切身体会的关机、睡眠(休眠或待机)等电源事件,就是在ACPI Table控制下进行的。
操作系统的运行,特别是对硬件的掌控,依赖于UEFI BIOS提供的各类支持。对于操作系统内核开发而言,有必要深入了解UEFI架构以及其相应的开发知识。
想要了解更多关于UEFI的相关技术欢迎阅读《UEFI编程实践》
《UEFI编程实践》书中提供了33个UEFI应用和驱动示例,以及多个用来配合实验的Windows程序、Linux程序和嵌入式程序。涵盖了构建程序架构、调试方法、构建GUI、各种总线外设的访问、网络应用开发、UEFI驱动和Option ROM开发等内容,特别介绍了国产计算机下的UEFI开发,是偏实战操作的技术性书籍。
作者介绍:
罗 冰 物理隔离安全领域专家,主导开发过网络隔离卡、双网隔离机、国产隔离系统、单向光传输系统等各类安全产品,拥有十几项发明和实用新型专利。
致力于UEFI技术的研究、实践,以及相关产品的开发,在CSDN和知乎上设有“UEFI开发探索”专栏。译著有《现代X86汇编语言程序设计》《21世纪机器人》,目前就职于国内某网络安全公司,担任总工程师。
文末送书:
大家留言评论对【人人都是极客】阅读的收获或者建议,留言评论前5名每人送一本纸氏书籍,包邮的哦。
时间截止:2021-10-22,20:00:00
我会从评论中挑选,并置顶你的评论,如果你的评论被回复并置顶了,请一定要联系我,并把邮寄地址发给我。过期不候哦!!