掌叔
2009-02-22 08:46:23
摘自:[url]www.fw211.com[/url]
作者:火精灵
我们知道NDS的向量表是保存在BISO中的,在NDS系统中ARM7的BISO从地址0x00000000开始,ARM9的BIOS地址从 0xFFFF0000开始。这是由ARM的IP配置所决定的。从网上下载到IQue的BIOS,找到biosnds9.rom,用UE打开一看全是指令,呵呵。功力不够深还真看不懂啊。赶紧写一个ARM的反汇编工具吧,于是ARMDASM诞生了(可以在附件中下载),它只能反ARM指令的汇编,THUMB 不支持,因为我们知道
BIOS中的向量代码都是由ARM汇编的。运行反汇编工具,打开反汇编结果文件,找到IRQ的向量地址ffff0018 ea000095 B 0xffff0274,看是跳转到了0xffff0274,这里就是我们要的IRQ处理函数了:
ffff0274 e92d500f STMDB r13!,{r0-r3,r12,r14}
ffff0278 ee190f11 MRC p15,0x0,r0,c9,c1,#0
ffff027c e1a00620 MOV r0,r0,LSR #12
ffff0280 e1a00600 MOV r0,r0,LSL #12
ffff0284 e2800c40 ADD r0,r0,#0x4000
ffff0288 e28fe000 ADD r14,pc,#0
ffff028c e510f004 LDR pc,[r0,#-4]
ffff0290 e8bd500f LDMIA r13!,{r0-r3,r12,r14}
很短,只有8条指令,主要是跳转到用户在(DTCM+0x3FFC)处设置的IRQ处理函数去执行。移植过嵌入式操作系统的朋友都知道,IRQ的处理与 OS的调度密切相关,只要我们接管了IRQ的处理,那么OS的移植就基本上搞定了。我们只要在(DTCM+0x3FFC)的第一条指令是LDMIA r13!,{r0-r3,r12,r14}就可以恢复到刚进入IRQ时的状态了,那么接下来我们就完全接管了IRQ的处理了。好了,不多说了,有兴趣的朋友可以试试看,移植一个你所熟悉的OS。
whm3d
2009-03-19 21:47:53
雷叔来移植一个吧!