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
),这开始了用户空间的初始化。 - 启动服务和登录界面:根据系统配置,启动各种系统服务和提供用户登录界面。