u-boot_2013.01启动流程分析(三)(for exynos4412)

本文详细分析了u-boot 2013.01在Exynos4412平台上的启动流程,包括CPU模式设置、异常向量表、内存分配和重定向等步骤。特别地,文章讨论了board_init_f函数在第一阶段和第二阶段的不同作用,以及如何为u-boot的内存重定向预留空间,以确保Linux内核的顺利运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

在开始分析u-boot重定向之前,先总结一下前两小节u-boot在运行的过程中都有哪些操作:

1.设置CPU为SVC模式
2.设置异常向量表
3.关闭Cache和MMU
   SOC芯片的设置
4.处理唤醒的条件
5.判断是否在内存中运行
6.如果不在内存中运行,则初始化系统时钟和内存控制器(第一阶段)
   如果在内存中运行,则不需要初始化系统时钟和内存控制器(第二阶段)
7.初始化uart 
8.设置了sp
9.调用board_init_f
-----------------------------------------------------------------
第一阶段代码:
board_init_f  功能将u_boot从存储器搬移到内存,跳到内存中运行
第二阶段代码:
board_init_f 
(1)执行了初始化序列表 (板子相关的初始化操作)
(2)为u_boot重定向预留内存


    



最上面两幅图的 board_init_f 分别定义的函数 分别是u_boot 第一与第二阶段的board_init_f代码,分别实现自搬移到内存和初始化序列表等不同的功能。具体实现是 : 自搬移函数所在的mmc_boot.c文件所在目录下有个makefile文件,它的条件是 如果定义了CONFIG_SPL_BUILD 就生成 .o 文件 所以spl目录下的Makefile生成的第一阶段的u_boot中包含这个mmc_boot.o文件,因为spl目录下的Makefile中定义了 CONFIG_SPL_BUILD := y ,而生成第二阶段的U_boot的Makefile中没有定义这一句话,所以 它就会生成右面这幅图的 . o 文件,互不干扰。

在刚开始学习的时候,有点想不通为什么spl目录下的Makefile中定义了 CONFIG_SPL_BUILD := y 了,但第一阶段与第二阶段的代码还是都生成了,后来仔细想了想才明白他是有两个Makefile生成了不同阶段的u-boot(有两个,一个顶层目录下的u-boot还有一个spl目录下的u-boot),所以互不干扰。


二、u-boot的重定向之前内存的分配

源码如下:

addr = CONFIG_SYS_SDRAM_BASE + gd->ram_size;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值