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