02.07.2013 Views

Uboot中start.S源码的指令级的详尽解析

Uboot中start.S源码的指令级的详尽解析

Uboot中start.S源码的指令级的详尽解析

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

#endif<br />

/* default FCLK is 120 MHz ! */<br />

ldr r0, =CLKDIVN<br />

mov r1, #3<br />

str r1, [r0]<br />

/* END stuff after relocation */<br />

ldr pc, _start_armboot<br />

_start_armboot: .word start_armboot<br />

上面已经注释掉的代码,此处忽略。<br />

只看最后的那两行,意思也很简单,那就是将地址为_start_armboot中的内容,即<br />

start_armboot,赋值给PC,即调用start_armboot函数。<br />

至此,汇编语言的start.S的整个工作,就完成了。<br />

而start_armboot函数,在C文件中:<br />

u-boot-1.1.6_20100601\opt\EmbedSky\u-boot-1.1.6\board\EmbedSky\EmbedSky.c<br />

中:<br />

void start_armboot (void)<br />

{<br />

}<br />

...<br />

这就是传说中的,调用第二层次,即C语言级别的初始化了,去初始化各个设备了。<br />

其中包括了CPU,内存等,以及串口,正常初始化后,就可以从串口看到uboot的打印信息了。<br />

/*<br />

*********************************************************************<br />

****<br />

*<br />

* CPU_init_critical registers<br />

*<br />

* setup important registers<br />

* setup memory timing<br />

*<br />

*********************************************************************<br />

****<br />

*/<br />

#ifndef CONFIG_SKIP_LOWLEVEL_INIT<br />

cpu_init_crit:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!