UEFI 是在 BIOS 上运行的吗?

UEFI 是在 BIOS 上运行的吗?

这一页:https://wiki.osdev.org/UEFI还有一些相当可信的说法,如果我没记错的话,UEFI 是一种在 BIOS(传统 BIOS)上运行的应用程序,而不是固件。还有一些人声称它们一起运行(BIOS + UEFI)。这与错误地将 UEFI 称为“UEFI BIOS”无关(这是另一回事,不是我的问题)。

但据我所知,BIOS 和 UEFI 是固件接口,可以互相替代。BIOS 是遗留的,而 UEFI 是更先进的现代替代品。

那么事实是怎样的呢?

答案1

您链接到的文章https://wiki.osdev.org/UEFI 使用其他人没有使用的奇怪术语。所以那篇文章说 BIOS 先运行,然后 UEFI 运行,但事实并非如此。

BIOS 一词有一个“口语”定义或用法,还有一个技术定义。

(该文章的术语不是上述任何一种,该文章的术语完全错误)

所以现在让我们暂时抛开那篇文章对 UEFI 和 BIOS 的奇怪定义,看看 UEFI 和 BIOS 的定义以及它们的用法。

BIOS 一词的口语定义或用法不仅仅是将 BIOS 称为 BIOS,而是将 UEFI 称为 BIOS。这可能是因为他们一般使用 BIOS 这一术语,或者他们可能只是将 UEFI 称为 BIOS,因为他们认为该术语对人们来说更为熟悉,因为 BIOS 已经存在很长时间了,对于最终用户甚至大多数计算机技术人员来说,它们看起来都一样。他们甚至可能说 UEFI BIOS,意思是 UEFI。这可能是因为他们一般使用 BIOS 并将 UEFI 视为一种 BIOS。或者他们这样说可能是因为有些人可能不知道 UEFI 是什么,而通过在它后面加上 BIOS 这个词,他们认为这会让人们对它更清楚,因为从最终用户和大多数计算机技术人员的角度来看,它们看起来都一样。例如,它们有一个配置页面,您可以选择启动顺序。

https://www.howtogeek.com/56958/htg-explains-how-uefi-will-replace-the-bios/ “即使您的电脑使用术语‘BIOS’,您今天购买的现代电脑几乎肯定附带有 UEFI 固件而不是 BIOS。”

因此,计算机有时会使用口语定义,例如,它说按 F2/Escape/F10/任意键进入 BIOS。或者说按任意键进入设置,然后它说“BIOS 版本 ..”。实际上,从技术上讲,它不是 BIOS,而是 UEFI。

在计算机开机时,在处理器执行任何操作之前,会发生一些事情。即在它运行“重置向量”中的固件之前,也就是在任何 BIOS 或 UEFI 之前。以下是当时发生的事情的一些描述,http://www.drdobbs.com/parallel/booting-an-intel-architecture-system-par/232300699?pgno=1.(文章后面也继续讲)。有一种可编程的 CPLD,它运行软件,即固件。这非常晦涩难懂。人们说主板固件时几乎从来不是指这个。该固件调节电源和时钟,然后让 CPU 重置并启动。

我认为 BIOS 这个词永远不会适用于那么早的任何东西!UEFI 也不会。因此,当像维基百科这样的来源在其关于 BIOS 的文章中说 BIOS 是“开机时运行的第一个软件”时,这在技术上是不正确的,原因有二。A) 因为即使系统运行的是 BIOS 而不是 UEFI,BIOS 仍然不会是第一个运行的东西。B) 如果系统运行的是 UEFI,就不会运行任何 BIOS!

当 CPU 开始其获取解码执行周期时,它从称为重置向量的一部分内存开始 - 该向量具有或指向 BIOS 或 UEFI。

一些可能较旧的资料可能提到 UEFI BIOS 是指 UEFI。例如,2013 年撰写的这个资料https://www.alphr.com/features/381565/uefi-bios-explained 提到了 UEFI BIOS,但正确地指出它没有那么有意义,而属于 UEFI 术语,这就是 UEFI BIOS 的意思。我提到的 2011 年 Dr Dobbs 链接也使用短语“UEFI BIOS”来表示 UEFI。您的来源使用术语更奇怪。

BIOS 的口语定义(作为一个通用术语)可能相当古老且过时。

如果想要一个 UEFI 和 BIOS 的通用术语,那么“由 CPU 运行的主板固件”就很合适。

技术定义/用法,以及真正的当前定义/用法是 UEFI 取代 BIOS。

看看那篇文章和它独特的奇怪的错误术语

您链接到的 osdev 文章使用了只有它才使用的陌生术语!它似乎将 BIOS 或 UEFI 的初始部分称为 BIOS,而 BIOS 是它们的共同点。因此,如果您有 UEFI,您可能会认为它在 BIOS 之上运行!我认为除了那篇文章之外,没有人以这种方式定义 BIOS 或以这种方式使用术语 BIOS!

以下是你链接的文章中一段非常具有误导性的奇怪段落

一个常见的误解是 UEFI 是 BIOS 的替代品。实际上,传统主板和基于 UEFI 的主板都带有 BIOS ROM,其中包含执行系统初始开机配置的固件,然后将一些第三方代码加载到内存中并跳转到该代码。传统 BIOS 固件和 UEFI BIOS 固件之间的区别在于它们在哪里找到该代码、它们在跳转到该代码之前如何准备系统,以及它们为代码在运行时调用提供了哪些便利函数。

因此,它似乎是指 BIOS 或 UEFI 的初始部分,它们共享 BIOS,如上所述。这是非常不寻常的术语,没有其他来源这样做。

有时,当人们用这个/那个词来指代实际功能时,他们可能会对术语有点草率,尽管这篇文章在其奇怪的用法上是相当教条的。

UEFI 取代 BIOS 并不是一个“误解”,而是事实。

而 UEFI BIOS 这个术语确实不太清楚,最好避免使用。

顺便说一句,存储 UEFI 的闪存是 EEPROM 内存,也就是 ROM 内存。与非 EEPROM 的旧 ROM 内存相比,它更容易写入。(某些来源,甚至维基百科关于 BIOS 的文章,都让闪存听起来与 ROM 内存截然不同

osdev.org 文章中对 BIOS 和 UEFI 的奇怪用法可能不值得过多考虑。但在与一些操作系统开发人员交谈后,许多人更多地关注 UEFI 和 BIOS 提供的 API,而不是幕后发生的事情,毫无疑问,操作系统开发人员往往更关心操作系统的开发,而不是 BIOS 和 UEFI 的技术细节。

为了证明该文章中 CPU 在 UEFI 之前运行某些固件的说法,有人声称“CPU 以 16 位模式启动。UEFI 以 32 位或 64 位模式运行。所以必须先有一些东西到达那里。”(他们可能会引用维基百科关于 BIOS 的文章的第一段,并说是 BIOS 首先运行)。但这种说法是错误的。人们可以指出 UEFI 从 16 位开始。

您链接的文章试图暗示在 UEFI 之前有一个部分。其实没有。即使是最开始的 16 位部分也是 UEFI 的一部分。我和一位技术专家聊过,他知道很多,他指点了我https://github.com/tianocore/edk2/tree/master/UefiCpuPkg/ResetVector/Vtf0 作为证据,并表示这是来自 EFI 代码库,并且是启动过程非常早期的 16 位部分的代码。我相信他是对的,因为这与任何正常(正确!)使用这些术语是一致的!

从技术上讲,UEFI 规范的某些部分被纳入称为 UEFI-PI 规范或 PI 规范的规范,但 UEFI 规范的任何实现都实现了 PI 规范。https://www.insyde.com/press_news/blog/uefi-pi-13-review-part-1-i2c-bus-protocol PI 规范包含 UEFI 的所有阶段https://github.com/tianocore/tianocore.github.io/wiki/PI-Boot-Flow。当人们提到 UEFI 时,他们往往会包括 UEFI 规范和 PI 规范中的任何内容。

BIOS 或 UEFI 从称为“重置向量”的内存部分开始。

UEFI(迄今为止)支持传统 BIOS 模式

UEFI 能够模拟 EFI 之前(即“传统 BIOS”时代)固件的状态。这是为了那些不能在普通 UEFI 上运行的操作系统。这是一种模式。它被称为带有 CSM(兼容性支持模块)的 UEFI。当 UEFI 使用该模式模拟传统 BIOS 时。

这种模式可能会在某个时候逐步淘汰,例如到 2020 年。https://arstechnica.com/gadgets/2017/11/intel-to-kill-off-the-last-vestiges-of-the-ancient-pc-bios-by-2020/

现在来回答你的问题,引用你的话

这一页:https://wiki.osdev.org/UEFI还有一些相当值得称赞的

你说的“可信”是指“权威”,而该页面并不是那么权威,因为操作系统开发人员通常不太关心 UEFI 和 BIOS 的细节,只关心他们为操作系统提供的 API。他们的兴趣在于操作系统开发。

[该页面] 提到 UEFI 是一种在 BIOS(传统 BIOS)上运行的应用程序

根据该页面使用的术语,是的,尽管它可能不会将 BIOS 在该上下文中称为遗留。

该页面一般使用术语 BIOS。因此它指的是 UEFI BIOS。

而且它使用术语 BIOS(而非 UEFI),表示一开始运行的固件方面现在与当时相同。(不同的术语会将该部分视为 UEFI)。我不会太认真对待它。

UEFI 是固件。与传统 BIOS 一样。

如果我没记错的话,[UEFI] 不是一个固件。

不。

传统 BIOS 是/曾经是固件。但十多年来一直没有使用过。

UEFI 是一种固件。

两者都是。

其他一些人声称它们只是一起运行(BIOS + UEFI)。

不。有这样的术语:BIOS 是通用术语(即不是专门指传统 BIOS)。而 UEFI 是特定的。

还有“传统 BIOS 模式”,它位于 UEFI 内。(请注意“模式”一词。传统 BIOS 与传统 BIOS 模式不同)。传统 BIOS(不带模式一词)是 BIOS,而不是 UEFI。

这与错误地将 UEFI 称为“UEFI BIOS”无关(这是另一回事,不是我的问题)。

这是该文章中使用的术语,并且有一定的依据,例如,维基百科上关于 BIOS 的文章在一般意义上使用了术语 BIOS,尽管它说 UEFI 是 BIOS 的后继者。但术语 UEFI 并没有回溯到几年前。而该维基百科文章中给出的 BIOS 定义可以向前或向后追溯,因为它在那里被定义为计算机启动时运行的固件(即 CPU 启动时)。所以按照这个逻辑,可以说 UEFI BIOS。尽管如此,正如同一个 BIOS 维基百科页面所说,UEFI 是“后继者”。

但是,正如前面提到的,没有必要使用“UEFI BIOS”这个术语。而且这个术语不是很明确。也许 UEFI BIOS 这个术语有时被用来向人们表明 UEFI 所做的事情。因为他们觉得 BIOS 这个术语根深蒂固。你可以说“主板固件”是一个通用术语。

无论什么线路/电子设备甚至固件,让 CPU 进入重置向量都不是 BIOS 或 UEFI。https://stackoverflow.com/questions/22312428/what-memory-is-used-for-storing-the-reset-vector

但据我所知,BIOS 和 UEFI 是固件接口,可以互相替代。BIOS 是遗留的,而 UEFI 是更先进的现代替代品。

是的,这是正常用语

(固件,而不是固件接口!)。

并且它们为操作系统提供了接口/API。

那么事实是怎样的呢?

那.. ^ 我所做的研究表明,提问者帖子中链接的文章确实是错误的。UEFI 确实取代了 BIOS。计算机要么运行 UEFI,要么如果它非常旧,则运行 BIOS。有时,BIOS 这个术语在口语中用于配置屏幕,但它是 UEFI 的一部分,技术人员经常会跳出来纠正说 UEFI 而不是 BIOS。有些人可能会将 BIOS 这个术语用于引导加载程序之前由 CPU 运行的任何东西,即使它是 UEFI,但这是一种口语,有点不确定,最好在它是 UEFI 时说 UEFI。并且说运行 UEFI 的计算机也会运行并从 BIOS 启动,就像那篇文章所说的那样,这是完全错误的。那篇文章的作者可能没有意识到 UEFI 甚至包括在引导开始时运行的 16 位部分。

答案2

是的,UEFI 旨在取代其传统 BIOS 对应物。您只需了解一些事情即可确认这一点。我列出了一些要点以及参考资料和相关事实的片段。

  1. UEFI 到底是什么
  2. UEFI 演变的驱动因素

1. UEFI 到底是什么

UEFI 是计算机固件由英特尔开发并发布. 与大多数 BIOS 固件不同,UEFI 固件可以在不在IBM PC兼容级

笔记:配备 UEFI 的较新 PC 仍将其称为“BIOS”,以避免让习惯使用传统 PC BIOS 的人感到困惑。即使您的 PC 使用术语“BIOS”,您今天购买的现代 PC 几乎肯定会配备 UEFI 固件而不是 BIOS。

来源

可扩展固件

UEFI 是 BIOS 等固件的扩展,但(1)它不仅可以从磁盘启动,还可以从磁盘分区中的条目读取,(2) 还可以从特定磁盘上特定位置的特定引导加载程序启动。

UEFI 执行的引导加载程序兼容性

UEFI 规格定义可执行格式,要求所有 UEFI 固件都能够执行该格式的代码。当为原生 UEFI 编写引导加载程序时,它会以这种格式编写。

向后兼容

为了向后兼容,大多数 UEFI 固件可以像 BIOS 固件一样启动系统,并查找 MBR 并从那里运行引导加载程序。根据固件的不同,这可能被称为BIOS 传统模式BIOS 兼容模式或其他类似术语。

笔记:UEFI 旨在取代所有 IBM PC 兼容个人计算机中存在的基本输入/输出系统 (BIOS) 固件接口。实际上,大多数 UEFI 映像都为 BIOS 服务提供旧版支持。

来源


2. UEFI 演进的驱动因素

笔记: 这里有一些资源,可以帮助澄清和确认主要计算机制造商共同同意使用和开发的作为他们所影响的市场份额的行业标准。

我认为当大多数主要的计算机制造商都加入进来并同意使用下一代技术来取代过时且不足的技术(该技术无法随着技术的变化和改进而满足配置需求)时,就可以安全地“假设” BIOS 是遗留的并且是一种过时的技术,而无需大量额外的研究和分析。

  1. 我鼓励你读一下澄清有关 UEFI 的十大最常见误解从头到尾阅读文档,因为它涉及很多可能有帮助的澄清事实。

    统一可扩展固件接口 (UEFI) 论坛是一个世界级的非营利行业标准机构,通过合作推动平台技术的发展。该论坛通过行业协作和倡导标准化接口来推动固件创新,该接口可简化和保护平台初始化和固件引导操作。这两个论坛均由来自超过250 家行业领先的技术公司,UEFI 规范促进业务和技术效率,提高性能和安全性,促进设备、平台和系统之间的互操作性并遵守下一代技术。

    来源

  2. 以下是微软在一篇文章中对 UEFI 的评论,其中也将 BIOS 称为“遗留”...

    当设备启动时,固件接口控制PC的启动过程,然后将控制权传递给Windows或其他操作系统。UEFI 是旧版 BIOS 固件接口的替代品以及可扩展固件接口 (EFI) 1.10 规范。超过 140 家领先的技术公司参与了统一 EFI 论坛,其中包括 AMD、AMI、Apple、Dell、HP、IBM、Insyde、Intel、联想、Microsoft 和 Phoenix Technologies。

    来源

  3. 我认为在某些情况下认识到这些观点也很重要

    • 统一可扩展固件接口论坛或 UEFI 论坛是几家领先科技公司之间的联盟,使启动过程现代化董事会包括十三家“发起人”公司的代表:AMD、American Megatrends、ARM、Apple、Dell、Hewlett Packard Enterprise、HP Inc.、IBM、Insyde Software、Intel、Lenovo、Microsoft 和 Phoenix Technologies。

      来源

    • 统一可扩展固件接口 (UEFI) 是一种定义操作系统与平台固件之间的软件接口的规范。UEFI 取代基本输入/输出系统 (BIOS) 固件接口最初存在于所有 IBM PC 兼容个人计算机中,[1][2] 大多数 UEFI 固件实现都提供对 BIOS 服务的传统支持。即使没有安装操作系统,UEFI 也可以支持计算机的远程诊断和修复。

      来源

答案3

我不是专家,但我确实经常与他们合作。据我所知,与更现代的 UEFI 相比,老式 BIOS 是一个完全不同的环境,而且 UEFI 不需要任何底层 BIOS 即可运行。可以说,它是一站式服务。本质上,它利用了比传统 Legacy 系统更多的板载内存来支持精美的 GUI,并且还具有许多功能,它使用这些功能来执行诸如加快启动时间之类的操作,通过使用并行启动技术以及使恢复变砖的主板更顺畅(甚至非常简单)的工具,这只是其中的一些好处。但是 TLDR 版本,不,UEFI 不在旧的传统 BIOS 上运行。

答案4

@barlop 所以 UEFI 有 2 个组件 - 一个位于 EEPROM 中最初运行的 16 位部分,然后是一个位于硬盘上的较大的 .EFI 文件?对吗?

相关内容