首页 > UNIX编程 > RTL8019AS的工作流程1-网卡简介

RTL8019AS的工作流程1-网卡简介

2010年1月20日 admin 发表评论 阅读评论

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数据,还是需要打包成以太网数据呢?

参考扬屹的那篇文章,接收和发送的数据的帧格式并不一样,如下图所示:

fram structure of rtl8019

由上图可见,应用程序只需要将如上图所示的IP帧写入RAM中,其余的就叫给网卡去办就可以了。

而接收的数据,其实是一个修改过了的IP帧,整体还是在IP这个层次上。

由此可见,对于网络数据,应用层程序只需要处理到IP层,将数据打包成变形的IP帧即可。至于将IP帧打包成以太网帧然后在网络上传输,这些功能都是网卡自己完成的。

接收数据也是一样,从网卡的RAM中接收到的数据就是变形的IP帧,至于底层的物理链路数据和以太帧的解析,这些都是网卡完成的。

也就是说,IP层以下的处理,对于程序员来说,是透明的。

今天只是简单说说网卡的概念。

下一篇想分析一下rtl8019as的寄存器。

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.