罗冰:系统安全(特别是物理隔离领域)专家,主导开发网络隔离卡、双网隔离机、国产隔离系统、单向光传输等各类安全产品,拥有十几项发明和实用新型专利。致力于UEFI技术的研究、实践和推广,在CSDN和知乎上设有“UEFI开发探索”专栏。译著《现代X86汇编语言程序设计》、《21世纪机器人》,目前就职于国内某网络安全公司,担任总工程师。
随着国产CPU的发展,Arm、MIPS、X86、Alphs各种架构百花齐放。相比之前,UEFI工程师面对的硬件更为丰富,所要解决的问题成倍增长,由此也带来了开发人才短缺的问题。按照业内专家估计,现有人员起码需要增加五成,才能解决人才不足问题。
作为承接操作系统和硬件的夹心层,UEFI抽象了硬件,对操作系统提供了统一的接口。面对千奇百怪的硬件,UEFI工程师需要根据各种Spec和功能需求,操作各种寄存器,向上汇报。因此,除去需要熟悉各种工业标准,UEFI本身的标准,工程师还需要对操作系统有一定的熟悉度。
当然,不少公司也期望通过内部培养来解决日益增长的业务需求。但是UEFI工程师需要阅读大量Spec和硬件资料,对技术要求相当高,入门比较艰难。这对于有志于入行的程序员,是非常大的考验。
因此,下面从理解UEFI、UEFI开发、CPU体系架构、常用手册、操作系统六个各方面,分享书单以及相关分享,介绍入门UEFI必读的10本书。
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从业人员必须要了解的。另外,作者也详细阐述了对优化技术的理解。作为入门书籍之一,或可称为本领域的《开蒙要训》。
1、《UEFI原理与编程》
作者:戴正华
国内首部UEFI专著,全面介绍UEFI的使用、剖析UEFI的原理。详细介绍了UEFI工程的建立、Protocol的使用,UEFI应用和驱动的开发,以及UEFI Shell的命令和编程,并提供了大量的示例代码。本书也是笔者最常用的参考书之一。
2、《UEFI编程实践》
作者:罗冰
本书注重实践和实用,对初学者友好。介绍完开发和调试环境,以及UEFI应用和驱动相关的知识点后,对图形图像、外围设备访问等开发者较关心的课题提供了详细阐述。书中践行“Show me the code” 极客精神,自制Oprom开发板和USB实验板,读者可方便得到程序反馈,深刻理解。针对国产化平台的龙芯和飞腾,介绍了如何落地相关的开发知识。
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本入门所需要了解的书籍。这些书籍即可作为入门,也适合作为案头参考,常常翻阅,结合平常的实践学习积累,相信对大家的工作学习中会有所帮助。