UBOOT 学习笔记

执行流程

1. 上电与ROM代码执行

  • 上电后,ROM代码(BootROM)启动:这是存储在SoC中的固件,负责引导过程的第一阶段。它会从预定义的启动设备(如eMMC、SD卡、SPI Flash等)加载引导程序。

2. 第一阶段引导加载器(SPL)

  • SPL(Secondary Program Loader):通常是U-Boot的一个精简版本,负责初始化基本的硬件(如DDR内存),并加载U-Boot的完整版本。
  • 加载并执行U-Boot:SPL将U-Boot从存储设备加载到内存中,然后跳转到U-Boot的入口点。

3. U-Boot执行

  • 硬件初始化:U-Boot完成更多的硬件初始化,包括设置时钟、初始化串口、配置网络等。
  • 设备树加载:加载设备树文件(DTB),这描述了硬件的配置和连接。
  • 选择引导源:根据环境变量或默认配置,选择从哪个设备加载操作系统内核(如eMMC、SD卡、网络等)。
  • 加载内核和initrd:将Linux内核和初始RAM盘(initrd/initramfs)加载到内存中。
  • 设置内核参数:通过命令行参数向内核传递必要的信息(如根文件系统的位置)。

4. 启动Linux内核

  • 跳转到内核入口:U-Boot将控制权交给Linux内核,内核开始执行。
  • 内核初始化:Linux内核进行硬件检测和初始化,加载必要的驱动程序,并挂载根文件系统。

5. 用户空间启动

  • init进程启动:内核启动第一个用户空间进程(通常是/sbin/init),这开始了用户空间的初始化。
  • 启动服务和登录界面:根据系统配置,启动各种系统服务和提供用户登录界面。