Linux内核加载与启动流程详解
1. 内核加载概述
在系统启动流程中,到特定阶段时,GRUB 2需将控制权交给内核。为实现这一交接,引导加载程序要完成两项主要任务:
- 将内核加载到内存中。
- 根据引导协议设置内核的一些字段。
引导协议规定了引导加载程序需传递或设置内核头的部分字段,如根设备名、挂载选项(ro 或 rw)、initramfs 名称、initramfs 大小等,这些字段被称为内核命令行参数,由 GRUB 或引导加载程序传递给内核。
GRUB 不会随意加载内核(/boot/vmlinuz),而是会将其加载到特定位置,该位置会因所使用的 Linux 发行版、版本以及系统的 CPU 架构而异。vmlinuz 是一个存档文件,由三部分组成:
| 部分 | 说明 |
| ---- | ---- |
| Header(第 1 部分) | 包含负责内核初始化设置的代码 |
| 内核设置代码(第 2 部分) | 用于内核的初始化配置 |
| vmlinux(第 3 部分) | 实际的压缩内核 |
2. 内核加载到内存后的初始步骤
当 GRUB 2 将内核加载到内存的特定位置后,内核存档文件 vmlinuz 会执行以下初始步骤:
1. 引导加载程序将内核加载到内存的特定位置后,由 arch/x86/boot/header.S 文件生成的二进制文件开始运行。
2. 可能会产生疑问:vmlinuz 是存档文件,引导加载程序尚未提取它,为何存档文件内的代码能运行?
- 简短答案是:由 arch/x86/boot/header.S 文件生成的二进
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



