按照看到的资料,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里。不知我理解的对不对?
离线
是这样的。
xboot的话,xboot程序的开头一小段是位置无关的,BROM会把这段代码拷贝到SRAM执行,这一小段代码会初始化DDR并从SPI FLASH从加载全部代码到链接位置,然后这个时候直接跳转到真正的链接地址执行,其他的程序基本也是类似的。
离线
一般也不再start.s内吧,start.s主要就是初始化runtime运行时,一般也就保护下寄存器,初始化栈位置,初始化bss,然后就进入C环境了
一般跳转运行都在很靠后面了,具体可以参考下uboot的spl实现,jump_to_image_linux函数。
离线