GRUB加载内核的具体步骤如下:
- 启动和初始化:
- 计算机启动时,BIOS会加载MBR(主引导记录)到内存中,MBR包含GRUB的启动代码。
- GRUB启动代码会加载并执行GRUB的启动脚本,通常位于硬盘的第二个扇区。
- 配置GRUB:
- 启动脚本会加载GRUB配置文件,该文件定义了启动选项,如内核文件的位置、启动参数等。
- GRUB会根据配置文件读取内核映像和参数。
- 加载内核:
- GRUB读取内核映像,内核映像通常是一个ELF格式的文件。
- GRUB将内核映像加载到内存中,并将其ELF头解析为multiboot_t结构体。
- 设置环境:
- GRUB将multiboot_t结构体的指针(地址)存储在ebx寄存器中。
- GRUB设置内核的启动环境,包括页表、中断向量表等。
- 启动内核:
- GRUB将控制权传递给内核,内核从multiboot_t结构体中读取启动参数,并进行初始化。
- 内核开始执行,启动操作系统。
GRUB的加载过程是多启动规范的一部分,它允许GRUB加载和启动多种不同的操作系统,而无需知道每个操作系统的具体细节。多启动规范定义了内核映像和参数的格式,GRUB根据这些规范加载内核并启动操作系统。
从目前的认识来看,计算机会寻找第一个扇区以“55 AA”结尾的外存,也就是MBR所在的地方。
MBR(Master Boot Record,主引导记录)是位于硬盘上的一个特殊的扇区,通常位于硬盘的第一个扇区。MBR的作用是在计算机启动时被加载到内存中,并执行其中的启动代码,从而引导计算机启动过程。
MBR包含以下关键信息:
- 引导加载程序:MBR中包含一个引导加载程序,通常是GRUB(GRand Unified Bootloader)或其他类似的引导程序。这个引导加载程序负责从硬盘加载操作系统。
- 分区表:MBR包含一个分区表,该表列出了硬盘上所有分区的起始和结束位置,以及分区的类型(如主分区、扩展分区等)。分区表用于引导加载程序确定哪些区域包含操作系统或数据。
- 结束标志:MBR的最后部分是一个结束标志,用于指示分区表的结束。
当计算机启动时,BIOS(基本输入输出系统)会读取硬盘的第一个扇区(MBR),并执行其中的引导加载程序。引导加载程序会读取分区表,找到包含操作系统的分区,并从该分区加载内核映像,从而启动操作系统。
需要注意的是,MBR的引导加载程序通常不会直接加载内核映像,而是加载GRUB等引导加载程序,然后由GRUB负责加载内核映像。因此,MBR中的引导加载程序是启动过程的一部分,而不是直接启动操作系统的程序。
MBR会启动GRUB(通常位于第二个扇区),GRUB启动之后会读取配置,然后加载os内核,os内核是个elf格式,GRUB会读取elf头,并将elf信息放在multiboot_t结构体中,然后把multiboot_t结构体的地址放在ebx中。最后再把控制权转交给操作系统。