我正在研究Marvell Armada A388 SoC(88F6828,manual)(ARMv7,Cortex-A)的内部结构,并研究SoC的U-boot源代码,从而学习低级ARM体系结构。我在crt0.S中使用该指令设置堆栈,并在以后使用了一些指令:
ldr r0, =(CONFIG_SYS_INIT_SP_ADDR)
对于我的董事会,CONFIG_SYS_INIT_SP_ADDR
中的arch/arm/mach-mvebu/include/mach/config.h
被定义为
/* end of 16M scrubbed by training in bootrom */
#define CONFIG_SYS_INIT_SP_ADDR 0x00FF0000
他们是如何获得此地址的(“擦洗”评论的确切含义/原因为何)? MMU此时已禁用,因此物理地址为0x00FF0000,将通过迭代内部寄存器空间中的地址窗口进行映射。根据{{3}},覆盖0x00FF0000的窗口是可配置窗口19(u-boot尚未更改任何窗口):
因此,该地址将解析为DRAM中的地址。但是,DRAM尚未初始化。他们只是随意选择地址,为什么我们要在初始化/初始化DRAM控制器之前使用DRAM?我对下次如何发现自己的东西很感兴趣。