免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: sherf
打印 上一主题 下一主题

RTL8139 programming guide [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-10-31 01:08 |只看该作者
原帖由 accessory 于 2009-10-31 00:52 发表
关于PCI,可以看下下面的连接,虽然老了点,但是基础知识变化不大。英文的。
http://tldp.org/LDP/tlk/dd/pci.html

另外,LZ你的开发环境是啥?不是windows?也不是LINUX?如果是WINDOWS,可以在设备管理器里 ...


accessory,

我是通过一个引导程序从裸机引导的,因此我的程序不能使用操作系统(如windows,linux等)的资源,只能自己去读BIOS。但偏偏老不成功............

另,在通过CF8、CFC对PCI配置空间信息进行读取前,还需要设置其它的吗? 附代码如下:

PRIVATE int findirq(u32 *iobase,u32 *irq)
{
    u32 i,j,pci;
   
    j = 0x80000000;
    i = 0;

    while(i<32)
    {
        out_word(0xCF8,j);
        delay(30);

        //pci为vendorID和DeviceID(但我每次得到的都是0xFFFFFFFF)
        pci = in_word(0xCFC);

        i++;
        j += 0x800;
    }

   ........
}

[ 本帖最后由 sherf 于 2009-10-31 01:16 编辑 ]

论坛徽章:
0
22 [报告]
发表于 2009-11-01 00:28 |只看该作者
while(i<32)

32 这个范围太小了,改成8191试试。

论坛徽章:
0
23 [报告]
发表于 2009-11-01 22:21 |只看该作者

回复 #21 accessory 的帖子

accessory,

问题已解决,是bochs模拟器的问题,更新版本后可以了。

但是,又出现了一个新的问题,如何测试收/发包?

收/发包的代码我已仿照godbach所提供的第1篇文章里的例子写了,但不知道如何在bochs环境下调试收/发包。各位有什么好的建议。

论坛徽章:
0
24 [报告]
发表于 2009-11-02 01:49 |只看该作者
如果是在QEMU下很简单。一种方法是在模拟RTL8139硬件的C文件里加一些DEBUG 输出。或者可以在HOST上用TCPDUMP看QEMU的虚拟网卡。

BOCHS就不清楚了。也许有类似的方法。

论坛徽章:
0
25 [报告]
发表于 2009-11-02 08:53 |只看该作者
原帖由 accessory 于 2009-11-2 01:49 发表
如果是在QEMU下很简单。一种方法是在模拟RTL8139硬件的C文件里加一些DEBUG 输出。或者可以在HOST上用TCPDUMP看QEMU的虚拟网卡。

BOCHS就不清楚了。也许有类似的方法。


accessory,

还有一点,对于网卡的中断处理(发送/接收引起的中断),为何demo里要变更中断号?附godbach提到的第一篇文章里的demo中有关变更中断号的代码如下(其中IrqNumber是在配置空间中找到的网卡中断号):

int ComputeInterrupt(int        IrqNumber)
{
        if(IrqNumber <= 8 )
                 return IrqNumber+8;
        else                  
                 return IrqNumber+0x68;
}

论坛徽章:
0
26 [报告]
发表于 2009-11-02 13:15 |只看该作者

回复 #24 sherf 的帖子

另,MAC地址是存放在“配置空间”中的Expansion ROM中吗?如果是的话,为何我每次取都是0?

论坛徽章:
0
27 [报告]
发表于 2009-11-03 00:58 |只看该作者
改中断号那个我也不懂。MAC地址的在另外一个帖子里回了。

论坛徽章:
0
28 [报告]
发表于 2009-11-04 17:36 |只看该作者
原帖由 accessory 于 2009-11-2 01:49 发表
如果是在QEMU下很简单。一种方法是在模拟RTL8139硬件的C文件里加一些DEBUG 输出。或者可以在HOST上用TCPDUMP看QEMU的虚拟网卡。

BOCHS就不清楚了。也许有类似的方法。



accessory,

能说的详细一些吗?我现在已改用qemu,并且已能拿到MAC,目前我想进行收发包的验证

论坛徽章:
0
29 [报告]
发表于 2009-11-04 23:34 |只看该作者

回复 #27 sherf 的帖子

accessory,

对于demo里的中断处理程序,我做了发包的测试,但是结果发觉根本没转去中断处理程序执行。为此,我重新review了自己的代码,发现已经将分配到的IRQ与demo里的中断处理程序进行关联......

另外,想问一下有关中断处理程序执行的开始点(发包)。如果中断处理程序已正确关联,那进行发包测试过程中当使用 issuecmd()函数 时是不是就是这个时候“自动‘转去执行中断处理程序(发包中断)?

void
IssueCMD(unsigned char descriptor)
{
        unsigned long offset = descriptor << 2;
        outpdw(IOBase + TSAD0 + offset, TxDesc[TxHwSetupPtr].PhysicalAddress);
        outpdw(IOBase + TSD0 + offset , TxDesc[TxHwSetupPtr].PacketLength);
}

论坛徽章:
0
30 [报告]
发表于 2009-11-05 01:39 |只看该作者
先看一下收发的CONFIGURATION有没有设置好。具体的寄存器是         TxConfig = 0x40,
        RxConfig = 0x44。

如果设置好的话,ISSUECMD之后,网卡就开始DMA数据,发包。然后产生一个中断告诉驱动发送完成。不过是否产生这个中断也许依赖于设置。可以看看RTL8139的 DATA SHEET和 LINUX 8139TOO.C的代码。

如果想从QEMU里的虚拟网卡来调试,可以在 QEMU/HW/RTL8139.C 文件里加一些相关的PRINTF输出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP