Android启动流程-Loader
Android 启动流程Loader
bootloader的u-boot负责读取设备设备树(The devicetree is a structure for describing hardware.)配置,存储到内存中内核命令行参数传给内核(包括设备树) ,设备树 解析 在kernel环节-of_flat_dt_init。
针对RK芯片
Boot Rom: 当按下电源时,BoomRom会首先运行,它会检测并初始化硬件设备,加载引导程序和启动内核。
- 确保设备能够
正常启动- 加载能支持
Android系统的Bootloader引导程序。- 存在于芯片内部,通常采用汇编编写。
Loader流程
RK平台bin文件所在位置:rkbin/bin/rk35(不开源).
uboot源码:u-boot/
- 类似 x86 平台 BIOS初始化满足 Linux内核 能够启动。
详细流程
- 以
RK3562启动日志为例 进行分析ddr.bin运行: 对DDR进行初始化,频率从324MHz切换到1332MHz,并进行一些读写训练操作
spl.bin运行:DPL板级初始化逐步MMC2(SD卡),MMC1(eMMC )寻找U-boot.img(包括atf-1,uboot,fdt,atf-2,atf-3,atf-4,atf-5,optee) ,通过atf-1运行uboot
- 运行
BL31,初始化与运行BL32
uboot运行: 从atf切换到uboot之后,uboot分别执行以下操作
- 打印一些必要的信息:
板型、串口、内存、系统内存初始化、代码重定位情况;- 获取
MMC存储器信息,打印当前启动的存储器(atags);- 获取存储器
分区情况并加载内核设备树;- 初始化
I2C0,初始化PMIC电源芯片,相关芯片供电电压与I0电源域;- 初始化
DRM框架以及显示器接口(HDMI);- 初始化
时钟树。
- 内核加载:
autoboot倒计时为 0 后,会进入内核加载阶段,
- 加载
Android固件,- 加载Linux系统内核,依次加载
Kernel Image内核映像,Ramdisk Image内存文件系统映像与Flat Device Tree设备树到DDR内存。- 进入
Starting Kernel …uboot 生命周期结束,进入内核进程
内核命令行参数
内核命令行参数是
bootloader启动时通过命令行传递给内核的参数,它们提供了内核的启动选项或硬件配置信息。
uboot只要 把dtb写到内存,然后在启动内核时,把这块内存起始地址传给内核(通过r2 寄存器)
参考阅读
- u-boot文档资料
- RK356x U-Boot研究所1.1 BootLoader引导过程浅析
Rockchip RK3562 TRM Part1 V1.1-20240618- 什么是BootRom
- 设备树标准网站










浙公网安备 33010602011771号