U-Boot代码执行流程详解

嵌入式技术

1368人已加入

描述

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相关的初始化代码通常位于如下路径:

代码

板级相关的初始化代码通常位于如下路径:

代码

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分