u-boot-2011.06啟动流程分析.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
u-boot-2011.06啟动流程分析

此文来源:赵春江老师的CNSD博客,希望帮到更多的人:/zhaocj/zhaocju-boot支持许多CPU,以及一些常见的开发板。本文以u-boot-2011.06这个最新版本为例,简要介绍一下u-boot在smdk2410上的启动流程。?首先系统是从arch/arm/cpu/arm920t目录下的start.s文件开始执行,并且实际开始执行的代码是从第117行开始:117:start_code:118: /*119: * set the cpu to SVC32 mode120: */121: mrs? r0, cpsr122: bic?? r0, r0, #0x1f123: orr?? r0, r0, #0xd3124: msr? cpsr, r0上述代码的含义是设置cpu为SVC32模式,即超级保护模式,用于操作系统使用。?140:#ifdef CONFIG_S3C24X0141: /* turn off the watchdog */142:143:# if defined(CONFIG_S3C2400)144:#? define pWTCON??? 0#? define INTMSK???? 0?? /* Interupt-Controller base addresses */146:#? define CLKDIVN?? 0?? /* clock divisor register */147:#else148:#? define pWTCON??? 0x53000000149:#? define INTMSK???? 0x4A000008?? /* Interupt-Controller base addresses */150:#? define INTSUBMSK???? 0x4A00001C151:#? define CLKDIVN?? 0x4C000014?? /* clock divisor register */152:# endif153:154: ldr?? r0, =pWTCON155: mov r1, #0x0156: str??? r1, [r0]157:158: /*159: * mask all IRQs by setting all bits in the INTMR - default160: */161: mov r1, #0xffffffff162: ldr?? r0, =INTMSK163: str??? r1, [r0]164:# if defined(CONFIG_S3C2410)165: ldr?? r1, =0x3ff166: ldr?? r0, =INTSUBMSK167: str??? r1, [r0]168:# endif169:170: /* FCLK:HCLK:PCLK = 1:2:4 */171: /* default FCLK is 120 MHz ! */172: ldr?? r0, =CLKDIVN173: mov r1, #3174: str??? r1, [r0]175:#endif?? /* CONFIG_S3C24X0 */该段代码的含义为,先定义几个需要的寄存器,然后关闭开门狗定时器,以及屏蔽所有中断和子中断,最后设置三个时钟频率之间的比值。?181:#ifndef CONFIG_SKIP_LOWLEVEL_INIT182: bl??? cpu_init_crit183:#endif在第182行中,程序跳转到cpu_init_crit中,它也是在start.s文件中,函数的位置在第328行至第356行,它的作用是设置一些重要的寄存器(如MMU和caches等)以及内存时序。其中在第353行,程序又跳转到了lowlevel_init函数,它是在board/samsung/smdk2410目录下的lowlevel_init.s文件中定义的,这个文件的目的就是为了设置内存的时序。?186:call_board_init_f:187: ldr?? sp, =(CONFIG_SYS_INIT_SP_ADDR)188: bic?? sp, sp, #7 /* 8-byte alignment for ABI compliance */189: ldr?? r0,=0x00000000190: bl??? board_init_f从cpu_init_crit返回后,来到了调用board_init_f的函数处。首先进行堆栈的设置,然后就跳转到board_init_f函数,其中传递给该函数的参数为0。board_init_f这个函数是在arch/arm/lib目录下的board.c文件内定义的

文档评论(0)

sd47f8cI + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档