想了解引导加载程序/GRUB?

use*_*926 -1 boot grub2 windows bios bootloader

因此,据我所知,BIOS 是固件,即内置于硬件中且独立于操作系统的软件。

但是我们有启动操作系统的引导加载程序。

但是我们有像 GRUB 这样的引导加载程序,但似乎也是以 Linux 为中心的引导加载程序?

我有点困惑为什么会这样。每个 BIOS 都使用 GRUB 吗?所有硬件都带有内置引导加载程序吗?像 GRUB 这样的东西能启动 Windows、Linux、Mac 等吗?

我试图了解我们从独立于操作系统到依赖于操作系统,从硬件/固件方面转向“我们安装的任何操作系统”方面的分界点。

编辑:

试图用另一种方式来表达。

假设我走进一家商店并购买了一台预制的 Windows 笔记本电脑。我把它递给你,你检查它然后说,“好吧,它正在使用这个 BIOS、这个引导加载程序、这个操作系统。”

我说“很酷。现在你能擦掉 Windows 并在它上面安装 Ubuntu 吗?我希望这台笔记本电脑是一台 Ubuntu 笔记本电脑,而不是 Windows。”

这可能吗?您需要更改引导加载程序吗?你怎么知道要把它改成什么?如果我给你一台 Macbook Pro 会怎样?我们可以擦除它并使其成为 Windows 计算机吗?我们可以擦除它并使其成为 Ubuntu 计算机吗?

是什么决定了这里的兼容性和必要性?出售笔记本电脑时,是否会根据操作系统预装引导加载程序?什么决定了我们可以根据我们想要的操作系统将其更改为什么?首先是什么决定了我们可以运行什么操作系统?

我试图围绕硬件、BIOS、引导加载程序和操作系统之间的关系进行思考。

Geo*_*sen 5

请不要混淆步骤是:

基本步骤是:

 1. The BIOS/UEFI locates and executes the boot program or bootloader.
 2. The bootloader loads the kernel.
 3. The kernel starts the `init` process (with a PID of 1).
 4. init manages system initialization, using conventional 'sysvinit' startup scripts, or
          using 'Upstart' or systemd.
Run Code Online (Sandbox Code Playgroud)

当所述独立于OS的步骤结束GRUB由加载BIOS/UEFI。它的工作是加载任何bootloader存在的东西。

来自 bodhi.zazen 给出的链接:

GRUB 被设计为与多重引导规范兼容,该规范允许 GRUB 引导许多版本的 Linux 和其他免费操作系统;它还可以链式加载专有操作系统的引导记录?视窗。

现在,如果您要擦除 Windows,所有硬件都不会预先安装 GRUB,那么您将安装 GRUB 来帮助boot upUbuntu。它通常存储在称为MBR主引导记录的部分中,BIOS/UEFI将在其中查找。MBR512MB大小差不多。

          MBR
      ---------  -----
      |          |
      |          |
      |          | 446 bytes --- GRUB program code.
      |          |
      |          |
      |          |
      |          -----
512   |          -----                                            ----------
bytes |          | Partition 1 - 16 bytes                                  |
      |          |----                                                     |
      |          | Partition 2 - 16 bytes              <----Partiton Table |
      |          |----                                                     |
      |          | Partition 3 - 16 bytes                                  |--> 64byts
      |          |----                                                     |
      |          | Partition 4 - 16 bytes { 0x55AA } -> Magic Number       |
      |          |                                                         |
      ---------  -----                                            ---------|
Run Code Online (Sandbox Code Playgroud)

你问:

“什么决定了兼容性和支持?硬件?引导程序?我不明白它们之间的关系”

kernel之间的接口hardwareuser并确定OS将与你的内核工作,它是建立在工作或交互与你hardware。如果引导加载程序加载了kernel并且这不适用于您hardware的加载程序,那么您的加载程序会抱怨,但由它kernel来确定它是否hardware与其中找到的已编译模块匹配良好。

Windows 有自己的bootloader名称EFI bootloaderGRUB适用于基于 Linux 的系统而不是 Windows。看看这个不同的引导加载程序。

请注意,UEFI(统一可扩展固件接口)是较新系统上的较新类型 BIOS:

统一可扩展固件接口 (UEFI) 是一种规范,用于定义操作系统和平台固件之间的软件接口。UEFI 取代了最初存在于所有 IBM PC 兼容个人计算机中的基本输入/输出系统 (BIOS) 固件接口,大多数 UEFI 固件实现为 BIOS 服务提供了传统支持。

进一步阅读:

https://opensource.com/article/17/2/linux-boot-and-startup

https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface