u-boot主要目的是为操作系统的运行提供准备工作,根据其运行流程简单的分为四部分:_start、board_init_f、relocate_code和board_init_r。其中_start和relocate_code是运行在flash上,而board_init_f和board_init_r是运行于DRAM上的。
下面对其四个部分进行简单的介绍分析:
1、_start
这是u-boot的起始部分,程序从/u-boot/cpu/mips/start.S文件中的_start代码段开始执行的。由于此时内存未初始化,所以该部分是运行于flash上的。其主要的内容有:
(1) 对cpu相关寄存器的初始化;
(2) TLB(Translation Lookaside Buffer)初始化;
(3) 初始化一块临时内存作为栈空间scratch memory,为内存初始化之前调用c语言使用;
(4) 初始化全局符号表指针GOT pointer;
下面对其四个部分进行简单的介绍分析:
1、_start
这是u-boot的起始部分,程序从/u-boot/cpu/mips/start.S文件中的_start代码段开始执行的。由于此时内存未初始化,所以该部分是运行于flash上的。其主要的内容有:
(1) 对cpu相关寄存器的初始化;
(2) TLB(Translation Lookaside Buffer)初始化;
(3) 初始化一块临时内存作为栈空间scratch memory,为内存初始化之前调用c语言使用;
(4) 初始化全局符号表指针GOT pointer;
(5) 使用跳转命令跳转到board_init_f;
2、board_init_f该部分是在上面申请的临时内存空间中运行的,主要是内存的初始化及整个寻址空间的部分初始化。其主要是循环调用init_sequence函数指针数组中的成员,如下所示
init_fnc_t *init_sequence[] = {
octeon_boot_bus_init, // GPIO使能、flash空间映射及大小设置等;
timer_init,