- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
这个链接脚本,可以知道目标程序的各先看 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/starto ,那么U-Boot的入口指令一
定位于这个程序中。下面详细分析一下程序跳转和函数的调用关系以及函数 实现。
1 . Stage1 : cpu/arm920t/start.S
这个汇编程序是 U-Boot的入口程序,开头就是复位向量的代码
K£it
TWtTl^rfUp
irdt_seqiieii£e [:
mkii_loop()
U-Boot启动代码流程图
_start : b reset // 复位向量;;设置异常向量表
ldr pc , _undefined_instruction
ldr pc , .software」n terrupt
ldr pc , _prefetch_abort
ldr pc , _data_abort
ldr pc , _not_used
ldr pc ,」rq //中断向量
ldr pc , _fiq //中断向量
/ * the actual reset code */
reset : //复位启动子程序
/ *设置CPU为SVC32模式*/
mrs r0 ,cpsr
bic r0 ,rO,#Ox1f ;;位清除,将某些位的值置 0 : r0 = r0 AND ( !0x1f)
orr r0 ,r0 ,#0xd3 ;;逻辑或,将r0与立即数进行逻辑或,放在r0中(第 一个)
msr cpsr ,r0
/*关闭看门狗*/
/ * turn off the watchdog */
#if defined (CONFIG_S3C2400 )
define pWTCON 0define INTMSK 0/ addresses */
define CLKDIVN 0/ #elif defined (CONFIG_S3C2410
define pWTCON 0define INTMSK 0x4A000008 / addresses */
Interupt -Controller base
* clock divisor register */
)
Interupt - Controller base
# define INTSUBMSK 0x4A00001C
# define CLKDIVN 0x4C000014 /
clock divisor register */
#endif
#if defined (CONFIG S3C2400 ) || defined (CONFIG S3C2410 )
Idr r0 , = pWTCON
mov r1 , #0x0
str r1 , [r0]
/*禁止所有中断和设置 CPU频率*/
/ *
* mask all IRQs by setting all bits in the INTMR - default
*/
mov r1 , #0xffffffff
ldr r0 ,=INTMSK
str r1 , [r0]
if defined (CONFIG_S3C2410 )
ldr r1 , = 0x3ff
ldr r0 ,=INTSUBMSK
str
原创力文档


文档评论(0)