You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
而关于_bss_start和_bss_end定义为.glogl即全局变量,是因为uboot的其他源码中要用<br />
到这两个变量,详情请自己去搜索源码。<br />
.globl FREE_RAM_END<br />
FREE_RAM_END:<br />
.word 0x0badc0de<br />
.globl FREE_RAM_SIZE<br />
FREE_RAM_SIZE:<br />
.word 0x0badc0de<br />
关于FREE_RAM_END和FREE_RAM_SIZE,这里只是两个标号,之所以也是声明为全局变量,是<br />
因为uboot的源码中会用到这两个变量。<br />
但是这里有点特别的是,这两个变量,将在本源码start.S中的后面要用到,而在后面用到这<br />
两个变量之前,uboot的C源码中,会先去修改这两个值,具体的逻辑是:<br />
本文件start.S中,后面有这两句:<br />
ldr pc, _start_armboot<br />
_start_armboot: .word start_armboot<br />
意思很明显,就是去调用start_armboot函数。<br />
而start_armboot函数是在:<br />
u-boot-1.1.6_20100601\opt\EmbedSky\u-boot-1.1.6\lib_arm\board.c<br />
中:<br />
┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳<br />
init_fnc_t *init_sequence[] = {<br />
。。。<br />
};<br />
cpu_init, /* basic cpu dependent setup */<br />
NULL,<br />
void start_armboot (void)<br />
{<br />
。。。<br />
init_fnc_t **init_fnc_ptr;<br />
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {<br />
}<br />
。。。<br />
}<br />
if ((*init_fnc_ptr)() != 0) {<br />
}<br />
hang ();