- UEFI on ARM -
想学习 EFI 编程?
福音来了
2024/01/08
◐
走进 UEFI 的世界,
感受固件编程的独特魅力,
了解UEFI on ARM的最新情报。
绝大多数的应用程序开发者都明白模块和接口的概念,网络上对于这方面的讨论和课程也很多。
那么对于底层开发,是否有类似的概念呢?
答案是肯定的。Intel在2001年推出的 EFI 就是一个关于固件的接口。靠着这个接口,Wintel联盟统治了PC 30年。
什么是EFI?
Extensible Firmware Interface
EFI是Extensible Firmware Interface的缩写,即可扩展固件接口。
我们知道,早期的PC是由传统BIOS负责启动的,BIOS程序存放于一个掉电后内容不会丢失的只读存储器(ROM)中,系统加电时处理器的第一条指令的地址会被定位到BIOS代码中,开始执行初始化程序。但BIOS存在诸多缺点,比如,大部分传统BIOS程序采用汇编语言开发,但是汇编开发的一个缺点是代码与设备的耦合度太大,代码受硬件变化的影响大。
另外,传统BIOS代码采用静态链接,增加硬件功能时,代码需做大量改动,而且传统BIOS没有提供动态加载设备驱动的方案。而随着CPU和其它硬件设备的革新,传统BIOS的所有这些缺点成为计算机系统发展的瓶颈。
在这样的背景下,EFI应运而生了。EFI可以更好地支持新的硬件设备(这可以从它的名称看得出来),同时还具有开发速度快、启动时间短、更加安全等其它特点。
为什么要学习EFI编程?
那么我们为什么要学习EFI编程呢?
前面说过,靠着EFI,Wintel联盟已经统治了PC 30年。但是,所谓三十年河东,三十年河西,随着硬件技术的不断升级和人们需求的多样化,以x86为架构的PC也表现出了一些不足,其中最大的问题就是电池的续航问题。随着移动办公的日益普及,人们对电池的续航性能要求越来越高,但x86天生的架构无法满足这一点。后起之秀Arm由于从出生时就携带着高效能的基因,从而在移动设备领域一直独霸天下。过去一些年里,Arm芯片的性能比不上x86,所以在PC领域一直是不温不火。但是芯片技术的发展遵循摩尔定律,即每隔18-24个月,在价格不变的情况下,芯片的性能会提高一倍。Arm现在推出的Cortex-A76,性能已经有了显著提升。再加上Big.Little技术,未来基于Arm的PC能够与基于x86的PC平分秋色也是非常可期的。
在苹果成功把MacBook从x86转移到Arm后,高通、英伟达等很多巨头也积极研发Arm PC。很多人认为,2024年将是Arm PC开始高速发展的一年。但目前还存在很多的工作要做。就以固件为例,虽然Arm早在2013 年就加入了EFI组织,但目前ARM上的UEFI(Unified EFI,是 EFI 的改良版)代码还存在一些问题,比如对ACPI的支持不完善,无法自由安装通用操作系统。

随着Arm PC的持续升温,必然对人才产生很强的需求。比如要在Arm硬件上支持Windows(WoA),那么就需要既懂底层,又懂Windows的工程师,而目前这方面的人才非常紧缺。
所以,从职业发展角度看,学好UEFI,便可以投身到正在兴起的Arm PC研发中,可能找到一份非常好的工作。这份工作可能是固件工程师,也可能是应用软件工程师。因为Arm PC流行后,大量的应用软件需要适配和优化,如果你对UEFI和WoA有一定了解,那么便成为紧缺的人才。
当然,学习UEFI,可以加深对计算机系统的理解,可以打通知识壁垒,提高工作效率,特别是缩短解决问题(debug)的时间。
如何学习EFI编程?
EFI PROGRAM.


学习EFI编程的方法有很多,可以看书,看文档,看代码,但最好的方法还是动手实践。C语言的发明者丹尼斯·里奇(Dennis Ritchie)有一句名言:学习一门编程语言的唯一方法就是用它来写代码。学习EFI编程也一样,要多写代码多实践。
当然,动手实践就需要有环境。目前,格蠹科技推出的幽兰本,已经可以在本机编译、部署、烧录和调试UEFI代码,对有志于从事底层开发的程序员来说,实在是一个福音。
另外,格蠹科技创始人兼CEO张银奎老师,也打算在2024年推出一期关于UEFI编程的培训,并且已于昨晚(2024年1月7日周日)举办了一场线上直播,给大家分享了EFI的前世今生。从与会者人数来看,大家对这个领域还是相当感兴趣的,有很多之前从事这个领域的朋友,也有很多后起之秀。
UEFI
培训分为六讲,都是以实战为主,以下是每节课的内容概要。
01
UEFI跑起来
要点:下载代码、调整信息输出、构建、熟悉镜像格式、烧录、启动、接收和分析调试信息、进入UEFI图形界面和外壳环境、执行外壳命令。
02
修改UEFI界面
要点:HII基础、定义表单、定义控件、界面和变量绑定、UEFI的配置机制(PCD)、定义PCD变量保存设置。
03
编写UEFI应用——PcdEdit
要点:UEFI模块、模块的基本文件(DSC、DEC、INF)、应用入口、UEFI的包、编写代码、观察和编辑PCD变量、加载和运行UEFI App、调试UEFI App的方法。
04
开发UEFI驱动
要点:面向对象基础、UEFI Protocol、GUID、函数指针、方法表、操作Protocol的基本函数:打开、寻找、响应。
05
权力移交——加载OS
要点:Boot Manager、通过UEFI启动Windows、通过UEFI启动grub、动态增加启动项、访问boot loader的原理和方法。
06
电池出来——与OS配合
要点:电池设备的驱动、UEIF的标准设备、Control Method Battery、ASL、使用ASL定义设备、结构体、字段、实现UEIF的标准方法、通过标准方法报告电池的基本信息和实时状态。
【盛格塾】
正心诚意,格物致知
以人文情怀审视软件,以软件技术改变人生

格友公众号

盛格塾小程序
扫描上方二维码或在微信中搜索“盛格塾”小程序
可以阅读更多文章和有声读物
往期推荐
本文介绍了EFI编程的基础知识,强调了在Arm PC崛起的背景下学习EFI编程的重要性。EFI作为固件接口,有助于理解和优化计算机系统,特别是在Arm硬件上支持Windows等操作系统。学习EFI编程需要实践,格蠹科技提供了相关的实践环境和培训课程,帮助开发者深入掌握这一技术。
381

被折叠的 条评论
为什么被折叠?



