免费注册 查看新帖 |

Chinaunix

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

RTL8139 programming guide [复制链接]

论坛徽章:
0
51 [报告]
发表于 2009-11-11 04:46 |只看该作者
原帖由 sherf 于 2009-11-10 12:04 发表


accessory,

怎么解决的?是哪里的问题?

问题主要出在打开中断的时机不对,应该在 findirq 之前就打开中断(8259的第3个引脚,IRQ2,连接主、从片的那个引脚),而不是在 findirq 之后再打开。这个问 ...


accessory,

问题还没解决,之前搞错了.......

目前,驱动程序仍然不能转至中断处理程序......

此外,问一下,PCI网卡如果要正常处理中断,是否要设置ID_SEL?如果要,如何设置?

论坛徽章:
0
52 [报告]
发表于 2009-11-11 10:19 |只看该作者
我觉得id_sel 是为了访问io端口,或者内存映射端口用的。现在你已经可以读到这些端口里的信息了。所以应该已经设置好了。

论坛徽章:
0
53 [报告]
发表于 2009-11-11 16:11 |只看该作者

回复 #51 accessory 的帖子

我还想问一下,对于 demo 的程序应该怎样进行测试?

我的测试是这样的:就是调用demo里面的send函数,但发送了4个包之后(也就是TSD0 ~ 4 都各发了一个包之后),程序停了下来,原因txfreedesc为0。而要使txfreedesc不为0,那只能启动中断处理程序,让 发送队列里的数据发出去。但现在就是不能驱动中断处理程序。按照文档上说,只要发送一个完整的包到发送队列或发送的数据大小超过TSD阀值就会自动触发发送中断并由网卡将数据发送出去.......是否我的测试方法不对?

各位,你们在测试该 demo 的时候,都是怎样测试的?

论坛徽章:
0
54 [报告]
发表于 2009-11-11 18:00 |只看该作者

回复 #52 sherf 的帖子

各位,有什么好的点子?

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

回复 #53 sherf 的帖子

另,通过测试前后用ifconfig进行对比发现(观察的网络接口为tap0):网卡是接收到4个包,且包的大小和测试程序中查看TSD0~4中的数据一致(都是68)。但发送的数据包却达几百个,这个无法判断是否发送的包中包含我的数据包(测试中发现中断程序未启动,应该没有我的包在里面)

对于测试用的tap0,与eth0已建立bridge。

这里看到虚拟网卡应该能工作(可以接收包),但为何不能发送接收到的包呢?除了程序的设置,在网络设置方面(如tap0)是否还存在问题?

论坛徽章:
0
56 [报告]
发表于 2009-11-12 00:40 |只看该作者
原帖由 sherf 于 2009-11-11 16:11 发表
我还想问一下,对于 demo 的程序应该怎样进行测试?

我的测试是这样的:就是调用demo里面的send函数,但发送了4个包之后(也就是TSD0 ~ 4 都各发了一个包之后),程序停了下来,原因txfreedesc为0。而要使txfreedesc不为0,那只能启动中断处理程序,让发送队列里的数据发出去。但现在就是不能驱动中断处理程序。按照文档上说,只要发送一个完整的包到发送队列或发送的数据大小超过TSD阀值就会自动触发发送中断并由网卡将数据发送出去.......是否我的测试方法不对?

"而要使txfreedesc不为0,那只能启动中断处理程序,让发送队列里的数据发出去。"
这句有问题. 要使得txfreedesc不为0, 是要用到中断处理程序. 但是ISR的目的是检测数据发送出去了没有. 正常情况下,你只要写了包的大小,网卡就会自动启动DMA, 发数据. 网卡发完后,根据你的中断屏蔽寄存器的设置来看是否产生中断. 如果设置了产生TX相关的中断, 网卡就会用一个中断来通知驱动.驱动接到中断后,读一下中断状态寄存器.如果发现是 TX_OK. 那么就把相应的 TX DESCRIPTOR 标记为空闲.

我没有测试过DEMO程序,只是跟踪过LINUX上的 8139TOO.C

论坛徽章:
0
57 [报告]
发表于 2009-11-12 00:43 |只看该作者

回复 #54 sherf 的帖子

你网卡发的4个包的具体内容是啥? 什么协议? IP? TCP? UDP? 其他?

TAP0上发送了几百个包?这个比较奇怪. 另外,可以用TCPDUMP -I TAP0 来看看上面到底都是些什么包

论坛徽章:
0
58 [报告]
发表于 2009-11-12 00:53 |只看该作者
原帖由 accessory 于 2009-11-12 00:40 发表

"而要使txfreedesc不为0,那只能启动中断处理程序,让发送队列里的数据发出去。"
这句有问题. 要使得txfreedesc不为0, 是要用到中断处理程序. 但是ISR的目的是检测数据发送出去了没有. 正常情况下,你只要写了 ...


accessory,

那如何检测qemu自带的 rtl8139cp 虚拟网卡是否已将数据包发送了出去?如果是通过 ifconfig tap0(我采用的是 -net tap的方式),那是否是看输出结果中的 “接收数据包” 这一项?(如果是,则 rtl8139cp 虚拟网卡已发送了数据,但没产生中断(即没转去执行终端处理程序——在中断处理程序中再进行ISR判断)。)

论坛徽章:
0
59 [报告]
发表于 2009-11-12 06:30 |只看该作者
如果TAP0只是连了你的虚拟机的网卡,那么用IFCONFIG TAP0 看它收到的包. 否则你不知道它是否收到了其他地方的包.

另外一个办法是直接在 QEMU/HW/RTL8139.C 里面加PRINTF. 看执行到了哪一步. 我觉得这个方法是最简单的. SHERF老兄为啥就不肯试试呢?

论坛徽章:
0
60 [报告]
发表于 2009-11-12 07:02 |只看该作者
原帖由 accessory 于 2009-11-12 06:30 发表
如果TAP0只是连了你的虚拟机的网卡,那么用IFCONFIG TAP0 看它收到的包. 否则你不知道它是否收到了其他地方的包.

另外一个办法是直接在 QEMU/HW/RTL8139.C 里面加PRINTF. 看执行到了哪一步. 我觉得这个方法是 ...


accessory,

不是不肯用,上次为了调试qemu,我卸载了ubuntu上原来的qemu(apt-get install qemu),在ubuntu上使用编译版本,但后来出不来图形界面,不得已才有从新 apt-get install qemu。这次要是看printf输出,肯定得使用编译版本.......
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP