当前位置: 首页 > news >正文

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

上电后运行的第一支文件:arch/arm/cpu/armv8/start.S

CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK=1

#include <asm/arch/boot0.h>

跳转到 arch/arm/include/asm/arch-rockchip/boot0.h

CONFIG_SPL_BUILD=1

b 1f

ROCKCHIP_EARLYRETURN_TO_BROM=no

TINY_FRAMEWORK=no

b reset

reset 位于 arch/arm/cpu/armv8/start.S

b save_boot_params

save_boot_params 位于arch/arm/mach-rockchip/bootrom.c

Rockchip BROM 有设置stackpointer, 此处可以正常运行c code

1. ret = setjmp(brom_ctx);

setjmp 位于arch/arm/lib/setjmp_aarch64.S

该函数将regs 保存到brom_ctx, 注意

a.此处需将brom_ctx强制声明为data section, bss 还未初始化,初始化时会将其清掉

b. 保存的LR等于save_boot_params的返回地址,即save_boot_params_ret

c. mov x0, #0 => ret 等于0

2. check_back_to_brom_dnl_flag

CONFIG_ROCKCHIP_BOOT_MODE_REG 0xff320300

BROM_BOOTSOURCE_ID_ADDR = no

return false

goto save_boot_params_ret

3. 设置中断向量相关,根据当前EL级别跳转到3,2,1

CONFIG_POSITION_INDEPENDENT=n

CONFIG_SYS_RESET_SCTRL=n

	adr	x0, vectorsswitch_el x1, 3f, 2f, 1f
3:	msr	vbar_el3, x0mrs	x0, scr_el3orr	x0, x0, #0xf			/* SCR_EL3.NS|IRQ|FIQ|EA */msr	scr_el3, x0msr	cptr_el3, xzr			/* Enable FP/SIMD */
#ifdef COUNTER_FREQUENCYldr	x0, =COUNTER_FREQUENCYmsr	cntfrq_el0, x0			/* Initialize CNTFRQ */
#endifb	0f

4 cache 相关设置

CONFIG_SYS_ICACHE_OFF=n

    mov x1, #CR_Iswitch_el x2, 3f, 2f, 1f
3:	mrs	x0, sctlr_el3orr	x0, x0, x1msr	sctlr_el3, x0
#ifndef CONFIG_SUPPORT_USBPLUGmsr	daifclr, #4			/* Enable SError. SCR_EL3.EA=1 was already set in start.S */
#endifb	0f...0:isb

5 SMP 相关设置

CONFIG_ARMV8_SET_SMPEN=n, 跳过这段

6

/* Apply ARM core specific erratas */

bl apply_core_errata //arm 相关errata, 暂不具体分析

/* Processor specific initialization */

bl lowlevel_init  //RK3399 没有相关定义,使用start.S 中的weak function

CONFIG_IRQ=1

CONFIG_GICV3=1

7 如下都是n, 跳过分析

CONFIG_ARMV8_SPIN_TABLE=n

CONFIG_ARMV8_MULTIENTRY=n

CONFIG_ARM_SMP=n

master_cpu:

bl _main //至此跳转到arch/arm/lib/crt0.S,

相关文章:

  • JVM-类加载子系统
  • 机器学习极简入门:从基础概念到行业应用
  • 锚定基础与拥抱融合:C 语言在编程教育与技术社区的破圈之路
  • 全模态具身智能:从 VLM 到 MLLM
  • Java大师成长计划之第18天:Java Memory Model与Volatile关键字
  • 单片机-STM32部分:13、PWM
  • STM32智能窗帘系统:从零到一的开发实战
  • 开源字体设计工具字玩 FontPlayer
  • “爱生活”小项目问题总结
  • 【大模型】解决最新的Dify1.3.1版本 无法基于Ollama成功添加模型
  • LabVIEW的PID参数自适应控制
  • Nacos 从入门到实践:服务注册与配置中心完整指南
  • 兔子队列?RabbitMQ详解(1)
  • Springboot中如何自定义配置类
  • 【Tools】git使用详解以及遇到问题汇总
  • 【iOS】Tagged Pointer
  • 从0开始学习大模型--Day06--大模型的相关网络架构
  • 【Bluedroid】HID DEVICE 连接的源码分析
  • LWIP的ICMP协议
  • C++模板梳理
  • 内塔尼亚胡:以军将在未来几天“全力进入”加沙
  • “一码难求”的Manus开放注册但价格不菲,智能体距离“实用”还有多远
  • 广东:十年后省级水网主骨架全面建成,与国家骨干网互联互通
  • 最高降九成!特朗普签署降药价行政令落地存疑,多家跨国药企股价收涨
  • 影子调查丨三名“淘金客”殒命雪峰山:千余废弃金矿洞的监管难题
  • 人大新闻教育70年丨16759门课程里的时代密码