sherf 发表于 2009-10-31 01:08

原帖由 accessory 于 2009-10-31 00:52 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
关于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 编辑 ]

accessory 发表于 2009-11-01 00:28

while(i<32)

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

sherf 发表于 2009-11-01 22:21

回复 #21 accessory 的帖子

accessory,

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

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

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

accessory 发表于 2009-11-02 01:49

如果是在QEMU下很简单。一种方法是在模拟RTL8139硬件的C文件里加一些DEBUG 输出。或者可以在HOST上用TCPDUMP看QEMU的虚拟网卡。

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

sherf 发表于 2009-11-02 08:53

原帖由 accessory 于 2009-11-2 01:49 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
如果是在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;
}

sherf 发表于 2009-11-02 13:15

回复 #24 sherf 的帖子

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

accessory 发表于 2009-11-03 00:58

改中断号那个我也不懂。MAC地址的在另外一个帖子里回了。

sherf 发表于 2009-11-04 17:36

原帖由 accessory 于 2009-11-2 01:49 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
如果是在QEMU下很简单。一种方法是在模拟RTL8139硬件的C文件里加一些DEBUG 输出。或者可以在HOST上用TCPDUMP看QEMU的虚拟网卡。

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


accessory,

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

sherf 发表于 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.PhysicalAddress);
        outpdw(IOBase + TSD0 + offset , TxDesc.PacketLength);
}

accessory 发表于 2009-11-05 01:39

先看一下收发的CONFIGURATION有没有设置好。具体的寄存器是         TxConfig = 0x40,
        RxConfig = 0x44。

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

如果想从QEMU里的虚拟网卡来调试,可以在 QEMU/HW/RTL8139.C 文件里加一些相关的PRINTF输出。
页: 1 2 [3] 4 5 6 7 8 9
查看完整版本: RTL8139 programming guide