对start.s中的lowlevel_init 函数对应的lowlevel_init.s文件的分析:
文件相关:
lowlevel_init.s是中最重要的就是包含了lowlevel_init函数的实现部分,而lowlevel_init是start.中很重要的一个函数。
ldr sp, =0xd0036000 /* end of sram dedicated to u-boot */
sub sp, sp, #12 /* set stack */
mov fp, #0
bl lowlevel_init /* go setup pll,mux,memory */
在start.s中第一次设置栈就是用来运行这个函数。
文件的分析:
1.进行一些与我们start.s启动主线不太相关的初始化操作:
检查复位的状态:检查的原因是硬件的复位分为好几种状态,除了真正按下复位按键进行硬件的复位这种成为冷启动外,还存在热启动与睡眠状态,所以在这里确定我们的复位状态到底是哪种情况。
/* check reset status */
ldr r0, =(ELFIN_CLOCK_POWER_BASE+RST_STAT_OFFSET)
ldr r1, [r0]
bic r1, r1, #0xfff6ffff
cmp r1, #0x10000
beq wakeup_reset_pre
cmp r1, #0x80000
beq wakeup_reset_from_didle
IO状态的复位;
/* IO Retention release */
ldr r0, =(ELFIN_CLOCK_POWER_BASE &