阅读:1315回复:6
大侠求救!eboot初始化RTL8139碰到的古怪问题。好生郁闷。
eboot初始化RTL8139遇到如下麻烦,这里是源码:
//////////////////////////////////////////////////////////////////////////////// // RTL8139Init() // BOOL RTL8139Init(BYTE *pbBaseAddress, ULONG dwMemOffset, USHORT MacAddr[3]) { DWORD dwScrap; #ifndef AUTO_NEGOTIATE USHORT usScrap; #endif DWORD i; if (dwTxStartAddress == 0x00) { //////////////////////////////////////////////////////////////////////// // Caller ** MUST ** call RTL8139InitDMABuffer() first!! // PRINTF (1, ("RTL8139():: Error!! RTL8139InitDMABuffer() was not called.\r\n")); return FALSE; } PRINTF (1, ("RTL8139Init():: BaseIO[0x%x] : MemOffset[0x%x]\r\n", pbBaseAddress, dwMemOffset)); memset (&sRTL8139, 0x00, sizeof(SRTL8139)); sRTL8139.dwBaseIO = (DWORD)pbBaseAddress; sRTL8139.dwMemOffset = dwMemOffset; sRTL8139.dwFreeTxDescriptors = NUM_TX_DESC; //////////////////////////////////////////////////////////////////////////// // Caller ** MUST HAVE ** called RTL8139InitDMABuffer() // sRTL8139.pucTxBuffer = (PUCHAR)(dwTxStartAddress); sRTL8139.pucRxBuffer = (PUCHAR)(dwRxStartAddress); sRTL8139.puLastRxAddress = sRTL8139.pucRxBuffer + dwRxLength - 1; PRINTF (1, ("RTL8139Init():: TxBuff[0x%x] - RxBuff[0x%x] - LastRx[0x%x]\r\n", sRTL8139.pucTxBuffer, sRTL8139.pucRxBuffer, sRTL8139.puLastRxAddress)); (程序执行到这个地方就不往下走了好像,因为我下面加了终端输出调试信息,也显示不出来,好像就是停在这个地方了。怎么修改也无济于事,因为还没有eboot,也没有办法硬件仿真,谁能教教我该怎么办啊……) ………… 终端上显示运行eboot的信息: …… Starting auto-download ... RTL8139InitDMABuffer():: Start[0x200000]-[0x200000] - Size[0x20000] Tx[0x200000] - Rx[0x201800] - RxLength[0x10000] - RxLengthBit[0x1800] RTL8139Init():: BaseIO[0xA7000300] : MemOffset[0xA6000000] RTL8139Init():: TxBuff[0x200000] - RxBuff[0x201800] - LastRx[0x2117FF] 到这里就停住了,下面的调试信息什么也不显示了,究竟为什么会停在这里啊,一点头绪也没有,是不是什么设置不对啊,还是怎么回事。请大侠帮帮忙,真诚感谢。 |
|
论坛版主
|
沙发#
发布于:2004-12-22 17:46
不可能死在输出信息这句上三,继续向下,看看什么问题
|
|
板凳#
发布于:2004-12-23 17:58
不幸的事情正是这样,在上面和下面加入输出明显看出停在这里了,郁闷了好几天了……wxl_50685330大哥,我怀疑本身片子有问题……
是不是基本上的网卡芯片初始化的方法都类似啊,还是各自不同,感觉上都是那么几个函数在用…… |
|
地板#
发布于:2004-12-24 14:22
同意一楼的看法。肯定是后面的问题。
实在不相信的话,加上 while(1) printf("x\n"); 试一下。 然后一条语句一条语句的排除,一定能找到。 只是工作量比较大。 :( :( :( |
|
地下室#
发布于:2004-12-25 18:48
大侠们,现在经过调试,问题已经转化为下面代码中的情况:
………… pfnEDbgInit = RTL8139DBG_Init; ………… //////EdbgOutputDebugString("TEST2!!rn"); if (!pfnEDbgInit((PBYTE)pBaseIOAddress, dwMultiplier, wMAC)) { //////EdbgOutputDebugString("TEST3!!rn"); EdbgOutputDebugString("ERROR: InitEthDevice: Failed to initialize Ethernet controller.rn"); return(FALSE); } 其中RTL8139DBG_Init()函数是在drivers目录下RTL8139dbg.c中定义的,但是从终端输出的信息来看,出现了信息test2!!和test3!!,显然是函数没有调用对,另外测试可以看出函数的 三个参数的输入值都是正确的,没有问题,但是在RTL8139dbg.c里面RTL8139DBG_Init()函数加任何调试信息都显示不出来,是不是根本没有使用驱动RTL8139dbg.c呢??这样的话应该怎样设置才能让这个函数正确调用啊?另外,没有调用这个函数,怎么也会返回0导致进入了if里的输出,这个又怎么讲捏??请大侠们帮帮忙吧,我就差这一点点了…………好郁闷啊 [编辑 - 12/25/04 by zouyingmyfriend] |
|
5楼#
发布于:2004-12-27 09:49
问题已经解决,是没有调用这个驱动的过。不过还是不知道怎么改。
|
|
论坛版主
|
6楼#
发布于:2004-12-27 13:19
:)
注意看看函数返回值得定义,1是成功还是0是成功,好像是反的。 |
|