u-boot之start.S分析(四)

本文详细分析了U-Boot在start.S中的栈重新设置和BSS段清理过程。栈指针被配置到DDR中,然后清理BSS段以准备执行C代码。最后,通过跳转指令进入C函数start_armboot,在DDR中继续执行第二阶段。此过程涉及内存布局、栈操作和初始化步骤。
摘要由CSDN通过智能技术生成

再次设置栈

skip_hw_init:
	/* Set up the stack						    */
stack_setup:
#if defined(CONFIG_MEMORY_UPPER_CODE)
	ldr	sp, =(CFG_UBOOT_BASE + CFG_UBOOT_SIZE - 0x1000)
#else
	ldr	r0, _TEXT_BASE		/* upper 128 KiB: relocated uboot   */
	sub	r0, r0, #CFG_MALLOC_LEN	/* malloc area                      */
	sub	r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo                        */
#if defined(CONFIG_USE_IRQ)
	sub	r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
#endif
	sub	sp, r0, #12		/* leave 3 words for abort-stack    */
#endif
  • 通过查询可知,我们是定义了CONFIG_MEMORY_UPPER_CODE的,因此栈指针sp被设置为CFG_UBOOT_BASE + CFG_UBOOT_SIZE - 0x1000,即为0xc3e00000+2x1024x1024-0x1000=0xC3FFF000,对应的真实地址为0x33fff000
  • 意思就是在uboot的地址上加2M再减4K的地方,由于ARM是满减栈,因此从此位置开始往下大约2M就是栈的使用空间

清理BSS段

clear_bss:
	ldr	r0, _bss_start		/* find start of bss segment        */
	ldr	r1, _bss_end		/* stop here                        */
	mov r2, #0x00000000		/* clear                        */
  • _bss_start_bss_end来源于链接器脚本(中间省略一层定义的描述)
. = ALIGN(4);
__bss_start = .;
.bss : { *(.bss) }
_end = .;

启动start_armboot

clbss_l:
	str	r2, [r0]		/* clear loop...                    */
	add	r0, r0, #4
	cmp	r0, r1
	ble	clbss_l
	
	ldr	pc, _start_armboot

_start_armboot:
	.word start_armboot
  • 至此,第一阶段分析完成
  • start_armboot函数位于uboot/lib_arm/board.c中,是一个C语言函数
  • 最后通过lpr远跳转指令执行函数start_armboot
  • 远跳转的含义就是这句话加载的地址和当前运行地址无关,而和链接地址有关
  1. u-boot之start.S分析(一)中,将栈设置到了内部的SRAM中,大概只有8K大小,uboot在此执行部分代码
  2. u-boot之start.S分析(三)中,将栈重新设置到了已经初始化完成的DDR中
  3. 最后再重新规划DDR的使用,重新设置栈,设置完成后跳转到DDR中执行第二阶段。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贱贱的剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值