好文档 - 专业文书写作范文服务资料分享网站

u-boot启动流程分析

天下 分享 时间: 加入收藏 我要投稿 点赞

先看board/smsk2410/u-boot.lds这个链接脚本,可以知道目标程序的各部分链接顺序。

OUTPUT_FORMAT(\, \, \)

/*OUTPUT_FORMAT(\, \, \)*/ OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS {

. = 0x00000000; /*指定可执行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 0x15300000

# define INTMSK 0x14400008 /* Interupt-Controller base addresses */

# define CLKDIVN 0x14800014 /* clock divisor register */ #elif defined(CONFIG_S3C2410) # define pWTCON 0x53000000

# 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频率 */ /*

* 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 r1, [r0] # endif

/* FCLK:HCLK:PCLK = 1:2:4 */ ;;FCLK用于CPU,HCLK用于AHB,PCLK用于APB

/* default FCLK is 120 MHz ! */

ldr r0, =CLKDIVN ;;根据硬件手册来设置CLKDIVN寄存器 mov r1, #3 ;;用户手册的推荐值 str r1, [r0]

#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 */

u-boot启动流程分析

先看board/smsk2410/u-boot.lds这个链接脚本,可以知道目标程序的各部分链接顺序。OUTPUT_FORMAT(\,\,\)/*OUTPUT_FORMAT(\,\,\)*/OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS{.=0x00000000;/*指定可执行image
推荐度:
点击下载文档文档为doc格式
5o83w5ymdv4n25q6ny0j2r4yi9c8hj003xi
领取福利

微信扫码领取福利

微信扫码分享