EBOOT经过NBOOT引导后,一般会跳转到0x30038000开始执行第一条指令。在我这EBOOT中是先执行目录下2440/Kernel/hal/arm/fw.s。这个在有些系统能够中是setup.s,总之就是从系统ResetHandle开始执行了。下面开始分析这段汇编代码,并且讲述它都做了一些什么工作:
ldr r0, = INTMSK
ldr r1, = ~BIT_BAT_FLT ; all interrupt disable, nBATT_FLT =enabled
str r1, [r0]
ldr r0, = INTSUBMSK
ldr r1, = 0x7ff ;all sub interrupt disable
str r1, [r0]
ldr r0, = INTMOD
ldr r1, = BIT_BAT_FLT ; set all interrupt as IRQ, BAT_FLT = FIQ
str r1, [r0]
ldr r1, =MISCCR ; MISCCR's Bit [22:20] -> 100
ldr r0, [r1]
bic r0, r0, #(7 << 20)
bic r0, r0, #(1 << 3)
bic r0, r0, #(1 << 13)
orr r0, r0, #(4 << 20)
str r0, [r1]
bl ARMClearUTLB
bl ARMFlushICache
ldr r0, = (DCACHE_LINES_PER_SET - 1)
ldr r1, = (DCACHE_NUM_SETS - 1)
ldr r2, = DCACHE_SET_INDEX_BIT
ldr r3, = DCACHE_LINE_SIZE
bl ARMFlushDCache
nop
nop
nop
ldr r0, = GPFCON
ldr r1, = 0x55aa
str r1, [r0]
ldr r0, = WTCON ; watch dog disable
ldr r1, = 0x0