深入MTK平台bootloader启动之【 Pre-loader -> Lk】分析笔记

本文深入解析了MTK平台中从Pre-loader加载到Lk的启动流程。首先,介绍了在ARM架构下EL级别的作用,接着详细阐述了pre-loader如何初始化硬件,如UART, GPIO, DRAM等,并加载lk到DRAM中。文章通过代码分析展示了pre-loader如何从ROM加载lk到DRAM,并进行安全检查、tz预初始化等步骤,最后跳转到lk执行。整个过程涉及到硬件初始化、安全验证和跳转操作,为理解MTK平台的启动过程提供了清晰的指导。" 122455461,11699221,全品类马壁纸素材大放送:免费、高质量资源集合,"['平面设计', '素材库', '壁纸资源', '动物图形', '设计元素']
摘要由CSDN通过智能技术生成

https://blog.csdn.net/forever_2015/article/details/53000643

1、bootloader到kernel启动总逻辑流程图

ARM架构中,EL0/EL1是必须实现,EL2/EL3是选配,ELx跟层级对应关系:

EL0 -- app

EL1 -- Linux kernel 、lk

EL2 -- hypervisor(虚拟化)

EL3 -- ARM trust firmware 、pre-loader

若平台未实现EL3(atf),pre-loader直接加载lk:

 

若平台实现EL3,则需要先加载完ATF再由ATF去加载lk:

bootloader 启动分两个阶段,一个是pre-loader加载lk(u-boot)阶段,另一个是lk加载kernel阶段。下面跟着流程图简述第一个阶段的加载流程。

1-3:设备上电起来后,跳转到Boot ROM(不是flash)中的boot code中执行把pre-loader加载起到ISRAM, 因为当前DRAM(RAM分SRAM跟DRAM,简单来说SRAM就是cache,DRAM就是普通内存)还没有准备好,所以要先把pre-loader load到芯片内部的ISRAM(Internal SRAM)中。

4-6:pre-loader初始化好DRAM后就将lk从flash(nand/emmc)中加载到DRAM中运行;

7-8:解压bootimage成ramdisk跟kernel并载入DRAM中,初始化dtb;

9-11:lk跳转到kernl初始化, kernel初始化完成后fork出init进程, 然后拉起ramdisk中的init程序,进入用户空间初始化,init进程fork出zygote进程..直到整个Android启动完成.

2、从pre-loader到lk(mt6580为例)

Pre-loader主要干的事情就是初始化某些硬件,比如: UART,GPIO,DRAM,TIMER,RTC,PMIC 等等,建立起最基本的运行环境,最重要的就是初始化DRAM.

时序图:

 

源码流程如下:

./bootloader/preloader/platform/mt6580/src/init/init.s
.section .text.start
...
 
.globl _start
...
 
    /* set the cpu to SVC32 mode */
    MRS    r0,cpsr
    BIC    r0,r0,#0x1f
    ORR    r0,r0,#0xd3
    MSR    cpsr,r0
    /* disable interrupt */
    MRS r0, cpsr
    MOV r1, #INT_BIT
    ORR r0, r0, r1
    MSR cpsr_cxsf, r0
    
...
setup_stk :
    /* setup stack */
    LDR r0, stack
    LDR r1, stacksz
...
 
entry :
    LDR r0, =bldr_args_addr
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值