【问题标题】:UEFI runtime service next to OS操作系统旁边的 UEFI 运行时服务
【发布时间】:2013-06-20 07:30:34
【问题描述】:

我有在操作系统旁边运行一个小服务的想法,但我不确定这是否可能。我试图通过阅读一些文档来解决这个问题,但没有走多远,所以我的问题来了。

我了解了 UEFI 运行时服务。
是否有可能在固件中包含一个小模块,该模块在所使用的操作系统旁边运行,并将有关设备位置的信息发送到互联网上的地址?

据我所知,一旦 UEFI 将控制权移交给操作系统内核,就不可能在后台运行某些东西。

为了澄清我的意图,我想在我的笔记本电脑上放一些类似的东西。有 Prey 项目,但它安装在操作系统中。我正在使用没有自动登录的 Linux 发行版。如果有人窃取它,他们可能只会安装 Windows。

【问题讨论】:

    标签: efi uefi


    【解决方案1】:

    据我所知,一旦 UEFI 将控制权移交给操作系统内核,就不可能在后台运行某些东西。

    我同意。当然,引导环境(ExitBootServices()之前只使用单线程模型。

    据我所知,UEFI 规范中没有线程的概念。此外,每个运行时服务都是操作系统故意调用的,就像操作系统为应用程序提供系统调用一样。输入运行时系统函数后,请注意 7.1 中的以下限制:

    禁止调用者使用来自其他处理器或同一处理器的某些其他服务 处理器遵循表 30 中指定的中断。

    取决于您的运行时服务需要访问 UEFI 固件的哪些部分,这取决于您的呼叫忙时哪些固件功能是不可重入的。

    也就是说,即使您准备牺牲一个线程以永久位于 EFI 运行时服务中,您也可以阻止整个内核的其余部分使用其他运行时服务。

    不幸的是,我不认为这是可能的,但有趣的问题都是一样的!

    【讨论】:

      【解决方案2】:

      禁止您做任何事情,因为那将成为病毒、记录器和其他恶意软件的门户。

      也就是说,如果您想让一些代码在操作系统之外运行,您应该查看系统管理模式 (SMM)。

      SMM 是与标准保护模式正交的 x86 处理器的执行模式。 SMM 允许 BIOS 一次完全挂起所有 CPU 上的操作系统,并进入 SMM 模式以执行一些 BIOS 服务。切换到 SMM 模式现在发生在您的 x86 机器上,因为您正在阅读此 Stackoverflow 答案。它由以下任一方式触发:

      • 硬件:专用的系统管理中断线 (SMI#),与 IRQ 的工作方式非常相似,
      • 软件:通过 I/O 访问主板逻辑认为特殊的位置(端口 0xb2 很常见)。

      SMM 服务称为 SMM 处理程序,例如传感器值通常通过 SMM 调用 SMM 处理程序来检索。

      SMM 处理程序在 UEFI 固件初始化到 SMRAM 的 DXE 阶段设置,SMRAM 是专用于 SMM 处理程序的区域。见下图:

      SMM 驱动程序在 DXE 阶段由 SMM 核心调度。所以 额外的 SMI 处理程序可以在 DXE 阶段注册。迟到 在 DXE 阶段,当没有更多的 SMM 驱动程序可以调度时,SMRAM 将 被锁定(作为推荐的做法)。一旦 SMRAM 被锁定, 不能分派额外的 SMM 驱动程序,因此不会分派额外的 SMI 处理程序可以注册。例如,注册的 SMM 驱动程序 SMI 处理程序无法从 EFI Shell 加载或添加为 UEFI 引导管理器中的 DriverOption。

      source: tianocore

      这意味着您的 SMM 处理程序的代码必须存在于 BIOS 映像中,这意味着使用添加的处理程序重新构建 BIOS。这很棘手,但存在提供 DXE 环境并将 SMM 处理程序代码构建到 PE 可执行文件中的工具,以及将 DXE 驱动程序添加到现有 BIOS 映像的其他工具。但并非所有 BIOS 制造商都受支持。除非您的 Flash 芯片在插槽中并且您可以在外部对其进行重新编程,否则这是有风险的。

      但首先要检查 SMRAM 是否已锁定在您的系统上。如果幸运的话,您可以直接在 SMRAM 中添加您自己的 SMM 处理程序。这很巧妙但可行。

      注意:BIOS 中的 SMM 处理程序独立于操作系统,因此即使强盗安装了您想要的新操作系统,它也会运行。然而,在操作系统之外有很大的缺点:您需要在 SMM 处理程序中嵌入网络接口的驱动程序(仅轮询、无中断的驱动程序!)和 wlan 802.11、DHCP 和 IP 支持以连接到Wifi 并将您的数据路由到 Internet 上的外部主机。您将如何确定 wifi SSID 和密码?好吧,您可以等待操作系统为您初始化网络适配器,但您需要在调用之间保存/恢复网络主机控制器的完整状态。不是一个小项目或简单的项目。

      【讨论】:

      • 非常感谢!经过这么多年,终于解决了我的“问题”。
      猜你喜欢
      • 1970-01-01
      • 2012-10-07
      • 2016-08-27
      • 2021-03-23
      • 1970-01-01
      • 2017-02-09
      • 2010-10-18
      • 2013-10-21
      • 1970-01-01
      相关资源
      最近更新 更多