uboot-spl.bin分析

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

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值