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

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

所以据我理解,BIOS 是固件,即内置于硬件且独立于操作系统的软件。

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

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

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

我试图了解我们从操作系统独立性转向操作系统依赖性、从硬件/固件方面转向“无论我们安装什么操作系统”方面的临界点。

编辑:

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

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

我说:“太棒了。现在你能把 Windows 删除,然后安装 Ubuntu 吗?我希望这台笔记本电脑是 Ubuntu 笔记本电脑,而不是 Windows。”

这可能吗?你需要更改引导程序吗?你怎么知道要把它改成什么?如果我给你一台 Macbook Pro 会怎么样?我们可以把它抹掉,让它变成一台 Windows 电脑吗?我们可以把它抹掉,让它变成一台 Ubuntu 电脑吗?

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

我正在尝试理解硬件、BIOS、引导加载程序和操作系统之间的关系。

答案1

请不要混淆,步骤如下:

基本步骤如下:

 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.

GRUB当被 加载时,与操作系统无关的步骤结束BIOS/UEFI。它的工作是加载任何bootloader存在的内容。

来自bodhi.zazen给出的链接:

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

现在,并非所有硬件都预装了 GRUB,如果您要清除 Windows,则需要安装 GRUB 来帮助Ubuntu。它通常存储在名为“主引导记录”boot up的部分中,您将在其中查找。MBR 的大小约为。MBRBIOS/UEFI512MB

          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       |
      |          |                                                         |
      ---------  -----                                            ---------|

你问:

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

是和kernel之间的接口,它决定 是否能与您的内核一起工作,它被设计成与您的 一起工作或交互。如果引导加载程序加载并且它不能与您的 一起工作,那么您的加载程序会抱怨,但这取决于 来确定 是否与在其中找到的编译模块匹配。hardwareuserOShardwarekernelhardwarekernelhardware

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

相关内容