再补充一点。在uboot的start.s文件中,关于中断向量表的代码是这样的:
#define RVECENT(f,n) \ b f; nop
#define XVECENT(f,bev) \ b f ; \ li k0,bev
.set noreorder
.globl _start .text _start: RVECENT(reset,0) /* U-boot entry point */ RVECENT(reset,1) /* software reboot */ RVECENT(romReserved,2) RVECENT(romReserved,3) .... RVECENT(romReserved,63) XVECENT(romExcHandle,0x200) /* bfc00200: R4000 tlbmiss vector */ RVECENT(romReserved,65) RVECENT(romReserved,66) .... RVECENT(romReserved,79) XVECENT(romExcHandle,0x280) /* bfc00280: R4000 xtlbmiss vector */ RVECENT(romReserved,81) .... RVECENT(romReserved,95) XVECENT(romExcHandle,0x300) /* bfc00300: R4000 cache vector */ RVECENT(romReserved,97) .... RVECENT(romReserved,111) XVECENT(romExcHandle,0x380) /* bfc00380: R4000 general vector */ RVECENT(romReserved,113) .... RVECENT(romReserved,127)
/* We hope there are no more reserved vectors! * 128 * 8 == 1024 == 0x400 * so this is address R_VEC+0x400 == 0xbfc00400 */
reset: /* * Clearing CP0 registers - WAR for the Linux hang issue */ mtc0 zero, $0 ....
/* Exception handlers. */ romReserved: b romReserved
romExcHandle: b romExcHandle
我对上面定义的128个中断没看懂是怎么调用的。而且,我尝试过把所有的RVECENT(romReserved, X) 都改成RVECENT(reset, X),结果都没一点反应。 请高手指点! |