在网上阅读了很多资料后,我开始对启动管理器的工作原理越来越困惑。我意识到启动管理器(例如 rEFInd)不是更新或与固件相关的任何东西(如果错了请纠正我)。我现在有以下理解:
对于 BIOS 机器,人们期望 BIOS 固件能够识别计算机中存在的所有磁盘(它不识别任何磁盘上的分区)。假设机器有一个内部硬盘驱动器和一个连接到它的外部 CD。然后 BIOS 让您选择其中之一并读取硬盘驱动器或 CD 的 MBR 上的引导加载程序。现在,假设您的硬盘上安装了 Windows 和 Linux。这里是我不太确定的部分,如果您安装了 GRUB,既是引导管理器又是引导加载程序,是否意味着在您选择从硬盘驱动器引导后,会读取并执行 GRUB 引导加载程序,从而调用GRUB 启动管理器?那么 GRUB 引导管理器会识别您计算机上的不同系统,并调用 Windows 引导加载程序或 Linux 引导加载程序,这仍然是 GRUB 的一部分?
对于 UEFI 机器,固件似乎已经是一个启动管理器,因为它可以识别分区表和连接到计算机的所有磁盘。因此,您所需要做的就是将引导加载程序写入 EFI 系统分区,固件将让您选择在引导时要使用哪个引导加载程序。是对的吗?然而,我注意到仍然有启动管理器,例如 rEFInd 可用于 UEFI 机器,如果固件已经像启动管理器一样运行,那么它们有什么用呢?此外,rEFInd 是否被视为固件内容或只是安装在特定磁盘的 EFI 系统分区上的某些应用程序?
答案1
在主操作系统启动之前运行的任何代码以及涉及启动其他程序的代码都是引导加载程序。大多数计算机,甚至大多数嵌入式设备都有一系列引导加载程序:ROM 或闪存中的代码,从闪存或磁盘驱动器加载另一段代码,然后加载另一段代码,依此类推。 BIOS 是一个引导加载程序(它可能有),reFInd 是一个引导加载程序,Grub 是一个引导加载程序,等等。
有些引导加载程序除了加载另一段代码并分支到它之外什么也不做,但大多数引导加载程序执行其他任务,例如读取配置数据、检测连接的外围设备、测试硬件、初始化设备、枚举存储和网络设备以确定下一步加载什么、显示消息在屏幕上,监听用户输入以允许用户影响启动过程等。
引导管理器是一种特殊类型的引导加载程序,它包括用户在多个操作系统之间进行选择的方法。 Grub 引导加载程序并不真正“调用”Grub 引导管理器,引导管理器功能是 Grub 的一方面。
一些 PC 传统 BIOS 具有粗糙的启动管理器功能,允许用户在几个设备之间进行选择;它是有限的,因为传统 BIOS 只能加载磁盘的前 512 字节并在那里执行代码。 UEFI 具有更强大的启动管理器,允许用户在 FAT 分区上的文件之间进行选择。
引导加载程序是否算作固件取决于您定义固件的方式。根据“随计算机硬件提供,而不是安装在存储设备上”的定义,BIOS 和 UEFI 是固件,但 reFInd 和 Grub 不是。根据“独立于操作系统”的定义,reFInd 和 Grub 都是固件。