bootloader 启动流程和功能说明
bootloader 基本功能说明
- 有的程序在启动bootloader之前会运行一段
固化程序
- bootloader 启动过程分单阶段和多阶段
- 多阶段可以提供更复杂的功能和更好的移植性
- 一般从固态存储设备启动分两个阶段
第一个阶段 bootloader 启动说明
源码 U-boot/arch/arm/cpu/xxx(armv7)/start.S
- 硬件设备初始化(关闭 看门口, 关中断, 设置CPU的速度和时钟频率, RAM初始化)
- 为加载第二阶段的 Bootloader 的代码准备 RAM 空间(初始化RAM芯片,使可用, 调用lowlevel_init使外接SDRAM可用)
- 复制 Bootloader 的第二阶段代码到 RAM 空间
- 设置好栈
- 跳转到第二阶段代码的入口 C 处
第二个阶段 bootloader 启动阶段
- 初始化本阶段要使用的硬件设备(CPU中断, 系统时钟,定时器, 检查flash, 串口初始化, 检测系统内存映射)
- 检测系统内存映射
- 将内核映像和根文件系统映像从 flash 上读到 RAM 空间中
- 为内核设置启动参数
- 调用内核, 至少初始化串口用于调试
bootloader 和 内核交互
- 单向的交互
- bootloader 将各类参数传递给内核, 由于不能同时运行, 传递办法只有一个: 将参数放在某个约定的地方
- 然后再启动内核, 内核从约定的地方获取参数