jihaitao
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2007-09-29
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4404回复:20

rtl8139

楼主#
更多 发布于:2003-10-07 22:01
  最近刚刚实习了一下网络驱动程序的编写硬件采用RTL8139.

其实程序的架构基本遵从LDD2.但是涉及到硬件操作的部分还是很麻烦.

因为RTL8139的数据手册太粗略了; 好在可以参考8139too.c, 可以从中得到硬件操作的详细步骤. 虽然程序的好多内容参考了上述文件.

但通过此程序的编写基本上了解了PCI 总线网卡的驱动的编写.

如有兴趣大家可以讨论.
whatis6688
link_bridge
驱动巨牛
驱动巨牛
  • 注册日期2002-11-28
  • 最后登录2011-05-15
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-07 22:11
是不是软硬件全是你一个人作的呀!
我不懂驱动呀!
驱动是不是要对8139的寄存器,进行操作。初始化设置呀?
还有具体误码处理是怎样的呢?
帧的标志(帧头)是什么呢?
谢谢!
jihaitao
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2007-09-29
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-08 09:19
硬件在市面上可以买的到.

驱动将涉及到硬件初始化,数据的收发,中断的处理,

还有错误的处理.

帧头用缺省的程序处理.对以太网,只要调用过ether_setup,可以不用理会.当然,你也可以重载hard_header,编写自己的帧头处理程序.

RTL8139 接受错误处理非常重要.
whatis6688
zmhuang
驱动牛犊
驱动牛犊
  • 注册日期2002-10-09
  • 最后登录2008-12-14
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-20 16:04
我在今年年初的时候,需要为 rtl8139 编写一个驱动程序。但
因为各种原因,后来不了了之。记得当时到处找 rtl8139 的资料,
但所获甚微,配置 rtl8139 时,真是感觉晕菜。 不知道 jihaitao
你是在什么平台(cpu? OS?)下作这个驱动的? 8139too.c 很有用参考价值吧?Donald Becker 为 rtl8139 写的 Linux 下驱动你参考了吗?
jihaitao
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2007-09-29
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-25 10:06
由于rtl8139的资料过于简略我不得不参考8139TOO.C.其实我原计划根本不看任何已有的.完全出于个人的兴趣.

只完成了最基本的功能: 收发数据

不过看懂程序是一回事. 写程序是另外一回事. 在写此程序的过程中,

多次狂读 8139too.c. 才发现如果想读懂程序, 读过以后自己去写 去调试.

其实, 对于rtl8139 ,难度最大的部分 是数据收发出现错误的概率非常高; 所以8139too.c 最有价值的部分是错误处理. ( 个人观点,不一定正确)

rtl8139 的效率不高,在用交叉电缆直连的两台机器之间(100M 模式)

只能达到 800K ~ 900K bytes/s , 只是理论值的 1/10. (对端用的是3c574).不知道其它网卡的表现.
whatis6688
wangqins
驱动小牛
驱动小牛
  • 注册日期2002-04-28
  • 最后登录2007-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-26 00:31
现在太懒了,我写程序的步骤首先是上网找代码再优化了:(
mqy
mqy
驱动牛犊
驱动牛犊
  • 注册日期2001-06-18
  • 最后登录2008-10-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望3点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-29 13:58
是的,我也发现这个问题,而且用8139的测试程序(DOS),只能用10M-FULL方式。
wangqins
驱动小牛
驱动小牛
  • 注册日期2002-04-28
  • 最后登录2007-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-12-29 21:45
Phy的初始化问题。
cutepony
驱动牛犊
驱动牛犊
  • 注册日期2002-11-13
  • 最后登录2004-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-01-02 15:33
本人目前正在做一块dp83820芯片的网卡(缺eeprom),收发数据都有问题,mac地址在程序里给的值,发数据对方收不到,但网络测试仪可以发现有帧发出,不知什么原因?希望大家互相交流一下。
由于rtl8139的资料过于简略我不得不参考8139TOO.C.其实我原计划根本不看任何已有的.完全出于个人的兴趣.

只完成了最基本的功能: 收发数据

不过看懂程序是一回事. 写程序是另外一回事. 在写此程序的过程中,

多次狂读 8139too.c. 才发现如果想读懂程序, 读过以后自己去写 去调试.

其实, 对于rtl8139 ,难度最大的部分 是数据收发出现错误的概率非常高; 所以8139too.c 最有价值的部分是错误处理. ( 个人观点,不一定正确)

rtl8139 的效率不高,在用交叉电缆直连的两台机器之间(100M 模式)

只能达到 800K ~ 900K bytes/s , 只是理论值的 1/10. (对端用的是3c574).不知道其它网卡的表现.  
jihaitao
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2007-09-29
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-01-06 14:39
可以检查一下芯片是否对小于64 字节的数据包丢弃

也可以设置成混杂(promisc) 模式
whatis6688
cutepony
驱动牛犊
驱动牛犊
  • 注册日期2002-11-13
  • 最后登录2004-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-01-07 20:09
我用ifconfig查看网卡信息,显示发出的数据包是42个字节,而realtek的网卡是60个字节,查了半天程序,没看见是什么地方设的。另外请问混杂模式如何设置呢?
jihaitao
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2007-09-29
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-01-09 14:00
可能该芯片不支持autopad 功能.  ( 8139也不支持.)

发送时应有下面的一行:

packet_len= (len<ETH_ZLEN)?ETH_ZLEN:len

如果只发出去40字节,对端应丢掉.因为不符合标准.

whatis6688
cutepony
驱动牛犊
驱动牛犊
  • 注册日期2002-11-13
  • 最后登录2004-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-01-14 12:46
我做的DP83820的确不支持AUTO PAD。但我也添加了packet_len= (len<ETH_ZLEN)?ETH_ZLEN:len 。但问题并没有解决。
而且,你说的混杂(promisc) 模式是在硬件还是驱动里设置呢?
有什么好方法呢?
谢谢。

cheng_5103
驱动牛犊
驱动牛犊
  • 注册日期2003-10-06
  • 最后登录2012-03-21
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望228点
  • 贡献值0点
  • 好评度45点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-03-02 17:29
高手们我可以指导下小弟吗?小弟是个初学者也想学8139网卡驱动编写!
cheng
fraskey
驱动牛犊
驱动牛犊
  • 注册日期2003-01-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-03-20 13:25
混杂模式:ifconfig eth0 promisc
Santorini
驱动牛犊
驱动牛犊
  • 注册日期2004-07-07
  • 最后登录2005-07-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-04-19 15:52
能否参考一下楼主的代码,我也写了一个能收发包的驱动,但是ifconfig myif up就死机了,不明白哪里有问题
haison_linux
驱动牛犊
驱动牛犊
  • 注册日期2005-04-22
  • 最后登录2005-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-04-22 21:21
我最近也在做有关网卡驱动的程序,但还是一头雾水,希望楼主能给一些指点,我的qq是99763145,希望能联系一下,我前两个月读的是赵炯的Linux0.11的内核版本,可是他却没有网络的内容,我又看了《Linux device drivers》但也只是有个整体的模糊印象。希望楼主能够给一些些具体的指导。
我越来越是不懂,明天会吹什么风!为什么有一些人总要在你遗忘的瞬间逼迫你再度想起?
jihaitao
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2007-09-29
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-04-26 13:54
由于工作的关系,好久没来了. 其实, 网络驱动最好的例子还是 linux device driver 里的 snull. 如果重写一遍并调试成功, 再去了解 pci, 可以8139too.c 为模板.

我重写过的程序不知能不能找的着;如果找着的话,我会贴上来作为参考
whatis6688
mulagi
驱动牛犊
驱动牛犊
  • 注册日期2004-08-27
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-04-27 08:53
我想问一下在rtl8139_rx_interrupt涵数的后面有条语句
RTL_W16_F (RxBufPtr, cur_rx - 16)
为什么是cur_rx - 16 而不是cur_rx啊
zhifulee
驱动牛犊
驱动牛犊
  • 注册日期2005-04-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-05-25 16:10

我的Linux系统内核是Kernel2.6.5,我现在在网上下载了一个8139网卡驱动源程序,它有三个文件:.C、.Makefile、readme文件.
 

我想在Linux下编译.C文件,办不知用什么生成.ko文件?谢谢了
 8139TOO。C怎么编译生成。O或.KO 文件?
QQ:124273664
MSN:zhifulee@hotmail.com
 
上一页
游客

返回顶部