哪个程序首先运行?是 Boot Loader 还是 Boot Manager?

哪个程序首先运行?是 Boot Loader 还是 Boot Manager?

我在网上读过很多关于 Boot Loader 和 Boot Manager 的文章。根据这些知识,我得出的结论是:

启动管理器是一个决定机器要加载什么操作系统的程序。它是操作系统和固件之间的接口。

引导加载程序是实际将操作系统内核加载到系统主内存中的程序。

因此从技术上讲,引导管理器应该在引导加载程序之前运行,因为它决定要加载的操作系统。

但当我遇到站点上,它说 Boot Loader 是第一个加载的。

有人能解决我的困惑吗?或者上述网站提到的内容只针对特定平台?

答案1

您引用的该网页的第一行是:

引导加载程序

引导加载程序演示了如何从一个程序跳转到另一个程序的起始处。

出自:设计师指南Cortex-m处理器系列,2013 年

您引用的文章旨在描述 Cortex-M 处理器,它通常集成到“微控制器”中,而不是描述 PC。

Cortex-M 处理器旨在用于嵌入式系统,这些系统比使用 Cortex-A(具有用于虚拟内存的 MMU)的 PC 或系统要简单得多。典型的 Cortex-M 嵌入式系统可以简单地使用微内核和专用应用程序;没有操作系统或“启动管理器“。Cortex-M 嵌入式系统可以使用 XIP(就地执行)闪存,甚至不需要启动程序将任何东西加载到内存中!

底线:您引用了不恰当的参考文献。


您对“启动管理器“ 作为 ”决定机器要加载什么操作系统的程序“通常是安装在指定为启动驱动器(在 PC BIOS 中?)的大容量存储设备(例如 HDD 或 SSD)上的程序。此类程序只有在引导加载程序将其复制到“启动管理器”程序进入主内存以便可以执行。

请注意,计算机系统通常采用多阶段启动顺序。换句话说,不只有一个“引导加载程序“,而是一系列的引导程序。引导程序可以完全静默执行(即不显示任何控制台消息),也可以显示用户界面,例如 U-Boot 的命令行或“启动管理器“ 菜单。

答案2

对于学生来说... 恶意问题 恶意回答

我不想承受坏消息,但这个问题似乎“有点不对劲”,或者完全无稽之谈相反,至少没有适当的语境

上下文是,正如其他答案中已经问到的那样,您询问的是什么 CPU、什么样的机器架构和什么样的平台?

如果你问的是一般性问题,那么答案是:只有固件是第一个运行的程序,就是这样!案件已结案。

您的问题在于,计算机引导过程非常复杂,很大程度上取决于硬件、固件和系统布局。这些布局可能千差万别,在不同的平台、架构甚至同一平台的两个主板之间几乎完全不同。

正如他们所说 - 魔鬼就藏在细节中。


一般答案

从技术上讲,所有 CPU 都具有硬编码地址,当它们的复位引脚被触发或者启动时,它们每次都会跳转到该地址 - 这就是全部内容。

最初,该地址上什么也没有,只有零。我认为大多数 CPU 在这种情况下都会进入重置循环,或者最终出现三重故障(或其他情况)。

在古老的计算机上,牵牛星和类似地,您可以使用前面板上的开关和闪烁灯来控制 CPU(并通过它来控制内存),虽然非常粗糙,但这种机制实际上允许您在那个 RESET 地址上“输入”一个“程序”(以实际位的形式,通过小的开/关开关)。

这就是你输入非常基本的“加载器”的方式:一个程序,只有几条指令。这个“手动输入”代码基本上是一个非常简单的循环,它会从电传打字机纸带中加载确定数量的字节(字母)作为程序代码并跳转到它的开头。这个起始磁带块实际上会包含另一个“程序”,一个更复杂的程序,它会从纸带中加载其余的有效载荷代码并再次跳转到它的开头,这将是真正为计算机供电的代码。例如,在 Altair 的情况下,这个代码通常是一个 BASIC 解释器。

因此,您使用开关将 CPU 置于特殊输入模式,然后通过连续来回拨动面板上的数十个其他开关(大约几分钟),输入原始的第一个加载循环程序。您将磁带装入电传打字机并重置 CPU - 如果您做对了一切,电传打字机将开始搅动磁带并加载有效载荷。几十分钟后,您将看到命令提示符。

在现代平台上,CPU 和内存电路的设置方式是,固件 ROM 芯片映射到该 CPU 的“重置”地址。存储在那里的任何代码都可以被视为“固件”,并且每次 CPU 重置时都会自动执行。


IBM PC的启动过程

如果您询问的是原始 IBM PC:RESET 内存区域就是所谓的 BIOS 所在的位置。这种内存映射通常以一种特殊的方式设置,但这些是实现细节。

BIOS 代码应该初始化机器的其余部分:主要是内存控制器、输入/输出系统(串行线、并行线、键盘)、图形系统以及最重要的磁盘控制器。

当时 BIOS ROM 内存确实非常紧张,因此一旦设置了所有列出的内容,就没有太多空间容纳其他内容了,BIOS 只需加载第一张软盘(或稍后是第一个硬盘)的第一个扇区并直接跳转到开始,盲目...就是这样。

当时最常用的操作系统 MS-DOS 要求在其中设置分区表,因此 BIOS 和操作系统之间存在轻微的利益冲突。因此,那个时代的所有引导扇区都与所谓的“加载程序”代码共享其大小的一部分,其余部分则保留给实际分区数据。一段时间后,这个第 0 个扇区有了特殊名称:MBR - 主引导记录。

不幸的是,BIOS 实际上只加载了磁盘上的单个扇区(第一个/第零个扇区),因此这个通常称为“stage1”的代码不足以加载操作系统的其余部分。如果我们减去对分区表数据的需求,那么在那个时代的历史 512 字节扇区中,大约只有 ~450-220 字节的空间用于加载代码。

这个大小根本不足以实现 FAT 表解析器、加载根目录并在那里定位实际的 DOS 内核。因此,此代码通常只涉及加载 MBR 之后的其余扇区,通常称为第一个“轨道”。这是 MBR 之后但在第一个分区开始之前存在于“未说明的中间空间”中的代码。这是实际的内核“定位器”/加载器代码。它必须实现分区数据解析、活动分区标识符、FAT 解析器和 FAT 文件加载器。然后它定位 IO.SYS(DOS 全驱动程序“包”),然后加载其余的 DOS 内核(MSDOS.SYS 或其他)。

我希望您已经发现了它与 Altair 磁带的类似之处。


出现 Wild Boot Manager

随着操作系统变得越来越复杂,中间的“加载器磁盘区域”变得太小,无法容纳加载操作系统本身的所有代码。我猜这就是 IBM PC 中启动管理器引导加载程序得到了介绍。

在IBM PC上启动管理器曾经是一个小型的、无文件的程序,您可以安装到磁盘的“中间”区域,这样您就可以通过“操作系统选择菜单”推迟加载过程。

更著名的一个Ranish 分区管理器,但还有更多。


“引导程序”革命

正如我们所说,在某个时间点(大约 2000 年),存储空间成为了一个问题(因为 MBR 和分区扇区之间的大小不足以支持更高级的功能),所以这导致了一个狂野西部时代,其中所有的“引导加载程序“停下来以适应“中间空间”。

因此,大多数引导加载程序都分为 3 个阶段:MBR 为第 1 阶段,中间空间部分为第 2 阶段,基于文件系统的部分为第 3 阶段。(请注意,这些是真实的我发明的阶段,而不是引导加载程序编写者自己提到的“行业”阶段 - 在他们眼中“我的”第 3 阶段是“他们的”第 2 阶段 - 事实上,任何引导系统都会有与完全引导任何操作系统所需的一样多的引导阶段)。

我的第三阶段是什么意思?这意味着引导加载程序现在变得如此之大,以至于将它们保存在“无文件”磁盘区域中是没有意义的。仍然需要无文件磁盘区域之间的代码,但它更多地扮演着旧 MS-DOS IO.SYS(多驱动程序包文件)的角色 - 磁盘和核心文件系统驱动程序的角色 - 用于将实际引导加载程序加载为文件。是的,如果你认为这个设计很有趣 - 它确实很有趣。

因此,这些新的引导加载程序都增加了一个核心文件系统驱动程序(通常它们都始终了解至少一个主文件系统(通常是 FAT 文件系统)),并且现在知道如何从“引导加载程序分区”本身加载引导加载程序的其余部分作为文件。感到困惑吗?是的 - 我知道。

到那时,您可以将引导加载程序本身视为一种“微操作系统”,其复杂程度大致介于 MS-DOS 和 Win 9x 之间。

这个时代的主要引导加载程序是(按“迟钝程度”从不太迟钝到较迟钝排序):

做好准备,因为从现在开始事情只会变得更加混乱。


每个人都和每个人一起启动

是什么变化导致了这个基于文件系统的引导加载程序开发?

嗯,计算机和操作系统变得更加复杂。

引导加载程序现在需要了解更多的文件系统,并且许多操作系统内核比 64 千字节大得多,并且是模块化和统一的。

因此,引导加载程序的文件系统驱动程序变得更加复杂:它必须能够加载多兆字节的内核文件及其模块,所有这些都可以使用托管存储文件系统的所有功能 - 即,它可能是一个非常大的分区上的非常大的文件(几 TB 大),并且这个内核文件可能例如严重碎片化(等等)。

换句话说:现在引导加载程序文件系统驱动程序不仅需要能够解析简单的 FAT(或 ETX2)根目录结构,它还必须能够遍历所有内核文件碎片(可能有数千个),这些碎片可能分散(由于文件系统碎片)数 TB 并将它们组装成计算机内存中的单个 OS 内核块。它不再是一个简单的“婴儿”文件系统驱动程序。它不必像“真正的”OS 文件系统驱动程序那样复杂(因为引导加载程序只读取文件),但它不再简单了。

因此,现在不可能将所有加载程序功能都包含在单个巨型加载程序二进制文件中,该二进制文件将适合磁盘起始和第一个分区数据之​​间的一个“轨道”。磁盘甚至不再有轨道(在传统的磁盘轨道意义上)。

因此,将引导加载程序拆分成更小的块(即所谓的文件)更有意义:核心程序部分和“插件”部分(所谓的模块,或用普通操作系统的话来说:DLL),并将它们存储在某个地方。还有什么比将文件存储在文件系统分区中更好的方法呢?而且我们可以重用用于加载内核的驱动程序来加载引导加载程序及其部分本身。

大多数加载器现在至少可以“谈论”几个文件系统(无序):

  • SYSLINUX:EXT2、FAT、ISO
  • Windows 加载程序:FAT、NTFS
  • GRUB:EXT2、FAT、BTRFS、ZFS

因此,加载程序现在本身就有 dll(和驱动程序)。我们还可以用这种模块化来做什么?

GRUB 现在可以配置串行线路(例如对于无 GPU 的计算机)。

现在,几乎所有这些引导加载程序都可以绘制无用的漂亮图片(所谓的加载屏幕)供普通用户查看,而在启动时,除了显示动画之外,没有任何有用的功能。为什么要这么傲慢?您必须明白:如果您想要图片,您需要图形编程 - 这是“普通”编程的特殊子类。您需要图形例程,但这还不够。您需要帧缓冲区驱动程序、图形硬件驱动程序等。我希望您开始明白这一点。因此,这些图形堆栈部分都是引导加载程序分区内的特殊 dll 和驱动程序。

几乎所有这些引导加载程序现在都可以加载所谓的多重引导内核。目前几乎所有操作系统的内核都是如此(但不确定微软的产品是否如此)。

重点是,任何符合 MULTIBOOT 的引导加载程序都可以加载任何符合 MULTIBOOT 的内核(任何操作系统的)。

而且,兼容 MULTIBOOT 的引导加载程序本身也兼容 MULTIBOOT,因此您可以毫不费力地创建引导加载程序“链”,即:SYSLINUX 引导加载程序加载 GRUB 引导加载程序加载 Windows 引导加载程序。

这可能看起来有点傻,但实际上这是一个非常有用的功能,可以用来制作无数的救援 CD 和网络启动设置。

接下来,所有这些引导加载程序现在都有启动菜单 dll 模块,像其他任何东西一样从引导加载程序分区加载和配置。这些菜单插件既有文本形式,也有图形形式,因此现在每个引导加载程序都可以充当启动管理器他们自己!我警告过你,这很快就会变得令人困惑。

最后,由于引导加载程序现在可以理解文件——它可以通过编辑文件直接进行配置,这对用户来说更加方便。

当然,除非你使用 GRUB 和 Windows Bootloader,它们甚至在操作系统工程圈中也因其过于复杂而受到嘲笑。提示:这两个引导加载程序确实很弱智。


UEFI 的全新世界:一环统领一切

历史的前一部分为用户引入了很多好的东西(但也有很多坏的东西:比如 GRUB 的疯狂肥胖)。

事实上,最重要的是:它为用户带来了极大的自由,特别是在如何设置系统启动方面(如果你可以挖掘出所有的细节,这似乎是一种技能,但是每年都在越来越快地消失)。

在权力的游戏世界中,现代营利性公司,没有什么比用户的绝对自由更糟糕的事情了。

到目前为止,我们看到的所有创新都源于一个事实:BIOS 只能从磁盘加载单个扇区来启动。

这种看似严重的限制导致了开源启动解决方案庞大的利基生态系统的诞生。但这种情况已经不复存在了。

启动运动非常成功,并高效地实现了启动的民主化,以至于“这些业余的、渴望强大功能的低级开发人员”开始自己进入固件领域,并推出了新项目:coreboot。这是 IBM PC 兼容机的彻底、实用、开源 BIOS 替代品,它有可能以前所未有的速度和简便性启动任何东西。在企业界,这是一种异端邪说。

您必须了解,有多少旧版的保护依赖于 IBM PC 世界的复杂启动和固件环境。整个行业都有提供早期启动产品的早期启动软件公司,如果 coreboot 努力在制造商那里取得成功,这些公司将立即消失或被迫应对重大中断。

更重要的是,基于完全开放的固件组件制造盗版杂牌 PC 变得更加容易。

旁注:您还记得几乎所有现代操作系统都符合 MULTIBOOT 吗?这是完全非企业草根成就的临时 OSDev 修补者,这只可能发生在地球上最自由、最丰富、对开发人员最友好的平台上:传统 BIOS 驱动的 PC。

想象一下类似的未来,PC 最终会成为完全开放的平台,运行免费固件、免费引导程序和免费操作系统。我们正朝着那个未来前进,而这样的未来对于许多当权者来说都是非常可怕的。一些 CPU 制造商甚至开始关注那个未来(AMD),并且直到今天仍在朝着那个方向迈进。

对于其他一些企业参与者来说,这是无法接受的。如果硬件制造商集体加入 (coreboot),这种情况可能会彻底改变 PC 游戏:无论是操作系统还是硬件方面。

这种情况也使得苹果式的平台封锁完全不可能。如今企业界中还有传言称,苹果式的封锁是科技领域取得成功的唯一途径。

这种情况必须立即得到补救,对于用户来说是不幸的,对于公司来说是幸运的,机会最终出现了:多个 CPU 和巨大的磁盘驱动器。

随着驱动器进入 TB 级领域(原始分区表大小字段太短,无法表达新的超过 TB 级的磁盘大小),原始 MS-DOS 分区方案已逐渐失效,因此英特尔在微软的帮助下提出了一种新的分区格式,称为 GPT:GUID 分区表,它是所谓的 UEFI 工作的一部分(原始 EFI 工作的扩展后继)。此分区表方案(并非唯一)被用作推动整个现状变革的工具。

因此我们得到了 UEFI,即所谓的 Wintel(英特尔 + 微软)平台的创意。

如今固态硬盘越来越普遍,UEFI 也越来越容易理解 - 它是安装在每台现代(大约 2008 年后)IBM PC 兼容计算机主板内特殊固态存储器上的专用操作系统。它还雄心勃勃地进军移动领域。它已在基于 ARM 的服务器上得到支持。

整个发布过程所有参与者(从英特尔到微软,再到开源社区,直至计算机和计算机组件制造商)都进行了非常良好的协调和组织。而且自 202* 年以来生产的 PC 中有 99.9999% 都是基于 UEFI 的,这一事实证明它最终取得了成功。

此项努力与 TPM(可信平台模块)和 Intel ME(英特尔管理引擎)的引入一起,以保护用户(即临时用户)(免受他们自己的所谓“安全”)为幌子,是人类历史上实施的最大、最协调、最成功的平台封锁。

与 coreboot 和其他启动平台不同,在这些平台中,硬件和启动链的真实性和权威性都是间接问题,而经过身份验证的启动问题是 UEFI 规范中提出的核心问题之一(所谓的 SecureBoot 勘误表)。

那么什么是 UEFI?

UEFI 是一个微观操作系统,其复杂程度与 Microsoft Windows 9x 相当,它实际上借用了后者的许多数据格式、二进制结构和设计思想(即 GUUID 标记接口、UEFI 应用程序是特制的 Windows EXE 等)。

UEFI 基本上是 GRUB 的完全复制(在范围上,但在实现上!),唯一的区别在于 GRUB 面向计算机用户,而 UEFI 面向计算机制造商。

为了使 UEFI 取得成功,必须实现几个目标,其中之一就是它是一个开源项目。

因此实际的规范 UEFI 实现(所谓的Tiano 核心/EDK) 是一项开源项目,任何人都可以参与并为其开发。这平息了人们对其封闭或专有平台的批评。

UEFI 必须至少与任何免费/自由或开源替代方案一样好。这是可以实现的,因为 UEFI 是一个实际的操作系统(或者更确切地说是固件),它可以运行实际的应用程序。由于它支持专有硬件制造商(得益于它的 BSD 许可证 - 允许基于开源软件创建封闭的专有产品),因此它可以访问专有图形堆栈,因此它为非常早期的启动应用程序提供了对图形的访问(每个人都喜欢图片)。所有这些因素使其成为非常灵活且有吸引力的部署平台。

最后,与此同时,它必须对围绕启动环境发展起来的企业生态系统非常友好,并且拥有许多根深蒂固的参与者(急性心肌梗死来自 AMIBIOS/Aptio 的名声,菲尼克斯科技印西德H2O和其他公司),还应该允许完全的平台锁定(针对微软、联想等硬件系统制造商)——它已经为此明确设计了接口。

目前,管理工作由UEFI 论坛这是一家非营利性公司,拥有令人印象深刻的会员名单(这平息了任何有关 UEFI 完全由垄断实体(例如微软和英特尔)控制的争论)。

在过去的几年中,许多原来属于英特尔和微软的知识产权(IP)资产被转移至该论坛。

但是与 GRUB 或普通操作系统不同,UEFI 不会安装到计算机的硬盘上(尽管它可以以 MULTIBOOT 形式进行编译,请参阅“每个人都可以启动”部分,然后像常规操作系统一样安装到普通硬盘上),而是直接安装在计算机的主板上(!)。

因此,如今交付给 PC 消费者的每台“BIOS”(或固件)中 90% 都是这种开源 UEFI“操作系统”,它提供所有基本固件服务。当然,如果没有制造商提供的特定专有驱动程序(主板固件价值的实际增加点)的组合,这 90% 的服务将毫无用处。

UEFI 简化了新电脑主板、电脑和笔记本电脑的制造,并使之更加大众化(进一步降低了成本):硬件提供商不再需要从头开始编写自己的“BIOS”/固件。他们只需要基于 Tiano Core 编写固件,即可立即获得一个工作平台。

他们可以利用这个开发良好、测试良好的开放 UEFI 安装,并用专为其硬件设计的额外特殊驱动程序进行补充。一旦安装到主板上,最终消费者将免费获得熟悉的 UEFI 接口,并且由于所有现代操作系统都支持 UEFI(并且制造商的附加驱动程序经过充分测试并且运行良好),所有启用 UEFI 的操作系统都会自动支持该机器。

UEFI 成功“攻击”了我们之前讨论过的所有关键领域,这些领域之前由用户部署的基于磁盘的引导管理器和引导加载程序(来自“引导程序”时代)控制:

  • 网络启动 - 当使用嵌入式网卡驱动程序扩展时,主板可以直接进行 PXE 启动,而无需依赖于 SYSLINUX PXEBOOT 功能。
  • 启动管理器 - 因为 UEFI 理解多个引导加载程序的概念并且可以直接读取 GPT EFI 分区和 FAT32 文件系统,所以主板本身可以安装 UEFI 应用程序,可以直接充当启动管理器,而无需单独的启动管理器程序(这正是现代固件中的 f11/boot 菜单的基本功能)
  • 引导加载程序 - 因为 UEFI 理解多个引导加载程序的概念并且可以直接读取 GPT EFI 分区和 FAT32 文件系统,所以主板本身可以直接引导到目标操作系统内核,如果该内核也是一种 UEFI 应用程序(实际上普通 Linux 就是 (!)(并且将来也适用于许多其他操作系统))。
  • 由于 UEFI 是 Windows 9x 复杂度级别的操作系统,它可以运行任何符合 UEFI 的应用程序,这为主板制造商提供了机会,可以将各种自我诊断、自我测试和自我基准测试实用程序或任何垃圾软件捆绑到主板上,这在游戏 PC 中已经是一种趋势。坦率地说,这里只有天空是极限,因为您可以通过这种方式将任何东西嵌入主板:音乐播放器、自助服务终端互联网浏览器、电影播放器​​或任何您喜欢的东西。
  • 由于 UEFI 积极解决了身份验证问题,制造商可以仅锁定来自经过身份验证的来源的固件更新,从而维护“安全性”或防止不符合规定的用户从主板上删除捆绑的垃圾软件。
  • 因为 UEFI 理解多个引导加载程序的概念,并且可以直接读取 GPT EFI 分区和 FAT32 文件系统,所以主板可以直接运行用户安装在那里的任何应用程序:无论是引导加载程序、操作系统内核、互联网信息亭应用程序、音乐播放器应用程序,还是其他任何东西,这里的一切都是无限的(当然,前提是整个主板没有被制造商锁定 (!) 或者应用程序通过加密方式得到制造商的认可(即通过 SecureBoot 签名) (!))。

这一发展的最终实现是,UEFI 可以直接启动您的操作系统,而无需任何中间引导加载程序 - 这对于例如锁定的平板电脑、手机和电视制造商来说也是非常有吸引力的主张。

由于 UEFI 提供了与 GRUB 和 SYSLINUX 相同的功能,它也受到最终用户社区的一部分欢迎,成为那些能够实际利用这些功能的系统的替代品(当然,这种认可只会持续到他们的 UEFI 安装仍然被各自的主板制造商解锁为止)。

这里的哲学问题是,这是否会激励制造商首先扩大其解锁的产品范围,以获得市场优势,然后在最终扫描中锁定所有产品,随后仅使用经过审查的应用程序来净化生态系统,人为地重新调整他们的市场并利用他们的市场地位。

在这个新的环境中,除非它们能带来一些实际的优势(比如救援 CD 等),否则 GRUB、SYSLINUX 和许多其他引导加载程序很快就会成为多余和无关紧要的软件,因为您可以删除的中间启动步骤越多,机器的启动速度就越快(尤其是对于静态(平板电脑、笔记本电脑、工作站、服务器)、单一操作系统安装)。

现代虚拟机中的基于 TianoCore 的 UEFI 实现与适当的虚拟机管理程序配对(如 Linux 的组合虚拟机+光学调频) 可以通过特定的调整,在亚秒级时间内启动和重启虚拟机。

结合先进的系统监控技术(高度调整的 systemd、runit、nosh、s6 inits),此类虚拟化安装可以在亚秒级时间内重新启动到完全工作状态,这一功能在本地云和互联网云环境中都十分重要。

支持 UEFI 的“引导加载程序”:

  • 几乎所有仍存活的“引导程序”加载程序都可以链接到 UEFI 中
  • 重新索引- 高级、图形化、可换肤、多重引导、仅 UEFI 的引导管理器/加载器
  • UEFI 外壳- 独立的“shell”命令行应用程序,其范围大致相当于 MS-DOS 命令行解释器 COMMAN.COM - 您可以检查“存储层”的 UEFI 视图(磁盘和其上的 FAT32 卷,如果可读(如果您的 UEFI 具有不同文件系统的驱动程序,即 Apple,您也可以检查这些)),加载 UEFI 驱动程序等。最重要的是,您可以从中启动任何其他 UEFI 应用程序
  • 许多其他 - 因为 UEFI 应用程序开发更加简单(与 BIOS 相比),因为以前您的“应用程序”必须是相应的 SYSLINUX、GRUB、XOSL 插件模块,而使用 UEFI,您可以通过 EDK 获得完整的 UEFI“操作系统”,期待更多工具的出现……

其他平台的情况

哇哦!您成功找到了答案,但您要求的平台不是基于 IBM PC 的。真扫兴。

没问题:想象一下长度完全相同的文章,但参与者不同且时间范围不同 - 通常历史上更早(OpenBoot,OpenFirmware,OpenBIOS),有时更晚(例如基于 ARM 平台上的 U-Boot)。


结论

现在你应该很清楚地看到你的问题没有意义,我们得到了第一个通用答案:

只有固件是第一个运行的程序,就是这样!

答案3

我想是启动管理器。显然,在 UEFI 的情况下,启动管理器在某种程度上相当于一个程序,您可以在其中选择要执行哪个 EFI 可执行文件,而引导加载程序将是可用的 EFI 可执行文件之一。(但启动管理器本身也将是一个 EFI 可执行文件,它也可以链式加载另一个启动管理器。)

或者您可以这样看到,引导管理器允许您选择执行引导加载程序或另一个引导管理器,而引导加载程序始终用于加载操作系统/内核,除非引导加载程序不仅仅是引导加载程序,而是像 grub 这样的“双重角色”程序。

linux就像 grub和命令一样initrd,它是一个引导加载程序。但是根据命令,它也是一个引导管理器chainloader

请注意,对于 systemd-boot,它是一个启动管理器而不是引导加载程序,因为它不像 grub 那样启动 Linux。内核映像中的 EFISTUB 是实际的引导加载程序(grub 的linux命令不使用它)。

PS 我不确定是否有人能定义什么是启动管理器。无论如何,似乎还有一个更通用的定义,即启动管理器是一个允许选择要启动的操作系统/安装的引导加载程序。因此,即使 grub 没有命令,也可能被视为引导加载程序和启动管理器,chainloader但只是因为一组 grub 可以为多个 Linux 安装提供服务。

您可能已经意识到,引导管理器并不是至关重要的东西。计算机(BIOS 或 ARM 主板上的任何东西)可以直接加载引导加载程序,并且该引导加载程序可以始终加载相同的操作系统安装/内核,这解释了您链接的文章。(在 UEFI 的情况下,固件附带一个内置的引导管理器,据我所知,它总是在使用,因此有人可能会认为引导管理器在这种情况下至关重要。)

顺便说一句,我想知道“启动管理器”这个术语在 BIOS 时代是否存在/是否有定义。

相关内容