大家好。我最近在学习U-Boot(版本为2013-05),但是在分析源码的时候,有一个疑惑。
U-boot的两个阶段(生成MLO和u-boot.img)是公用一个start.S的,但是在start.S中有这样一段代码:
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
bl cpu_init_cp15
bl cpu_init_crit
#endif
而在include/configs/am335x_evm,.h中有这样的定义:
#ifndef CONFIG_SPL_BUILD
#define CONFIG_SKIP_LOWLEVEL_INIT
#endif
照理来说,cpu_init_cp15、 cpu_init_crit在第一阶段(SPL)会编译,而第二阶段不参与编译。
但是我编译成功后分别参考了spl下的u-boot-spl.map和顶层目录的u-boot.map(当然我这里是没指定O=的)
发现两个map文件都执行了cpu_init_cp15这个函数,我猜想可能在某个地方定义这个宏,但是我用egrep
找的时候没找到答案。主要是这个疑惑,希望了解的人可以解答一下,谢谢。