我对PC固件编程很感兴趣,我只是在研究UEFI规范。令我惊讶的是,它似乎是嵌入固件的整个操作系统的规范。您甚至可以编写UEFI“应用程序”,它们直接使用UEFI引导服务运行,而不会出现任何其他操作系统。
我找到了博客文章,展示了如何创建“Hello,world!”可以在UEFI预引导环境中运行的应用程序。这是...... 有趣的,同时又奇怪。我将在常规操作系统上运行我的“Hello,world”程序,谢谢。
UEFI应用程序实际上有哪些用例?花哨的启动配置屏幕?任何“真正的”商用PC固件是否使用UEFI应用程序来实现除引导加载程序和引导配置实用程序之外的任何其他内容?
答案 0 :(得分:9)
尽管这里有很多有价值的答案,因为我自己写了几个UEFI应用程序,我会尝试加上我的2美分。首先,UEFI应用程序是什么让我们谈论的是:
UEFI Specificatin v2.5:
第2.1.1节
图像类型之间的主要区别是固件的内存类型 将图像加载到图像的入口点退出或返回时执行的操作。一个 当从图像的入口点返回控件时,应用程序图像总是被卸载。
第2.1.2节
当应用程序返回时 它的入口点,或者当它调用应用程序的引导服务EFI_BOOT_SERVICES.Exit()时 从内存中卸载并将控制权返回给加载应用程序的UEFI组件。
在UEFI中有意义的应用程序组:
EFI_BOOT_SERVICES.ExitBootServices()
,从而导致终止所有内存管理并将控制权交给操作系统。请注意,UEFI应用程序的一个非常重要的功能是它可以添加到引导顺序并在每个引导时执行。此外,UEFI应用程序不必随BIOS映像一起提供,它可以存储在连接的设备内存中,这对于Option ROM配置工具来说很常见。
答案 1 :(得分:8)
任何不是PEI / DXE / SMM核心或驱动程序的都是应用程序,因此任何“真正的”PC都有它们,因为BIOS Setup实际上是一个UEFI应用程序。一些供应商包括各种其他应用程序,如固件更新程序,诊断和故障排除实用程序等.UEFI 2.4可以使用正确填充的BootXXXX / KeyXXXX变量对添加您自己的应用程序,然后在POST期间按键组合运行它。
使用当前StdLib package的EFI Development Kit可以将用C编写的大多数控制台应用程序编译为UEFI应用程序,然后在UEFI shell中运行。
有用的UEFI应用程序的主要示例(除了引导程序,shell和Linux内核,当然还有Intel ME System Tools,Read Universal,Python 2.7等等。
最终,当旧版启动不再可用时,所有当前有用的DOS实用程序必须成为UEFI应用程序或灭绝。
答案 2 :(得分:5)
这是一个完整的UEFI预启动应用程序的示例;
有SED个SSD / HDD驱动器。一旦SSD / HDD断电,它就会进入锁定状态(基于硬件的加密)。您无法访问驱动器的数据,驱动器上的所有分区都不再可见。只有小型只读分区(ShadowMBR)可用。 UEFI固件从唯一可用的分区引导UEFI应用程序(在初始化过程期间以及在获取SED的所有权时,UEFI应用程序写在该分区上)。它安全地验证用户身份,如果凭据有效,则解锁驱动器。当驱动器解锁时,Shadow MBR消失,驱动器上的所有分区都可用。然后App链启动已安装的操作系统。
因此,如果您没有凭据,则无法启动操作系统,也无法以任何方式访问驱动器上的数据。
答案 3 :(得分:4)
以下是几个例子:
https://github.com/NikolajSchlej/CrScreenshotDxe UEFI DXE驱动程序从GOP兼容的图形控制台获取屏幕截图(是的,您可以制作BIOS的PNG屏幕截图并保存)
http://ruexe.blogspot.com/ RU.EFI是一个用于调试BIOS的高级工具
答案 4 :(得分:3)
嗯,有OS加载器 - 更重量级的(Windows,GRUB,BSD Loader)和“提供菜单”(rEFInd,Gummiboot)。 Shim支持UEFI Secure Boot for Linux平台,包括应用程序以及安装协议以供其他应用程序使用。
然后你会遇到像Linux内核这样的东西,它在用CONFIG_EFI_STUB编译时会成为一个有效的UEFI应用程序,并具有启动自身的意识。
固件更新也可以作为UEFI应用程序提供。
UEFI shell本身就是一个应用程序。
然后有工厂生产测试实用程序,开发诊断工具等......
答案 5 :(得分:2)
Windows 7 - 8具有UEFI安装程序。我并不完全了解细节,但我很确定这个新环境为开发人员提供了比DVD上的传统启动环境更多的灵活性。
某些主板具有“即时启动”功能,可让您在几秒钟内进入桌面屏幕。这通常是一些Linux的精简版,允许您访问Web浏览器并播放音乐/视频。华硕有这样的板子。