![为什么Linux内核有自己的引导加载程序](https://linux22.com/image/225155/%E4%B8%BA%E4%BB%80%E4%B9%88Linux%E5%86%85%E6%A0%B8%E6%9C%89%E8%87%AA%E5%B7%B1%E7%9A%84%E5%BC%95%E5%AF%BC%E5%8A%A0%E8%BD%BD%E7%A8%8B%E5%BA%8F.png)
我正在尝试通过 Linux 内核代码来工作,并且在这个文件BIOS 似乎有一个完整的引导加载程序可以运行。我的印象是,一般情况下,grub 将位于 mbr 中,然后它会以某种方式调用内核。
我的问题是:
- 为什么(据我所知)内核中有一个内置的引导加载程序?这是历史原因吗?
- 有人可以逐步解释从按下电源按钮到启动内核会发生什么吗?
答案1
是的,这是出于历史原因:过去可以将内核写入软盘,并使用它启动 PC。
header.S
仍然提供引导扇区,以便如果有人尝试这样做,内核可以显示一条消息。header.S
如果内核配置了 UEFI 引导加载程序,还提供 PE 标头;然后可以直接从 UEFI 启动生成的内核映像。在所有情况下,header.S
都提供一个实现多重引导协议的标头,这是 Grub 等用来启动内核的。在当前没有 BMC 的 x86 系统上,系统控制器启动并初始化运行系统固件的 CPU。它会初始化内存、各种总线等,然后查找具有适当系统分区的磁盘。它加载选择的或默认的引导加载程序(例如Grub)来自该分区。然后引导加载程序加载内核和 initramfs(通常),并且将控制权交给内核。
事情远不止这些;看EFI启动过程的描述
ELILO
(忽略现在不使用的部分)。还有一个描述Debian wiki UEFI 页面,这也解释了如何处理可移动媒体。