BootLoader的启动分析
Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。
1.stage
由于BootLoader的实现依赖于CPU体系结构,大多数BootLoader都分为stage1和stage2两大部分
- Stage1
- 依赖于CPU体系结构,如设备初始化代码
- 通常用汇编语言实现,短小精悍
- Stage2
- 通常用C语言
- 可以实现复杂功能
- 代码具有较好的可读性和可移植性
2.Stage1
直接运行在固态存储设备上,通常包括以下 :
- 硬件设备初始化
- 为加载 BootLoader的stage2准备RAM空间
- 拷贝 BootLoader的stage2到RAM空间中
- 设置好堆栈
- 跳转到stage2的C入口点
3.Stage2
通常包括以下五个步骤
- 初始化本阶段要使用到的硬件设备
- 检测系统内存映射(memory map)
- 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中——加载映像
- 为内核设置启动参数
- 内核参数,如页面大小、根设备
- 内存映射情况
- 命令行参数
- initrd映像参数
- Ramdisk参数
- 调用内核
- 直接跳转到内核的第一条指令处,也即RAM中内核 被加载的地址处 从此操作系统接管所有的工作