u-boot-1.3.4的start.S代码分析
代码:u-boot-1.3.4\cpu\arm920t\start.S
本段代码是uboot的stage1,主要作以下处理:
1)设置CPU为SVC32模式同时屏蔽IRQ,FIQ中断
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0
2)点亮红色LED(但是好像什么也没做)
bl coloured_LED_init
bl red_LED_on
3)如果是AT91RM9200把异常表拷到地址0x00000000处(其它CPU为什么不需要拷?)
4)如果是CONFIG_S3C2400或S3C2410关看门狗和屏蔽所有中断,以及设置FCLK:HCLK:PCLK的比例关系为1:2:4
/* turn off the watchdog */
ldr r0, =pWTCON
mov r1, #0x0
str r1, [r0]
/*
* 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 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
5)CPU低级初始化(cache,MMU,RAM timing)
bl cpu_init_crit
6)如果当前位置为FLASH, 拷贝uboot到RAM
7)设置Stage2的堆栈,清除BSS
8)跳转到Stage2的起始地址_start_armboot
ldr pc, _start_armboot
其它start.S中有下面这行代码,是以前的1.1.6上是没有的。
.balignl 16,0xdeadbeef
它的含义是以16字节边界对齐,为了对齐而越过的
地址以字为单位填冲值0xdeadbeef。我猜0xdeadbeef可能NOP指令。
阅读(3622) | 评论(0) | 转发(0) |