所以据我理解,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 的大小约为。MBR
BIOS/UEFI
512MB
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
之间的接口,它决定 是否能与您的内核一起工作,它被设计成与您的 一起工作或交互。如果引导加载程序加载并且它不能与您的 一起工作,那么您的加载程序会抱怨,但这取决于 来确定 是否与在其中找到的编译模块匹配。hardware
user
OS
hardware
kernel
hardware
kernel
hardware
Windows 有自己的bootloader
版本EFI bootloader
,GRUB
适用于基于 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