从启动流程初见U-Boot
工具:rk3568开发板、tpye-c数据线
可以观察一下已经有完整Linux系统的启动流程,使用串口连接终端,重启系统
1.初始启动阶段(Boot ROM)
在嵌入式启动最初阶段,由SOC内置Boot ROM代码执行一些基本的初始化任务
- 启动时钟系统
- 设置基本的引导模式
- 将引导加载程序的第一阶段代码加载到内部SARM中执行
这部分代码是写死在soc中的,过程不会打印在终端上
2.U-Boot第一阶段(SPL)
- 是U-Boot的第一段代码,通常设计的非常小且能够在受限的环境运行
- 负责早期的初始化,包括基本硬件的初始化,比如DDR内存的初始化
图片中所示就是DDR初始化过程
- 配置DDR控制寄存器设置时钟频率、时序参数
- 执行DDR内存的校准和初始化过程,使其进入工作流程
DDR初始化通常与特定的硬件平台有关,不同的Soc和DDR内存模块可能有不同的的初始化要求。U-Boot源代码中通常包含平台特定的DDR初始代码
3.U-Boot第二阶段(Uboot Proper)
一旦SPL初始化成功DDR内存,他将会把UBoot的主要部分(Uboot Proper)加载到DDR内存中。并将控制权移交给他。此后Uboot Proper会执行更多的硬件初始化和配置工作
- 初始化外部存储设备
- 配置网络接口
- 提供命令行接口
- 加载和引导操作系统内核
4.U-Boot第三阶段(start kernel)
当Uboot完成所有必要初始化和配置后,会加载系统内核并将控制权交给操作系统。从这开始,操作系统接管并继续启动过程,包括初始化驱动程序、启动用户空间程序等