14

我对 PC 固件编程很感兴趣,并且正在研究 UEFI 规范。令我惊讶的是,它似乎是嵌入在固件中的整个操作系统的规范。您甚至可以编写直接使用 UEFI 引导服务运行的 UEFI“应用程序”,而无需任何其他操作系统。

我发现博客文章展示了如何创建“你好,世界!” 可以在 UEFI 预引导环境中运行的应用程序。这……很有趣,同时也很奇怪。我将在常规操作系统上运行我的“Hello, world”程序,谢谢。

UEFI 应用程序实际上适合什么样的用例?花哨的启动配置屏幕?是否有任何“真正的”商用 PC 固件使用 UEFI 应用程序来实现不仅仅是引导加载程序和引导配置实用程序?

4

6 回答 6

14

任何不是 PEI/DXE/SMM 内核或驱动程序的东西都是应用程序,因此任何“真正的”PC 都有它们,因为 BIOS 设置实际上是一个 UEFI 应用程序。一些供应商包括各种其他应用程序,如固件更新程序、诊断和故障排除实用程序等。UEFI 2.4 可以使用正确填充的 BootXXXX/KeyXXXX 变量对添加您自己的应用程序,然后在 POST 期间通过按下组合键来运行它。

大多数用 C 语言编写的控制台应用程序都可以通过使用当前EFI 开发工具包的StdLib 包编译为 UEFI 应用程序,然后在 UEFI shell 中运行。

有用的 UEFI 应用程序(当然,除了引导加载程序、shell 和 Linux 内核)的主要示例是Intel ME System ToolsRead UniversalPython 2.7等等。

最终,当传统引导不再可用时,所有当前有用的 DOS 实用程序必须要么成为 UEFI 应用程序,要么消失。

于 2014-11-09T14:09:55.757 回答
11

尽管这里有很多有价值的答案,但因为我自己编写了几个 UEFI 应用程序,我会尝试添加我的 2 美分。首先,什么是 UEFI 应用程序,让我们讨论一下:

UEFI 规范 v2.5:

第 2.1.1 节

映像类型之间的主要区别在于固件将映像加载到的内存类型,以及映像入口点退出或返回时采取的操作。当从图像的入口点返回控制权时,始终会卸载应用程序图像。

第 2.1.2 节

当应用程序从其入口点返回时,或者当它调用引导服务 EFI_BOOT_SERVICES.Exit() 时,应用程序将从内存中卸载,并将控制权返回给加载应用程序的 UEFI 组件。

在 UEFI 中有意义的应用程序组:

  • 配置工具- 选项 ROM 的配置界面(即存储控制器)、带外管理(即 AMT 配置工具)、制造商性能调整工具
  • 配置工具- 管理员用于预加载特定 BIOS 设置,手动设置 BIOS 设置中的所有选项效率低下
  • 诊断工具- 主要用于无法在操作系统中执行的测试(DRAM 测试、全存储扫描、存储 R/W 测试等)。在某些地区,UEFI BIOS 中需要特定的诊断工具,因此可以将这些工具出售给政府。
  • 安全应用程序- 硬盘加密/解密、防病毒扫描程序和防盗应用程序
  • BIOS 功能增强- 以太网供电扩展、DRAM 发现、修补和修改系统表(SMBIOS、ACPI)
  • 显示工具- 用于在运行时显示复杂动画、启动画面显示
  • 引导加载程序- 这是一种特殊类型的应用程序,它可以调用EFI_BOOT_SERVICES.ExitBootServices()导致所有内存管理终止并将控制权传递给操作系统。

请注意,UEFI 应用程序的一个非常重要的特性是它可以添加到启动顺序并在每次启动时执行。此外,UEFI 应用程序不必与 BIOS 映像一起交付,它可以存储在连接的设备内存中,这对于 Option ROM 配置工具很常见。

于 2016-01-07T12:38:42.440 回答
7

这是一个完整的 UEFI 预启动应用程序的示例;

SED SSD/HDD 驱动器。一旦 SSD/HDD 断电,它就会进入锁定状态(基于硬件的加密) 您无法访问驱动器的数据,驱动器上的所有分区甚至都不再可见。只有小的只读分区 (ShadowMBR) 可用。UEFI 固件从那个唯一可用的分区启动 UEFI 应用程序(UEFI 应用程序在初始化过程和取得 SED 所有权时写入该分区)。它安全地验证用户身份,如果凭据有效,它会解锁驱动器。驱动器解锁后,Shadow MBR 消失,驱动器上的所有分区都可用。然后应用程序链启动已安装的操作系统。

因此,如果您没有凭据,您甚至无法启动操作系统,也无法以任何方式访问驱动器上的数据。

于 2015-05-07T19:19:40.467 回答
5

这里有几个例子:

  1. https://github.com/NikolajSchlej/CrScreenshotDxe UEFI DXE 驱动程序从 GOP 兼容的图形控制台截取屏幕截图(是的,您可以制作 BIOS 的 PNG 屏幕截图并保存)

  2. http://ruexe.blogspot.com/ RU.EFI 是一个相当先进的 BIOS 调试工具

于 2016-01-04T07:50:38.833 回答
4

好吧,有操作系统加载器——更重量级的加载器(Windows、GRUB、BSD 加载器)和“呈现菜单”加载器(rEFInd、Gummiboot)。Shim 为 Linux 平台启用 UEFI 安全启动,它包含一个应用程序以及安装一个供其他应用程序使用的协议。

然后你有像 Linux 内核这样的东西,当使用 CONFIG_EFI_STUB 编译时,它会成为一个有效的 UEFI 应用程序,并具有引导自身的意识。

固件更新也可以作为 UEFI 应用程序提供。

UEFI shell 本身就是一个应用程序。

然后是工厂生产测试实用程序,开发诊断工具,......

于 2014-11-09T09:07:44.623 回答
2

Windows 7 - 8 有 UEFI 安装程序。我并不完全了解细节,但我很确定这个新环境比 DVD 上的传统引导环境为开发人员提供了更多的灵活性。

一些主板具有“即时启动”功能,可让您在几秒钟内进入桌面屏幕。这通常是一些 linux 的精简版,允许您访问网络浏览器并播放音乐/视频。华硕有这样的板子。

于 2014-11-09T07:44:41.173 回答