uboot启动第一阶段主要做什么

这只是博主的个人见解,如有错误之处,还望指出,一起交流学习!!

uboot的start.s分析:


start.s:
1、globl _start(构建异常向量表)
2、set_l2cache_auxctrl_cycleL2(ache相关初始化)  关闭MMU

3、读启动信息,判断用那种方式启动
ldr sp, =0xd0036000(设置栈,0xd0036000 SRAM中用来放栈的) lowlevel_init()

4、lowlevel_init:
关看门狗,SRAM 初始化,开发板的供电锁存
判定当前代码执行的位置在SRAM中还是DDR中,主要是通过判断这俩个来确定还要不要对系统时钟和DDR进行初始化
system_clock_init初始化系统时钟 mem_ctrl_asm_init初始化DDR(动态内存) 由上面的判断来确定要不要执行
uart_asm_init 串口初始化,并且初始化完成发送一个 O
tzpc_init 可信任区域初始化
pop {pc} 返回前通过串口打印'K',串口打印OK表明lowlevel_init,初始化完成
开发板再次置锁
再次设置栈,这次是把栈设置到DDR里面去的
再次判断程序是在DDR还是SRAM中运行,是否进行uboot的relocate
uboot重定位(mmcsd_boot)
使能域访问,设置cp15相关的寄存器

 

设置TTB,TTB就是translation table base,转换表基地址

 

        _start_armboot,第一阶段结束,跳转到第二阶段

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页