MLO 源码分析
_start———–>reset————–>关闭中断 (arch\arm\cpu\armv7\start.S, arch/arm/lib/vector.S)
|———->cpu_init_crit————->lowlevel_init————->关键寄存器的配置和初始化
|———->cpu_init_cp15———–>关闭MMU,TLB
| ———->_main————–>进入板级初始化,具体看下面
一、Arch 相关的代码分析:
① _start 是整个U-Boot入口
_start 位于vectors.S中
-> ARM_VECTORS -> b reset (位于 start.S)
② 在lowlevel_init中,板级代码,不同的平台不一样,主要完成 (arm\mach-omap2\lowlevel_init.S):
我们的uboot中初始化了启动参数,例如上面的代码
二、板级代码分析:
_main————–>board_init_f_alloc_reserve —————>堆栈、GD、early malloc空间的分配 | ————->board_init_r —————>uboot relocate后的板级初始化 |
板级代码主要关注board_init_f 与 board_init_r
MLO 与 u-boot.img 代码走读流程大致一样, 只不过u-boot.img 完成的功能更多, MLO仅仅需要代码搬运需要初始化的相关硬件资源。
注意u-boot.img 由于一个自我从定向的过程, MLO将u-boot.img加载到低地址运行, 然后u-boot.img 将自己搬运到高地址处继续执行。主要是为了给kernel 留出运行空间。