我正在尝试通过 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 页面,这也解释了如何处理可移动媒体。