嵌入式技术
0. 概述
U-Boot通常是从架构相关的汇编文件(尾缀为大写S的汇编文件意为可链接)中获取第一条执行的指令,例如:
在以上所列出的汇编文件中,主要执行如下三个函数:
完整的执行流程如下图所示:
U-Boot代码执行流程
1. lowlevel_init()
不同架构类型的处理器会单独定义lowlevel_init.S文件,例如:
该函数的基本功能是使得CPU可以获取、执行到board_init_f()函数。在此函数中没有栈信息,不能设置SDRAM和控制台。
2. board_init_f()
为执行board_init_r做准备,需要初始化两个关键功能:SDRAM和串口。
在此阶段,global_data已经可以使用,栈信息位于SRAM中。由于BSS段仍然无法使用,因此,不可以使用全局/静态变量。
若U-Boot中开启了SPL功能,则在common/spl.c代码中可以实现该函数,否则,通常以common/board_f.c中实现为准。
board_init_f()中调用的函数在数组init_sequence_f[]中定义:
3. board_init_r()
U-Boot执行到此处,已经进入到正常的功能代码调用流程,例如设备驱动、命令行、镜像搬移加载等功能。
若U-Boot中开启了SPL功能,则在common/spl.c代码中可以实现该函数,否则,通常以common/board_r.c中实现为准。
board_init_r()中调用的函数在数组init_sequence_r[]中定义:
以上所有的功能相关的初始化中,CPU相关的初始化代码通常位于如下路径:
板级相关的初始化代码通常位于如下路径:
全部0条评论
快来发表一下你的评论吧 !