- 论坛徽章:
- 0
|
下半部的启动代码是在arch/arm/head.S
GBotHalfEntry:
b L1
.word GB_MAGIC_BH
.word (g_pGBiosEnd - GBotHalfEntry)
vIntTab:
.word HandleUndef
.word HandleSWI
.word HandleIabort
.word HandleDabort
.word HandleIRQ
.word HandleFiq
L1:
msr cpsr, #(ARM_MODE_IRQ | ARM_INT_MASK)
ldr sp, =IRQ_STACK_BASE
msr cpsr, #(ARM_MODE_FIQ | ARM_INT_MASK)
ldr sp, =FIQ_STACK_BASE
msr cpsr, #(ARM_MODE_SVC | ARM_INT_MASK)
mov sp, #SVC_STACK_BASE
ldr r0, =vIntTab
mov r1, #40
ldm r0, {r2, r3, r4, r5, r6, r7}
stm r1, {r2, r3, r4, r5, r6, r7}
mov fp, #0
bl main
0:
b 0b |
ldr r0, =vIntTab // 真正的中断向量表
mov r1, #40
ldm r0, {r2, r3, r4, r5, r6, r7}
stm r1, {r2, r3, r4, r5, r6, r7}
上面的指令是将上半部的中断向量表的跳转地址重置 如下即是新的跳转表
vIntTab:
.word HandleUndef
.word HandleSWI
.word HandleIabort
.word HandleDabort
.word HandleIRQ
.word HandleFiq |
|