此文来源:SD博客,希望帮到更多的人:http://blog./zhaocju-boot支持许多CPU,以及一些常见的开发板。本文以u-boot-,简要介绍一下u-boot在smdk2410上的启动流程。 首先系统是从arch/arm/cpu/,并且实际开始执行的代码是从第117行开始:117:start_code:118: /*119: *setthecputoSVC32mode120: */121: mrs r0,cpsr122: bic r0,r0,#0x1f123: orr r0,r0,#0xd3124: msr cpsr,r0上述代码的含义是设置cpu为SVC32模式,即超级保护模式,用于操作系统使用。 140:#ifdefCONFIG_S3C24X0141: /*turnoffthewatchdog*/142:143:#ifdefined(CONFIG_S3C2400)144:# definepWTCON 0x**********:# defineINTMSK 0x14400008 /*Interupt-Controllerbaseaddresses*/146:# defineCLKDIVN 0x14800014 /*clockdivisorregister*/147:#else148:# definepWTCON 0x53000000149:# defineINTMSK 0x4A000008 /*Interupt-Controllerbaseaddresses*/150:# defineINTSUBMSK 0x4A00001C151:# defineCLKDIVN 0x4C000014 /*clockdivisorregister*/152:#endif153:154: ldr r0,=pWTCON155: movr1,#0x0156: str r1,[r0]157:158: /*159: *maskallIRQsbysettingallbitsintheINTMR-default160: */161: movr1,#0xffffffff162: ldr r0,=INTMSK163: str r1,[r0]164:#ifdefined(CONFIG_S3C2410)165: ldr r1,=0x3ff166: ldr r0,=INTSUBMSK167: str r1,[r0]168:#endif169:170: /*FCLK:HCLK:PCLK=1:2:4*/171: /*defaultFCLKis120MHz!*/172: ldr r0,=CLKDIVN173: movr1,#3174: str r1,[r0]175:#endif /*CONFIG_S3C24X0*/该段代码的含义为,先定义几个需要的寄存器,然后关闭开门狗定时器,以及屏蔽所有中断和子中断,最后设置三个时钟频率之间的比值。 181:#ifndefCONFIG_SKIP_LOWLEVEL_INIT182: bl cpu_init_crit183:#endif在第182行中,程序跳转到cpu_init_crit中,,函数的位置在第328行至第356行,它的作用是设置一些重要的寄存器(如MMU和caches等)以及内存时序。其中在第353行,程序又跳转到了lowlevel_init函数,它是在board/samsung/,这个文件的目的就是为了设置内存的时序。 186:call_board_init_f:187: ldr sp,=(CONFIG_SYS_INIT_SP_ADDR)188: bic sp,sp,#7/*8-pliance*/189: ldr r0,=0x00000000190: bl board_init_f从cpu_init_crit返回后,来到了调用board_init_f的函数处。首先进行堆栈的设置,然后就跳转到board_init_f函数,其中传递给该函数的参数为0。board_init_f这个函数是在arch/arm/,函数的位置是在第268行至第422行,它的作用是初始化开发板。需要注意的是,此时程序是在flash中运行的。 下面我们就来分析boar
u-boot-2011.06启动流程分析 来自淘豆网m.daumloan.com转载请标明出处.