ToB企服应用市场:ToB评测及商务社交产业平台

标题: OS开辟条记(2)——GRUB启动流程 [打印本页]

作者: 悠扬随风    时间: 2024-12-7 10:14
标题: OS开辟条记(2)——GRUB启动流程
GRUB如何突破实模式的限制

BIOS与MBR引导机制

BIOS会在启动时,检查逻辑0扇区(即硬盘的第一个扇区)的结尾是否存在标志 0x55, 0xaa,以此判断该扇区是否可引导。按照传统的MBR(Master Boot Record)引导流程,逻辑0扇区包含一个特殊的引导程序。这个程序的使命是检查位于逻辑0扇区偏移 0x1BE 处的分区表。分区表最多可以记录四个分区,这也是为什么 MBR 分区的硬盘只能有四个主分区的缘故原由。
在分区表中,每个分区可以有一个“可引导”标志。MBR引导程序会根据某种规则选取一个被标志为“可引导”的分区,将该分区的第一个扇区(称为VBR,Volume Boot Record)加载到内存中(一般加载到地点 0x7C00 以包管兼容性)。随后,程序跳转到VBR,由VBR负责加载并启动该分区中的操纵体系。
MBR和VBR的局限性

然而,MBR和VBR的大小都仅有一个扇区,也就是512字节,这对稍微复杂的引导程序来说已经不够用。此外,在16位实模式下,CPU的寻址范围最大只有1MB(实际可用空间还小于1MB,需思量BIOS和其他数据占用)。因此,对于体积超过1MB或需要加载到1MB以上地点的内核文件,MBR和VBR的能力不足。
16位的寻址限制

切换到保护模式虽然可以突破1MB寻址范围的限制,但由于仅实模式支持调用BIOS功能,在保护模式下无法直接调用BIOS来实现硬盘驱动和文件体系管理。这就需要自行实现这些功能,极大地增加了引导程序的复杂度。为了避免在引导内再实现一边磁盘驱动和文件体系,我选择了使用GRUB。
GRUB的办理方案

在GRUB中,将被称为stage1.5阶段的GRUB核心加载器(从磁盘启动是diskboot,从光盘是cdboot等等)存放在存放磁盘中的某个空闲空间(默认是MBR后的一个扇区),一个定制的MBR引导程序(如 boot.S,编译后生成 boot.img)负责加载这一阶段的程序到内存中。
这时候就又出现一个问题,怎么存放GRUB核心呢?GRUB提供了两种方式:
GRUB如何找到core.img

如果采用基于文件体系的方式,问题在于MBR程序如何知道 core.img 的具体位置。GRUB 的core.img 是通过grub-mkimage命令生成的,它由多个部门组成,包括:
当执行 grub-install 时,工具会自动将 diskboot 的位置写入 boot.img 中。diskboot 的末尾包含一个 blocklist,用于记录 grub-core 的各个部门在磁盘上的位置。如许,diskboot 可以顺遂加载完备的 grub-core。
GRUB的引导过程

综上,GRUB 2 的启动流程如下:
感想

稍微深入相识过GRUB后,感觉像是迷你内核一样,功能这么丰富。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4