修改理由:
由于eboot 和KITL 同时调用 DM9000DBG_Init 这个函数,在eboot 掉用时使用的是没有经过映射的地址,当镜像加载完成后,时候的是映射过的地址。 而DM9000DBG_Init 任然时候的是没有经过映射的地址。这样做导致的直接后果是,KITL起来当访问没有这段地址(0x15000000)的时候立马死机。
但是有引出了另外的一个问题,就是这样修改在启动eboot的时候,用的是映射过的地址,在eboot中访问映射过的地址同样会死机(因为mmu还没有起来)。
最后找了一种比较折中的解决方案:
在编译eboot的时候用下面代码:
DM9000DBG_Init
{
......
//Add ed by peng
/OALPAtoVA((UINT32)0x15000000, FALSE);
//OALPAtoVA((UINT32)0x15000000+ 0x400, FALSE);
//Mask by peng
//Give the Index and Data port Address
dwIndexPortAddress = 0x15000000;
dwDataPortAddress = 0x15000000 + 0x400;
.......
}
编译内核的时候用下面代码:
DM9000DBG_Init
{
......
//Add ed by peng
dwIndexPortAddress = OALPAtoVA((UINT32)0x15000000, FALSE);
dwDataPortAddress = OALPAtoVA((UINT32)0x15000000+ 0x400, FALSE);
//Mask by peng
//Give the Index and Data port Address
//dwIndexPortAddress = 0x15000000;
//dwDataPortAddress = 0x15000000 + 0x400;
.......
}