zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1315回复:6

大侠求救!eboot初始化RTL8139碰到的古怪问题。好生郁闷。

楼主#
更多 发布于:2004-12-20 11:25
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]
到这里就停住了,下面的调试信息什么也不显示了,究竟为什么会停在这里啊,一点头绪也没有,是不是什么设置不对啊,还是怎么回事。请大侠帮帮忙,真诚感谢。
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-22 17:46
不可能死在输出信息这句上三,继续向下,看看什么问题
根据地的兄弟们,团结就是力量
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-23 17:58
不幸的事情正是这样,在上面和下面加入输出明显看出停在这里了,郁闷了好几天了……wxl_50685330大哥,我怀疑本身片子有问题……
是不是基本上的网卡芯片初始化的方法都类似啊,还是各自不同,感觉上都是那么几个函数在用……
beffic
驱动牛犊
驱动牛犊
  • 注册日期2002-12-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-24 14:22
同意一楼的看法。肯定是后面的问题。
实在不相信的话,加上
while(1) printf("x\n");
试一下。
然后一条语句一条语句的排除,一定能找到。

只是工作量比较大。

 :( :( :(
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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]
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-27 09:49
问题已经解决,是没有调用这个驱动的过。不过还是不知道怎么改。
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-12-27 13:19
:)
注意看看函数返回值得定义,1是成功还是0是成功,好像是反的。
根据地的兄弟们,团结就是力量
游客

返回顶部