RTL8019AS的工作流程1-网卡简介
44b0开发板上用的网络芯片是rtl8019as,但是在移植u-boot到开发板的时候,网络的移植出了一点问题。
所以想看看rtl8019as这个网卡是如何工作的,很不幸的是,正如网络上很多人说的那样,rtl8019的文档及其的烂,真的不是一般的烂。
基本上看过它的文档,跟没看过没什么区别。
还好,参考了一些网络上的文章和自己的bios的网络驱动部分,对于rtl8019的工作方式,工作流程有了一个总体的概念。
主要参考了下面的几篇文章:
http://www.cnitblog.com/buf/archive/2008/11/01/50953.html
http://www.eaw.com.cn/news/techhotdisplay/article/15982
还有一篇很久之前杨屹的一篇关于rtl8019的介绍,这篇介绍非常的好。
rtl8019as网卡的功能:
一句话来说,网卡所完成的功能就是收发数据。
- 接收功能:从网络上接收数据,然后存储于网卡内部的RAM(本网卡为16KB)中,然后触发中断,通知CPU来取走数据。
- 发送功能:CPU发送的数据被复制到网卡内部的RAM中,然后网卡自主的在网络上发送这些数据。
由此可见,对于程序员来说,网卡其实就是一片内存区域。程序员对网卡的操作实际上可以认为是对内存的读写操作。
当网络上有数据传来时,网卡存储这些数据到内存,并通知CPU到内存的相应位置取相应大小的数据。
当CPU想向网络上传输数据时,只需要将数据写入网卡的内存,然后给网卡一个”发送”命令即可。
就是这么简单。
问题是,我们这里说的”数据”到底是什么?
很明显的,网络数据是一个层次性很强的东西,OSI就规定了网络的7层协议,TCP/IP规定了5层协议,
从数据上来说,tcp帧作为IP帧的数据被打包进IP帧,而IP帧又作为以太网帧的数据被打包进以太网帧。
如上所述,CPU跟网卡的交互就是数据的读和写”数据”,但是,这个数据到底是什么数据呢?
我们该怎么理解从网卡中接收到的二进制数据呢?我应该认为它是一帧IP帧,还是一帧以太网帧呢?
我们写内存来发送数据,那么,我们发送的应该是什么格式的数据呢?我们是打包成IP数据,还是需要打包成以太网数据呢?
参考扬屹的那篇文章,接收和发送的数据的帧格式并不一样,如下图所示:

由上图可见,应用程序只需要将如上图所示的IP帧写入RAM中,其余的就叫给网卡去办就可以了。
而接收的数据,其实是一个修改过了的IP帧,整体还是在IP这个层次上。
由此可见,对于网络数据,应用层程序只需要处理到IP层,将数据打包成变形的IP帧即可。至于将IP帧打包成以太网帧然后在网络上传输,这些功能都是网卡自己完成的。
接收数据也是一样,从网卡的RAM中接收到的数据就是变形的IP帧,至于底层的物理链路数据和以太帧的解析,这些都是网卡完成的。
也就是说,IP层以下的处理,对于程序员来说,是透明的。
今天只是简单说说网卡的概念。
下一篇想分析一下rtl8019as的寄存器。

评论