我不行了,大神帮帮我吧
一个月前,我心血来潮,在ubuntu14.04的内核源码中倒腾出智微以太网卡模块,准备移植到我的黑苹果里。
现在初始化部分移植完成差不多了,也许因为我没有系统的学习过这些,网线检测那部分原理不懂,发送接收部分正在努力移植。
我看了JMicron和realtek以太网卡的源码,貌似插入网线和拔出网线,都会改变网卡上某一寄存器的值。
我想问一下,插入网线与拔出网线,是不是会改变网卡对应的寄存器?我理解的对吗?如果不对应该是什么?
如果我理解对了,那么网卡上相应寄存器的值是根据网线插入或拔出来确定,还是根据数据的传入来判断?还是别的什么因素?
还有对于路由器分配的IP是怎么发送的呢?连上网线路由器马上发数据给网卡?还是网卡跟路由器先通讯一会,内核通过网卡问路由器要的?换个说法,就是我想弄清楚连上网线后,在驱动还没开始处理网卡数据的前,网线上传了些什么数据?
有点晕,关于网卡驱动原理,我想请教一下驱动是怎么检测网线的
-
- 帖子: 1555
- 注册时间: 2012-03-31 3:29
Re: 有点晕,关于网卡驱动原理,我想请教一下驱动是怎么检测网线的
Q:插入网线与拔出网线,是不是会改变网卡对应的寄存器?我理解的对吗?如果不对应该是什么?56tyty56 写了:我不行了,大神帮帮我吧
一个月前,我心血来潮,在ubuntu14.04的内核源码中倒腾出智微以太网卡模块,准备移植到我的黑苹果里。
现在初始化部分移植完成差不多了,也许因为我没有系统的学习过这些,网线检测那部分原理不懂,发送接收部分正在努力移植。
我看了JMicron和realtek以太网卡的源码,貌似插入网线和拔出网线,都会改变网卡上某一寄存器的值。
我想问一下,插入网线与拔出网线,是不是会改变网卡对应的寄存器?我理解的对吗?如果不对应该是什么?
如果我理解对了,那么网卡上相应寄存器的值是根据网线插入或拔出来确定,还是根据数据的传入来判断?还是别的什么因素?
还有对于路由器分配的IP是怎么发送的呢?连上网线路由器马上发数据给网卡?还是网卡跟路由器先通讯一会,内核通过网卡问路由器要的?换个说法,就是我想弄清楚连上网线后,在驱动还没开始处理网卡数据的前,网线上传了些什么数据?
A:差不多可以这样理解,当然实际上保存这个状态只需要一个寄存器的某一个标志位--也就是说只需要一个bit就够了
Q:网卡上相应寄存器的值是根据网线插入或拔出来确定,还是根据数据的传入来判断?还是别的什么因素?
A:根据网线是否插入来确定--当然网线的另一端是要插在一个已经上电的网络端口上的,可以是路由器、hub或其他的一个NIC端口。
Q:还有对于路由器分配的IP是怎么发送的呢?连上网线路由器马上发数据给网卡?还是网卡跟路由器先通讯一会,内核通过网卡问路由器要的?换个说法,就是我想弄清楚连上网线后,在驱动还没开始处理网卡数据的前,网线上传了些什么数据?
A:这个问题回答起来就没那么简单了。全部说清楚至少要把“tcp/ip协议是如何实现的”这么一个大题目用几千字甚至上万字的篇幅说一遍。建议你从头学习一下网络的7层模型:http://zh.wikipedia.org/zh-cn/OSI%E6%A8%A1%E5%9E%8B。可以告诉你的,就是象插上网线改变网卡的某个寄存器标志位状态这种功能,是在第二层以下实现的,这个层面上还没有ip协议什么事儿。要详细搞清楚这些内容,你需要找一本非常专业的讲解网络协议的书看看(我以前看的是《TCP/IP协议详解》)--这种问题不是论坛里三言两语可以说清楚的,只有自己去花功夫看书,再结合具体使用的网络设备、os、内核、驱动模块、设备文件等实际操作的元素,来理解那些网络的相关理论在一个系统上是如何实现的。
某些网卡的厂商会在其官网上提供网卡的诊断工具,但可能不少都是win下的版本。比如当时我在ubuntu上发现“网卡状态不正常导致无法联网”时,就是到broadcom的网站上下载了其win下的网卡诊断工具,直接看到那些平时看不到的标志位是如何改变的,从而解决了我自己的问题。你也可以尝试去你的网卡制造商的网站找找是否有这种工具,有的话对你搞清楚一块网卡到底是怎么工作的会很有帮助。
三年后终于回到16.04--稳定了!
-
- 帖子: 3
- 注册时间: 2014-06-17 19:04
- 系统: ubuntu14.04
Re: 有点晕,关于网卡驱动原理,我想请教一下驱动是怎么检测网线的
非常感谢你的解答。通过你的解答我确定了问题还是出在我的代码上,检查了一遍代码。在进入中断后,关闭中断,进行判断中断类型的时候,因为一段错误的代码,居然直接跳了出去,没有使能中断,然后就检测不到网线了,因为再也没有中断了。。。第一次开发倒在这上面了。。。taohunter 写了:Q:插入网线与拔出网线,是不是会改变网卡对应的寄存器?我理解的对吗?如果不对应该是什么?56tyty56 写了:我不行了,大神帮帮我吧
一个月前,我心血来潮,在ubuntu14.04的内核源码中倒腾出智微以太网卡模块,准备移植到我的黑苹果里。
现在初始化部分移植完成差不多了,也许因为我没有系统的学习过这些,网线检测那部分原理不懂,发送接收部分正在努力移植。
我看了JMicron和realtek以太网卡的源码,貌似插入网线和拔出网线,都会改变网卡上某一寄存器的值。
我想问一下,插入网线与拔出网线,是不是会改变网卡对应的寄存器?我理解的对吗?如果不对应该是什么?
如果我理解对了,那么网卡上相应寄存器的值是根据网线插入或拔出来确定,还是根据数据的传入来判断?还是别的什么因素?
还有对于路由器分配的IP是怎么发送的呢?连上网线路由器马上发数据给网卡?还是网卡跟路由器先通讯一会,内核通过网卡问路由器要的?换个说法,就是我想弄清楚连上网线后,在驱动还没开始处理网卡数据的前,网线上传了些什么数据?
A:差不多可以这样理解,当然实际上保存这个状态只需要一个寄存器的某一个标志位--也就是说只需要一个bit就够了
Q:网卡上相应寄存器的值是根据网线插入或拔出来确定,还是根据数据的传入来判断?还是别的什么因素?
A:根据网线是否插入来确定--当然网线的另一端是要插在一个已经上电的网络端口上的,可以是路由器、hub或其他的一个NIC端口。
Q:还有对于路由器分配的IP是怎么发送的呢?连上网线路由器马上发数据给网卡?还是网卡跟路由器先通讯一会,内核通过网卡问路由器要的?换个说法,就是我想弄清楚连上网线后,在驱动还没开始处理网卡数据的前,网线上传了些什么数据?
A:这个问题回答起来就没那么简单了。全部说清楚至少要把“tcp/ip协议是如何实现的”这么一个大题目用几千字甚至上万字的篇幅说一遍。建议你从头学习一下网络的7层模型:http://zh.wikipedia.org/zh-cn/OSI%E6%A8%A1%E5%9E%8B。可以告诉你的,就是象插上网线改变网卡的某个寄存器标志位状态这种功能,是在第二层以下实现的,这个层面上还没有ip协议什么事儿。要详细搞清楚这些内容,你需要找一本非常专业的讲解网络协议的书看看(我以前看的是《TCP/IP协议详解》)--这种问题不是论坛里三言两语可以说清楚的,只有自己去花功夫看书,再结合具体使用的网络设备、os、内核、驱动模块、设备文件等实际操作的元素,来理解那些网络的相关理论在一个系统上是如何实现的。
某些网卡的厂商会在其官网上提供网卡的诊断工具,但可能不少都是win下的版本。比如当时我在ubuntu上发现“网卡状态不正常导致无法联网”时,就是到broadcom的网站上下载了其win下的网卡诊断工具,直接看到那些平时看不到的标志位是如何改变的,从而解决了我自己的问题。你也可以尝试去你的网卡制造商的网站找找是否有这种工具,有的话对你搞清楚一块网卡到底是怎么工作的会很有帮助。
第一次来这论坛,不知道怎么回复,引用就是么?
-
- 帖子: 1555
- 注册时间: 2012-03-31 3:29
Re: 有点晕,关于网卡驱动原理,我想请教一下驱动是怎么检测网线的
直接在下面“发表回复”输入框中回复也行,想引用别人的原话就点人家帖子上的“引用”,觉得引用文字太长的话,自己可以再酌情在quote的符号内裁剪原文,就象编辑自己的回复一样。
至于你编程中碰到的具体问题,请按照给你的建议去google一下看看有没有网卡厂商的诊断工具,再结合debug的工具,这是我能想到的最简单的处理方式了。
至于你编程中碰到的具体问题,请按照给你的建议去google一下看看有没有网卡厂商的诊断工具,再结合debug的工具,这是我能想到的最简单的处理方式了。
三年后终于回到16.04--稳定了!