Android启动流程-Loader

Android 启动流程Loader

  • bootloaderu-boot负责 读取设备设备树(The devicetree is a structure for describing hardware.)配置,存储到内存中
  • 内核命令行参数 传给内核 (包括设备树) ,设备树 解析 在kernel环节 - of_flat_dt_init
    Android启动流程

针对RK芯片

  • Boot Rom : 当按下电源时,BoomRom 会首先运行,它会检测并初始化硬件设备,加载引导程序启动内核
    • 确保设备能够正常启动
    • 加载能支持Android系统Bootloader引导程序
    • 存在于芯片内部,通常采用汇编编写。
      bootloader启动流程
      Boot Produre Flow流程

Loader流程

RK平台 bin文件所在位置:rkbin/bin/rk35 (不开源).

uboot源码: u-boot/

  • 类似 x86 平台 BIOS初始化满足 Linux内核 能够启动。
    RK3562 Boot阶段启动流程

详细流程

  • RK3562 启动日志 为例 进行分析
  • ddr.bin 运行: 对DDR进行初始化,频率从324MHz切换到1332MHz,并进行一些 读写训练操作
    DDR进行初始化操作
  • 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
    SPL初始化
  • 运行BL31 ,初始化与运行BL32
    运行BL31 初始化与运行BL32
  • uboot运行 : 从atf切换到uboot之后,uboot分别执行以下操作
    • 打印一些必要的信息:板型、串口、内存、系统内存初始化、代码重定位情况;
    • 获取MMC存储器信息,打印当前启动的存储器(atags);
    • 获取存储器分区情况并加载内核设备树;
    • 初始化I2C0,初始化PMIC电源芯片,相关芯片供电电压I0电源域;
    • 初始化DRM框架以及显示器接口(HDMI);
    • 初始化时钟树
      uboot运行
  • 内核加载:autoboot 倒计时为 0 后,会进入内核加载阶段
    • 加载Android固件
    • 加载Linux系统内核,依次加载Kernel Image内核映像,Ramdisk Image 内存文件系统映像与 Flat Device Tree设备树到 DDR内存
  • 进入Starting Kernel … uboot 生命周期结束,进入 内核进程
    加载内核

内核命令行参数

内核命令行参数是 bootloader启动时通过命令行传递给内核的参数,它们提供了内核的启动选项或硬件配置信息

  • uboot 只要 把dtb写到内存,然后在启动内核时,把这块内存起始地址传给内核(通过r2 寄存器)

参考阅读

posted @ 2025-04-12 20:22  瓶子的跋涉  阅读(77)  评论(0)    收藏  举报