您尚未登录。

楼主 # 2022-11-05 12:41:20

Quotation
会员
注册时间: 2018-10-04
已发帖子: 296
积分: 259.5

start.S是用什么方式开始执行0x80000000附近代码的?

按照看到的资料,CPU上电,BROM拷贝Flash前面一小段到SRAM,从0开始执行。然后初始化DRAM,把真正的程序拷贝到内存0x80000000,执行。
但是不理解start.S里是用哪一句跳转到执行DRAM中的代码了?
看到start.S里有很多 bl sys_clock_init,bl memcpy,bl boot_main这样的调用。至少前面的应该是在SRAM里,后面boot_main是在DRAM里。不知我理解的对不对?

离线

#1 2022-11-07 15:40:28

Liiunix
会员
所在地: 长春
注册时间: 2021-06-26
已发帖子: 8
积分: 8

Re: start.S是用什么方式开始执行0x80000000附近代码的?

是这样的。

xboot的话,xboot程序的开头一小段是位置无关的,BROM会把这段代码拷贝到SRAM执行,这一小段代码会初始化DDR并从SPI FLASH从加载全部代码到链接位置,然后这个时候直接跳转到真正的链接地址执行,其他的程序基本也是类似的。

离线

#2 2022-11-07 17:19:17

shaoxi2010
会员
注册时间: 2019-06-13
已发帖子: 392
积分: 336

Re: start.S是用什么方式开始执行0x80000000附近代码的?

一般也不再start.s内吧,start.s主要就是初始化runtime运行时,一般也就保护下寄存器,初始化栈位置,初始化bss,然后就进入C环境了
一般跳转运行都在很靠后面了,具体可以参考下uboot的spl实现,jump_to_image_linux函数。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn