uboot初始化流程

.global _start

_start:
	b reset

reset:
	b save_boot_params

.align 4
save_boot_params:
	 b save_boot_params_ret

// 禁用中断(FIQ 和 IRQ),将 CPU 设置为 SVC32 模式,除非已经处于 HYP 模式
save_boot_params_ret:
	mrs r0, cpsr     @ 状态寄存器到通用寄存器的传送指令,读取 cpsr 的值到 r0 寄存器中
	and r1, r0, #0x1f  @ r0 按位与 #0x1f,结果保存到 r1 中,#0x1f 保存工作模式,清除工作状态,FIQ 中断,IRQ 中断
	teq r1, #0x1a    @ 相等测试指令,r1 与 #0x1a 做异或操作
	bicne r0, r0, #0x1f     @ 如果 r1 = 0x1a 将 r0 和 0x1f 按位与并将结果是1的位清除,结果保存到 r0 中,清除 r0 中的模式标志位
	orrne r0, r0, #0x13     @ 将 r0 和 0x13 按位或操作,结果保存到 r0 中,设置 svc 模式
	orr r0, r0, #0xc0       @ 禁用 IRQ 和 FIQ 模式
	msr cpsr, r0   @ 通用寄存器到状态寄存器的指令传送,将 r0 的值给到 cpsr
	mrc p15, 0, r0, c1, c0, 0   @ 读取 CP15 中的 c1寄存器的值到 r0 寄存器中,这里是读取 SCTLR 寄存器的值
	bic r0, #0x2000             @ 设置 SCTLR 寄存器中的 V = 0
	mcr	p15, 0, r0, c1, c0, 0   @ 将 r0 寄存器的值重写写入到寄存器 SCTLR 中
	ldr r0, =_star          @ 将 r0 寄存器值设置为 _start,_start 是整个 uboot的入口地址
	mcr	p15, 0, r0, c12, c0, 0   @ 将r0 寄存器的值写入到 CP15的c12寄存器中,设置向量表地址

	bl	cpu_init_cp15      @ 设置 cp 15寄存器(cache,mmu,TLBs)
	bl	cpu_init_crit      @ 设置关键寄存器和初始化
	bl	_main              @ 跳转到 _main,进入板级初始化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值