回答

回答

如何检查 (U)EFI修订我的笔记本电脑(或规格版本)

注意:我不是指笔记本电脑/主板制造商提供的 EFI/BIOS 版本

答案1

前言

我看到(并且很欣赏!)您试图尽可能准确地描述您在问题中使用的语言,特别是因为UEFI1 规格以及之前的那些电喷²就其本质而言,它们既复杂又有些令人困惑。

为了尽可能消除混淆,我首先要提醒大家注意一些事件和文档,这些事件和文档标志着原始 EFI 平台(由 Intel 单独开发和推广,其版本号均以“1”开头)及其版本之间的界限。 UEFI 的后继者是 UEFI,它是与英特尔一起的更大的利益相关者群体的工作,并被组织为 UEFI 论坛(其工作通过以“2”开头的版本号来区分)。这些是UEFI论坛正式成立2005年7月25日随后他们出版了第一个UEFI 规范 (v2.00)2006 年1 月 31。原始 UEFI 规范的基础。是英特尔的最终EFI 规范,v1.10从2002年12月1起。

回答

要获得有关设备 UEFI 固件的特定版本的“根据 Hoyle”的明确信息,理想的场所需要将其引导到 UEFI shell,然后只需发出ver带有-terse选项的命令。这可以方便地输出固件的明确 UEFI 版本,排除ver单独使用该命令生成的所有其他上下文元素,这些元素可能会造成混淆。以下是来自我的一台设备的输出示例,该输出始终位于初始命令提示符之前,以及调用命令时的预期结果ver -terse

  UEFI Interactive Shell v2.0
  Build 8192. Copyright 2008 by Intel(R) Corporation.
  UEFI v2.10 Firmware (Phoenix Technologies Ltd., 0x01014318)

Shell> ver -terse
  2.10

ver同样,您可以通过使用带有选项的命令-s(这也意味着)来了解 shell 二进制文件的版本-terse,因为两者是不同的,并且 shell 版本不需要匹配,甚至不需要等于或大于固件版本它继续运行。许多早期的 shell 都存在向后兼容性,可以在更高版本的固件上运行,尽管具有可用功能的子集,并且需要注意的是,EFI 时代的早期 shell 很少在 UEFI 设备上成功执行。

Shell> ver -s
  2.00

您可能已经注意到,这两个值都是 shell 初始化输出的一部分,事实上这是设计使然,UEFI shellver在启动时会自动打印命令的完整“详细”输出。极有可能您根本不需要发出任何命令,而是启动到 shell,读取该输出,然后重新启动即可使用它。首届UEFI Shell 规范 v2.0为命令输出的信息布局引入了这个标题ver,并且在 15 年后撰写本文时它保持不变:

UEFI <support-level> Shell v%uefishellversion%
<shell-supplier-specific-data>
UEFI v%uefiversion% (<fw-vendor>, 0x<fw-vendor-ver as 32b hex value> <opt. add'l. info>)

正如您所看到的,shell 版本应该是第一行的最后一个数据,固件版本应该是在显示第一个 shell 提示符之前打印的第三行和最后一行的第二个数据。此外,上述标题中的变量名称是任何 UEFI 实例中存在的标准化只读环境变量,并且也可以像在大多数其他 shell 中一样进行引用。这将是检索版本信息的另一种方法,甚至可能是您设置为在启动时自动运行的脚本的基础,作为完全绕过 UEFI shell 需求的方法:

fs0:\> echo %uefiversion%
  2.10

fs0:\> echo %uefishellversion%
  2.00

采购可启动的 UEFI Shell

我可以就此打住,但鉴于很少有供应商在大多数广泛使用的系统中提供对 UEFI shell 的轻松访问,让我们回顾一下创建包含 UEFI shell 的可启动存储介质的基础知识。然后,您可以通过从一次性启动菜单中选择所述存储设备来使用它,大多数固件在系统首次开机后几秒钟内可用(通常通过在这几秒钟内按下其中一个高编号功能键来访问,例如F10,F11F12,尽管我也看到它映射到Esc, 甚至F2偶尔)。

当然,如果您愿意,您可以对手动保存 shell 二进制文件的设备进行分区和格式化,但对于那些希望使用软件实用程序来处理该部分的人,我有一些建议。

安装工具并准备好空或可擦除存储设备后,您将需要 UEFI Shell 的副本供其使用。一些选项是:

  • UEFI Shell ISO 映像
    • Rufus 实用程序的开发人员使用 UEFI Shell 为最常见的架构生成非常可靠的 ISO 映像,所有这些映像都在一个 ISO 中,可以使用上述任何工具进行闪存或刻录。这是最容易使用的来源,推荐给所有人。
  • TianoCore EDK2 稳定版
    • 这是大多数通用 UEFI 固件开发发生的官方开源项目,并且他们定期使用预构建的二进制文件标记稳定版本。该ShellBinPkg.zip文件具有完整的 UEFI Shell 以及针对各种架构构建的最小实现。推荐给高级用户。
  • OpenCore 引导加载程序
    • 这是一个开源引导加载程序,其中包括 UEFI Shell 以及用于与各种固件交互的各种其他实用程序。它可以<arch>\EFI\OC\Tools\OpenShell.efi在可下载的发行档案中找到。

根据您使用的是 ISO 还是裸.efi二进制可执行文件,您可以将 ISO 提供给实用程序软件作为存储介质的预期内容,或者使用该实用程序创建一个空的可启动设备,然后复制该.efi文件到EFI它在设备 EFI 系统分区的文件系统中创建的文件夹。最后,将可启动介质连接到系统后,触发重新启动并进入一次性启动菜单,选择带有 shell 的设备,您应该会直接进入 shell,完成命令提示符,并准备好获取你的问题的答案。


术语表和脚注

^统一 可扩展的F固件接口

²可扩展的F固件接口

立方关于向后兼容性的说明:之所以特别提到这一点,是因为通常需要从第三方获取 UEFI shell 可执行文件,因为许多制造商在其固件包或支持网站上不包含 UEFI shell 可执行文件,或者如果包含,则很难公开下载并使用。如果您发现自己需要这样做,您可以将搜索要启动的 shell 主要集中在从值得信赖的来源找到一个 shell,而不是找到一个与您的固件的老式/预期版本完全匹配的 shell。事实上,对于上面显示的所有示例输出,您可以看到(故意)相当旧的 shell(编译于 2008 年,就在 UEFI v2.00 最终修订版发布之后)正在 c 制造的较新设备上运行。 2022 年采用 UEFI v2.10 固件。虽然我在答案的末尾提供了一些 shell 来源的链接,被认为值得信赖并且在撰写本文时可用,但不应假定它们将保持可用状态,也不应假定我对主题的理解会延续到安全问题;我强烈鼓励读者在此类情况下进行自己的尽职调查。

相关内容