您的位置:首页 > 其它

kernel启动流程

2016-05-11 20:00 260 查看
ROM code:

没有看过代码,在固化ROM里执行,估计是初始化一些必要的东西,然后把bootloader加载到sram里。sram可以直接总线访问,ddr需要初始化才能使用

bootloader:

初始化芯片和其他,ddr_init,把uboot从flash里加载到ddr里准备执行,跳转到uboot

uboot

start.s->board.c->main.c

start.S

更改cpsr寄存器的值,实际上就是关闭irq和fiq,切换模式到el1。

flush dcache,disable icache,invalidate tlb。

跳转到lowlevel_init函数。

lowlevel_init:

gic_init->enable irq in el3->push slave cpu to wait main cpu correct setup spin table ->disable irq in el3

main cpu ->b main

跳转到main函数:

arm/arm/lib目录下的crt0_64.S里的_main函数:

为gd_t分配stack空间跳转到board_init_f执行

从CONFIG_SYS_INIT_SP_ADDR地址开始分配gd_t大小的空间暂时放gd_t。

CONFIG_SYS_INIT_SP_ADDR为ram高位物理地址顶减去(4K+gd_t大小)

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: