1、_start
_start是u-boot启动后的第一个执行地址,对于armv7来说,它就是简单的跳转到rest处执行和初始化异常向量表
vim arch/arm/lib/vectors.S
_start:
#ifdef CONFIG_SYS_DV_NOR_BOOT_CFG
.word CONFIG_SYS_DV_NOR_BOOT_CFG
#endif
b 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、reset
vim arch/arm/cpu/armv7/start.S
reset:
/* Allow the board to save important registers */
b save_boot_params
save_boot_params_ret:
#ifdef CONFIG_ARMV7_LPAE
/*
* check for Hypervisor support
*/
mrc p15, 0, r0, c0, c1, 1 @ read ID_PFR1
and r0, r0, #CPUID_ARM_VIRT_MASK @ mask virtualization bits
cmp r0, #(1 << CPUID_ARM_VIRT_SHIFT)
beq switch_to_hypervisor
switch_to_hypervisor_ret:
#endif
/*
* disable interrupts (FIQ and IRQ), also set the cpu to SVC32 mode,
* except if in HYP mode already
*/
mrs r0, cpsr
and r1, r0, #0x1f @ mask mode bits
teq r1, #0x1a @ test for HYP mode
bicne r0, r0, #0x1f @ clear all mode
u-boot-2016.11基于S5PV210启动简易分析

本文分析了u-boot-2016.11在S5PV210平台上的启动过程,从_start开始,详细阐述了如何设置堆栈指针、初始化全局数据、设置串口波特率、显示选项、初始化CPU信息,并最终调用board_init_r完成后续初始化工作。
最低0.47元/天 解锁文章
2902

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



