uboot-spl.bin
本篇文章中,主要讨论SPL这个文件的作用及代码流程
文章目录
前言
uboot-spl 的全程叫做 uboot-second program loader (uboot 第二加载程序,第一加载程序是原厂的程序IBR)
一、uboot-spl作用是什么?
1.初始化默认串口
2.设置GD结构体
3.拷贝主要uboot镜像到DDR处,然后跳转执行新的uboot
二、uboot-spl执行流程
1.文件流
文件流如下:

2.代码流
(1)vectors.S
#include <config.h>
.globl _start //定义一个全局变量 _start
.section ".vectors", "ax" //定义一个段叫.vectors
_start:
b reset //跳转到reset处,下面都不用看,我们去看reset函数
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
(2)start.S
.globl reset //定义一个全局变量reset
reset:
/*
* set the cpu to SVC32 mode 这里是系统操作我们不用细看
*/
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0
/*
* we do sys-critical inits only at reboot,
* not when booting from ram!
*/
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
bl cpu_init_crit //这里要看,但是跟我们要表达的不一样,可以当额外知识补充,主要包括了cpu内部cache等操作
#endif
bl _main //不想看上面的那个函数,我们就直接去看_main
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
cpu_init_crit: //看这里
/*
* flush D cache before disabling it
*/
mov r0, #0
flush_dcache:
mrc p15, 0, r15, c7, c10

uboot-spl.bin是U-Boot的第二加载程序,主要负责初始化串口、设置GD结构体以及将主U-Boot镜像拷贝到DDR中执行。文章详细阐述了其执行流程,包括vectors.S中的中断向量设置,start.S中的CPU初始化,crt0.S中的堆栈设置和board_init_f.c中的NANDFlash加载U-Boot到内存的过程。

1万+

被折叠的 条评论
为什么被折叠?



