UEFI入门必读的12本书

作者简介

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

 

前言

随着国产CPU的发展,Arm、MIPS、X86、Alphs各种架构百花齐放。相比之前,UEFI工程师面对的硬件更为丰富,所要解决的问题成倍增长,由此也带来了开发人才短缺的问题。按照业内专家估计,现有人员起码需要增加五成,才能解决人才不足问题。

作为承接操作系统和硬件的夹心层,UEFI抽象了硬件,对操作系统提供了统一的接口。面对千奇百怪的硬件,UEFI工程师需要根据各种Spec和功能需求,操作各种寄存器,向上汇报。因此,除去需要熟悉各种工业标准,UEFI本身的标准,工程师还需要对操作系统有一定的熟悉度。

当然,不少公司也期望通过内部培养来解决日益增长的业务需求。但是UEFI工程师需要阅读大量Spec和硬件资料,对技术要求相当高,入门比较艰难。这对于有志于入行的程序员,是非常大的考验。

因此,下面从理解UEFI、UEFI开发、CPU体系架构、常用手册、操作系统六个各方面,分享书单以及相关分享,介绍入门UEFI必读的10本书。

理解UEFI

1、《Beyond BIOS》

作者:Vincent Zimmer,Michael Rothman,Suresh Marisetty

大部分的UEFI程序员,都是从这本书开始进入UEFI的世界的。本书介绍了现代固件的发展,UEFI的框架和其实现(EDKII)。描述了UEFI从开机到进入操作系统,以及如何提供给操作系统接口的所有过程。三位作者都为此领域的发展做出了重大贡献,学习业界大牛的思维,将为进入UEFI开发打下坚实的基础。

2、《Harnessing the Uefi Shell》

  作者:Michael Rothman, Vincent Zimmer, Tim Lewis

本书介绍了UEFI Shell的使用。这是一个类似于Bash Shell的工具,依托于UEFI的基础设施,可以在安全、网络、系统配置、诊断维护等领域发挥重要作用。在实际的开发中,笔者也经常在Shell下测试驱动,开发各类硬件测试工具。UEFI Shell是本领域开发人员必须掌握的工具。

3、《Qucik BOOT》

  作者:Pete Dice

这是一本描述基本初始化过程的全景式图书,为开发人员提供架构背景和启动顺序的详细信息。书中对大量的概念进行了解释,对这些概念的理解是UEFI从业人员必须要了解的。另外,作者也详细阐述了对优化技术的理解。作为入门书籍之一,或可称为本领域的《开蒙要训》。

UEFI开发

1、《UEFI原理与编程》

  作者:戴正华

国内首部UEFI专著,全面介绍UEFI的使用、剖析UEFI的原理。详细介绍了UEFI工程的建立、Protocol的使用,UEFI应用和驱动的开发,以及UEFI Shell的命令和编程,并提供了大量的示例代码。本书也是笔者最常用的参考书之一。

2、《UEFI编程实践》

  作者:罗冰

本书注重实践和实用,对初学者友好。介绍完开发和调试环境,以及UEFI应用和驱动相关的知识点后,对图形图像、外围设备访问等开发者较关心的课题提供了详细阐述。书中践行“Show me the code” 极客精神,自制Oprom开发板和USB实验板,读者可方便得到程序反馈,深刻理解。针对国产化平台的龙芯和飞腾,介绍了如何落地相关的开发知识。

CPU体系架构

1、《计算机组成与设计(硬件软件接口ARM版)

作者:(美)戴维·A.帕特森 约翰·L.亨尼斯

这是计算机组成方面最著名的本科生教材,已经再版多次。两位图灵奖得主,深入浅出的阐述了如何设计指令集、如何思考系统架构。对于UEFI工程师,对CPU架构的理解是基本功要求,学习从芯片架构师的角度去思考,非常有助于深入UEFI架构的理解。

2、《x86x64体系探索及编程

作者:邓志

学习X86架构,最好的参考手册当然是Intel的SDM(Software Developer’s Manual)。不过SDM内容太多,很容易迷失。本书对Intel手册所述处理器架构的探索和论证,从多个方面对处理器架构相关的知识进行了梳理介绍。书中每个章节都准备了相应的测试实验,可以在真实的机器上体会和学习。

常用手册

1、 UEFI Specification

链接:https://uefi.org/specifications

学习UEFI,必然需要了解UEFI规范。UEFI规范讲述了系统固件应该怎么做,都应该包含哪些部分,有那些软件接口,固件必须实现的驱动接口等。建议通读前七章,建立相关概念;熟读Boot Service和Runtime Service,再根据需要对相应的Protocol进行深入了解。

2、 Platform Initialization (PI) Specification

链接:https://uefi.org/specifications

UEFI规范是关于系统固件、附加驱动和OS的规范,操作系统只能通过UEFI规范中的接口或服务进行交互。而PI规范是关于UEFI如何实现的规范,所有的接口和服务仅由固件生成和使用。PI规范建议快速通读,在实际需要中再根据课题深入了解。

3、ACPI Specification

链接:https://uefi.org/specifications

ACPI规范是业界通用的接口,使得操作系统能对主板上设备的配置以及包含设备在内的整个系统的电源管理进行控制。在操作系统主导的电源管理功能中,这是一个非常重要的组件。ACPI使得操作系统可以独立于硬件向前发展,硬件也可以独立于操作系统向前发展,促进生态的形成。UEFI与ACPI密不可分,UEFI工程师的一个重要任务就是为操作系统提供各类硬件的ACPI描述。

操作系统

1、《深入解析WINDOWS操作系统

 作者:Mark E.Russinovich,David A. Solomon等著

这是微软策划出版的系列图书,每个版本都是由微软的内核专家撰写,目前已经出版到第7版。对于UEFI工程师,了解操作系统的架构是很有必要的,因为所服务的主要对象就是操作系统。本书深入解析Windows操作系统的系统架构、进程、线程、内存管理等知识,对于UEFI工程师来说,主要关心启动、硬件驱动加载和电源管理部分。

2、《奔跑吧Linux内核》

 作者:张天飞

针对Linux内核的讲解,市面上已经有太多的书籍了。而且Linux内核是个非常庞大的工程,UEFI工程师一般也不需要深入到独立开发内核的程度。因此,对其开发能到入门级即可,知道如何编译和调试,了解UEFI如何启动到Linux Kernel,以及如何提供操作系统所需的各种资源。本书作者提供了Linux 5.0的实验代码,很值得选择感兴趣的主题,亲手操作,加深对相关架构知识的理解。

3、《QEMU\KVM源码解析与应用

  作者:李强

为了理解UEFI架构以及EDKII的源码,需要准备称手的测试和调试环境。而硬件环境不光是花费不菲,修改也比较麻烦。个人认为,Qemu是最好的实验载体了,EDKII中也为其准备了相应的架构支持。本书非常详尽地对QEMU与KVM的实现进行了详细分析,涉及的源码包括QEMU程序的基本组成与重要组件、主板与固件虚拟化、CPU虚拟化、内存虚拟化、中断虚拟化、设备虚拟化等。UEFI工程师可从中学习如何添加需要的硬件设备,用来验证UEFI驱动,可以大大加速日常的工作速度。

总结

UEFI或者说BIOS行业颇为枯燥,需要阅读大量Spec和硬件资料。因此,UEFI工程师需要了解的知识非常宽广,某些方面要求非常深入。本篇从理解UEFI、UEFI开发、CPU体系架构、常用手册和操作系统方面,推荐了12本入门所需要了解的书籍。这些书籍即可作为入门,也适合作为案头参考,常常翻阅,结合平常的实践学习积累,相信对大家的工作学习中会有所帮助。

  • 10
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ACPI(高级配置和电源接口)是现代计算机系统中负责管理硬件和电源的重要组件。编写ACPI编程代码是深入了解和掌握系统的关键。 ACPI编程的入门首先需要了解ACPI的原理和基本概念。ACPI主要包括了ACPI表、ACPI命名空间、ACPI方法、ACPI设备和ACPI事件等组件。其中最重要的是ACPI表,它是存储ACPI配置和信息的数据结构,在操作系统启动时由固件(如BIOS或UEFI)提供。 接下来,我们需要学习如何使用UEFI提供的接口来访问ACPI表。UEFI是用于取代传统BIOS的新一代固件接口标准,它提供了许多用于操作硬件的接口函数。在UEFI内核导读中,我们可以学习到如何使用UEFI提供的接口函数,如GetSystemTable和LocateProtocol来获取ACPI表。 一旦获取了ACPI表,就可以使用ACPI编程来操作和管理系统的硬件。我们可以通过解析ACPI表的结构和字段来获取硬件信息,如处理器、硬盘和显卡等。同时,ACPI编程还可以用于配置和控制硬件,如设置电源管理策略、启用和禁用设备等。 在ACPI编程入门中,我们也需要学习如何处理ACPI事件。ACPI事件是指硬件状态或系统事件的通知,如按键事件、电源事件和温度事件等。通过注册和处理ACPI事件,我们可以编写更加智能和灵活的系统管理代码。 最后,了解ACPI编程的最佳实践和调试技巧也是非常重要的。ACPI编程常常需要谨慎处理硬件和系统的复杂逻辑,同时需要进行灵活的错误处理。熟悉ACPI规范和文档,以及使用调试工具来分析和解决问题,都是提高ACPI编程效率和质量的关键。 总之,ACPI编程是一项重要而复杂的任务,通过学习UEFI内核导读中的ACPI编程入门知识,我们可以更好地了解和掌握ACPI的原理和操作方法,为开发和管理现代计算机系统提供强大的工具和技术支持。 ### 回答2: 《UEFI内核导读》中的ACPI编程入门章节主要介绍了在UEFI环境下进行ACPI编程的基础知识和技巧。ACPI (Advanced Configuration and Power Interface) 是一种用于操作系统和硬件之间通信的标准接口,它定义了电源管理、设备配置和配置信息传递等功能。 ACPI编程的入门主要包括以下内容: 1. ACPI的概述:介绍了ACPI的基本概念、作用和结构,说明了在UEFI中如何使用ACPI来进行设备配置和管理。 2. ACPI表:解释了ACPI表的类型和作用,如DSDT(Differentiated System Description Table)、SSDT(Secondary System Description Table)等,以及如何在UEFI中获取和使用这些表。 3. AML语言:AML(ACPI Machine Language)是一种用于编写ACPI表的高级语言,介绍了AML的基本语法和常用指令,以及如何在UEFI中加载和执行AML代码。 4. 设备电源管理:讲解了如何使用ACPI进行设备电源管理,包括睡眠、唤醒和电源状态转换等操作。 5. 事件和中断处理:说明了如何使用ACPI来处理系统事件和中断,以及如何编写ACPI方法来响应这些事件和中断。 通过学习这些内容,读者可以掌握在UEFI环境下进行ACPI编程的基础知识和技巧。ACPI编程在UEFI开发中起着重要的作用,对于实现系统设备管理和电源管理等功能非常重要,对于理解和使用UEFI内核也具有重要意义。 ### 回答3: acpi(高级配置和电源接口)是一种被广泛使用在现代计算机系统中的标准,用于管理硬件设备的电源管理和配置信息。在UEFI(统一可扩展固件接口)内核导读中,acpi编程入门是其中一个重要的主题。 acpi编程入门的目的是让开发者了解如何使用acpi来控制硬件设备的电源管理和配置操作。acpi提供了一组标准的接口和语言,使开发者可以编写具体的acpi代码来实现特定的功能。通过acpi编程,开发者可以实现诸如电源管理、设备状态监控和系统配置等功能。 在acpi编程入门中,首先需要了解acpi的基本概念和架构。acpi的核心是acpi表,它包含系统的配置信息和控制信息。开发者需要了解如何解析和读取acpi表,以获取系统的配置信息。同时,了解acpi命名空间和对象模型,可以帮助开发者理解acpi中的各个组件和其关系。 在实际的acpi编程中,开发者需要学习acpi语言(ASL)和acpi命令(AML)。ASL是一种类似于C语言的高级语言,用于编写acpi代码。AML是一种二进制格式的编码,用于实际执行acpi代码。了解如何编写和编译ASL代码,并将其转换为AML代码是开发者的关键任务。 此外,理解acpi的工作原理和常见的acpi编程技巧也是入门的重要内容。开发者需要知道如何注册和操作acpi设备,如何监听和处理acpi事件,以及如何控制电源状态和硬件配置。 总之,在UEFI内核导读中,acpi编程入门是为开发者提供的一项重要教学内容。通过学习acpi编程,开发者可以更好地理解和掌握UEFI系统中的电源管理和硬件配置操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值