kernel启动流程

来源:互联网 发布:淘宝8.8 编辑:程序博客网 时间:2024/05/29 02:46

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大小)

 

 

 

 

 

0 0
原创粉丝点击