u-boot的启动过程
1.start.s文件
此汇编文件是u-boot启动的第一个文件,首先确定是冷启动还是热启动,boot_cold or boot_warm
通过对r21写0x01(cold) or ox02(warm)完成。
接着在boot_warm中:
(1)判断是否定义CONFIG_COGENT,若定义 则跳转到cogent_init_8260。
lis r4, (CFG_IMMR+IM_REGBASE)@h
lis r3, CFG_IMMR@h
stw r3, IM_IMMR@l(r4)
lwz r3, IM_IMMR@l(r4)
stw r3, 0(r0)
lis r3, CFG_SYPCR@h
ori r3, r3, CFG_SYPCR@l
stw r3, IM_SYPCR@l(r4)
lwz r3, IM_SYPCR@l(r4)
stw r3, 4(r0)
lis r3, CFG_SCCR@h
ori r3, r3, CFG_SCCR@l
stw r3, IM_SCCR@l(r4)
lwz r3, IM_SCCR@l(r4)
stw r3, 8(r0) 实际上就是对一系列的寄存器初始化,其中的宏定义在对应的/include/config/xx.h对应的处理器的头文件中定义。
(2)如果定义CFG_DEFAULT_IMMR,将CFG_IMMR写入到IMMR中对应的IMMR基地址寄存器的位置,即0x01a8
(3)bl init_8260_core 跳转,初始化内核
这部分完成内核中大部分硬件状态和中断的出示化
(4)如果没有定义CFG_RAMBOOT,清除OR0,计算在FLASH中跳转的绝对地址。
(5)紧接着会跳转到c语言部分
cpu_init_f board_init_f