Uboot启动流程分析(基于u-boot114).doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Uboot启动流程分析(基于u-boot114)

Uboot启动流程分析(基于u-boot1.1.4) ?? ? 先分析一下u-boot启动的两个阶段,分别对应start.S和board.c这两个文件。 ??? 先看board/smsk2410/u-boot.lds这个链接脚本,可以知道目标程序的各部分链接顺序。 OUTPUT_FORMAT(elf32-littlearm, elf32-littlearm, elf32-littlearm) /*OUTPUT_FORMAT(elf32-arm, elf32-arm, elf32-arm)*/ OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { ????. = 0 /*指定可执行image文件的全局入口点,通常这个地址都放在ROM(flash)0x0位置。必须使编译器知道这个地址,通常都是修改此处来完成*/ ????. = ALIGN(4); ????.text : ????{ ?????cpu/arm920t/start.o (.text) ?????*(.text) ????} ????. = ALIGN(4); ????.rodata : { *(.rodata) } ????. = ALIGN(4); ????.data : { *(.data) } ????. = ALIGN(4); ????.got : { *(.got) } ????. = .; ????__u_boot_cmd_start = .; ????.u_boot_cmd : { *(.u_boot_cmd) } ????__u_boot_cmd_end = .; ????. = ALIGN(4); ????__bss_start = .; ????.bss : { *(.bss) } ????_end = .; }??? 第一个要链接的是cpu/arm920t/start.o,那么U-Boot的入口指令一定位于这个程序中。下面详细分析一下程序跳转和函数的调用关系以及函数实现。 1.Stage1:cpu/arm920t/start.S ??? 这个汇编程序是U-Boot的入口程序,开头就是复位向量的代码。 U-Boot启动代码流程图 _start: b reset //复位向量 ;;设置异常向量表 ???????ldr pc, _undefined_instruction ???????ldr pc, _software_interrupt ???????ldr pc, _prefetch_abort ???????ldr pc, _data_abort ???????ldr pc, _not_used ???????ldr pc, _irq //中断向量 ???????ldr pc, _fiq //中断向量 … ?/* the actual reset code */ reset: //复位启动子程序 ???????/* 设置CPU为SVC32模式 */ ???????mrs r0,cpsr ???????bic r0,r0,#0x1f ;;位清除,将某些位的值置0:r0 = r0 AND ( !0x1f) ???????orr r0,r0,#0xd3 ;;逻辑或,将r0与立即数进行逻辑或,放在r0中(第一个) ???????msr cpsr,r0 /* 关闭看门狗 */ ?/* turn off the watchdog */ #if defined(CONFIG_S3C2400) # define pWTCON 0# define INTMSK 0/* Interupt-Controller base addresses */ # define CLKDIVN 0/* clock divisor register */ #elif defined(CONFIG_S3C2410) # define pWTCON 0# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */ # define INTSUBMSK 0x4A00001C # define CLKDIVN 0x4C000014 /* clock divisor register */ #endif #if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) ????ldr r0, =pWTCON ????mov r1, #0x0 ????str r1, [r0] /* 禁止所有中断和设置CPU频率 */ ????/*

文档评论(0)

2017ll + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档