sherf 发表于 2009-10-30 10:12

回复 #9 sherf 的帖子

谢谢各位的回复,目前对网卡驱动已有了更多的了解。但有一些问题还没有弄明白。比如,Godbach所推荐的第一篇文章里面有一个demo,demo里面有一个寻找IRQ的函数(findirq),在里面我发现iobase和irq是从别的地方获取的(应该都跟0x80000000有关)。在查找了一些资料后,发现如果要使得网卡驱动能工作,之前应该先要做一个PCI的驱动,在里面配置好PCI设备(如网卡)的IRQ、输入输出端口(寄存器)等。

目前碰到的问题是:这些输入输出端口的信息是从哪里来的(BIOS吗?还是规范里统一规定的,就像键盘的60H、61H端口)?0x80000000这个地址又是从何而来的?具体的操作应该怎样(最好有些简单的demo)?谢谢。

(曾寻找过有关PCI的资料,但发现这些资料几乎都与实际的系统(如:linux,windows等)相关,都直接去分析它的函数,很难形成一个清晰的认识。)

epegasus 发表于 2009-10-30 10:29

回复 #10 sherf 的帖子

PCI的就是看mindshare的 PCI系统结构 了.当你把它看懂了,就没有任何问题了...

sherf 发表于 2009-10-30 11:47

回复 #11 epegasus 的帖子

.........

sherf 发表于 2009-10-30 12:31

回复 #12 sherf 的帖子

并且,在调试那个demo的时候,发现当发送0x80000000给0xcf8后,从0xcfc读到的返回值很奇怪(32个返回值都是0x000000ff,正常的应该会有一个是8139什么的),我查找了很久,都没发现这个值代表什么.........

epegasus 发表于 2009-10-30 12:37

回复 #12 sherf 的帖子

哦,我是搞懂了这个才把很多能串起来的,本来这点东西我都不好发多次,但是我发现很多人没搞清楚,所以困惑很多,而对大牛们似乎是潜规则,没有一个人把这个直白说出来...
http://linux.chinaunix.net/bbs/thread-1096162-1-4.html
PCI主要是2点主线:配置空间的寻址和 通常总线的的寻址,搞清楚这2个主干,其他都是枝叶.

sherf 发表于 2009-10-30 18:33

原帖由 sherf 于 2009-10-30 12:31 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
并且,在调试那个demo的时候,发现当发送0x80000000给0xcf8后,从0xcfc读到的返回值很奇怪(32个返回值都是0x000000ff,正常的应该会有一个是8139什么的),我查找了很久,都没发现这个值代表什么.........

这个问题已修正。不过却发现从0xCFC上传回来的都是0xFFFFFFFF,没找到任何PCI设备。但我的网卡明明插在PCI插槽上的且正在使用,为何没检测出来呢?

sherf 发表于 2009-10-30 19:28

原帖由 sherf 于 2009-10-30 18:33 发表 http://linux.chinaunix.net/bbs/images/common/back.gif


这个问题已修正。不过却发现从0xCFC上传回来的都是0xFFFFFFFF,没找到任何PCI设备。但我的网卡明明插在PCI插槽上的且正在使用,为何没检测出来呢?

如果是PCI设备且工作正常,就一定能通过发送0x80000000(在循环中递增0x800)给0xCF8并根据0xCFC的返回值检测出来吗?

epegasus 发表于 2009-10-30 21:39

回复 #16 sherf 的帖子

一个卡槽对应一个slot,slot决定偏移量,slot由IDSEL线确定,如何用地址线拌成IDSEL线是芯片决定的,这个要参考文档。

sherf 发表于 2009-10-30 22:21

原帖由 epegasus 于 2009-10-30 21:39 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
一个卡槽对应一个slot,slot决定偏移量,slot由IDSEL线确定,如何用地址线拌成IDSEL线是芯片决定的,这个要参考文档。


如何用地址线拌成IDSEL线是芯片决定的,这个要参考文档——参考哪个文档?大概会是在该文档中的哪个部分?

accessory 发表于 2009-10-31 00:52

关于PCI,可以看下下面的连接,虽然老了点,但是基础知识变化不大。英文的。
http://tldp.org/LDP/tlk/dd/pci.html

另外,LZ你的开发环境是啥?不是windows?也不是LINUX?如果是WINDOWS,可以在设备管理器里看到你的设备(没有驱动的一般是未知设备)。如果是LINUX,可以用LSPCI看看。如果这些标准的命令可以看到设备,那就是你自己的程序 没写好。

另外,还可以看看 pciutils : http://mj.ucw.cz/pciutils.html
它是专门读写PCI的一个库。
页: 1 [2] 3 4 5 6 7 8 9
查看完整版本: RTL8139 programming guide