ARMV8 RK3399 u-boot TPL启动流程分析 --crt0.S

上一篇介绍到start.S 最后一个指令是跳转到_main, 接下来分析 __main 都做了什么

arch/arm/lib/crt0.S

__main 注释写的很详细,主要分为5步

1. 准备board_init_f的运行环境

2. 跳转到board_init_f

3. 设置broad_init_f 申请的stack 和 GD

4. 完整u-boot 执行relocate_code, 将u-boot 搬到board_init_f计算出的目的地址, tpl, spl 跳回crt0

5. 设置board_init_r运行环境,完整u-boot 有些cpu 剩余工作由c_runtime_cpu_setup完成

6. 跳转到board_init_r

详细分析如下:

1. 申请reserve 空间

CONFIG_TPL_NEEDS_SEPARATE_STACK=1 CONFIG_TPL_STACK 0xff8effff

根据这些定义,x0 = 0xff8effff, 从这个位置

a,预留SYS_MALLOC_F_LEN 给malloc 使用,

b, 再预留struct global_data 给全局gd 使用,

c, 分配完后,将sp 往上移

	bic	sp, x0, #0xf	/* 16-byte alignment for ABI compliance */
	mov	x0, sp
	bl	board_init_f_alloc_reserve
	mov	sp, x0
	/* set up gd here, outside any C code */
	mov	x18, x0
	bl	board_init_f_init_reserve

2. board_init_f

代码位于arch/arm/mach-rockchip/tpl.c

CONFIG_SPL_FRAMEWORK

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值