1. RK3588平台启动流程全景概览
RK3588作为Rockchip新一代旗舰级SoC,其启动流程在嵌入式Linux系统中具有典型代表性。整个启动链路从芯片上电到系统就绪,大致可分为四个关键阶段:
-
芯片内部ROM阶段:CPU复位后首先执行固化在芯片内部的BootROM代码,完成最基础的硬件初始化,并加载第一级引导程序(通常是U-Boot SPL)。
-
U-Boot引导阶段:包括SPL(Secondary Program Loader)和完整U-Boot两个子阶段,负责初始化DDR、加载设备树、解压内核镜像等关键操作。
-
Linux内核初始化:内核解压后接管控制权,完成处理器架构相关初始化、设备树解析、驱动加载等操作,最终挂载根文件系统。
-
用户空间启动:通过init进程拉起各种系统服务,完成从内核态到用户态的过渡。
提示:RK3588的BootROM支持从多种存储介质启动(eMMC、SPI Flash、SD卡等),具体启动顺序可通过烧写工具配置的"boot order"参数控制。
2. U-Boot阶段深度解析
2.1 SPL的硬件初始化
SPL作为U-Boot的精简版本,主要完成以下关键任务:
c复制// 典型SPL执行流程示例
void board_init_f(ulong dummy)
{
/* 1. 时钟树初始化 */
rk3588_clock_init();
/* 2. DDR控制器配置 */
sdram_init();
/* 3. 存储接口初始化 */
mmc_initialize(NULL);
/* 4. 加载完整U-Boot镜像 */
spl_load_uboot();
}
实际调试中,开发者常通过以下手段验证SPL阶段:
- 测量关键电源轨电压(如VDD_LOG、VDD_GPU等)
- 使用示波器检查DDR时钟信号质量
- 通过UART0查看早期打印信息(需配置CONFIG_DEBUG_UART)
2.2 完整U-Boot的执行流程
当SPL将完整U-Boot加载到DDR后,执行流程进入更复杂的阶段:
- 板级初始化:通过
