第23章网络设备驱动程序_第1页
第23章网络设备驱动程序_第2页
第23章网络设备驱动程序_第3页
第23章网络设备驱动程序_第4页
第23章网络设备驱动程序_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第23章 网络设备驱动程序23.1 网络基础知识23.2 以太网基础23.3 网卡工作原理23.4 内核网络分层结构23.5 内核网络设备驱动框架23.6 实例:DM9000网卡驱动分析23.1 网络基础知识23.1.1 ISO/OSI网络参考模型23.1.2 TCP/IP协议23.1.1 ISO/OSI网络参考模型23.1.2 TCP/IP协议互联网采用了TCP/IP协议作为通信协议。TCP/IP协议是由许多协议组成的协议簇,其中最主要的就是TCP(传输控制)协议和IP(互联网)协议。TCP/IP协议最早由美国国防高级研究计划署在ARPANET上实现,随着不断的发展成为了目前互联网上使用最广

2、泛的协议,已经成为计算机网络通信事实上的标准协议。1TCP/IP协议简介TCP/IP协议只有4层:应用层、传输层、网络层和网络接口层。TCP/IP协议与OSI参考模型的对应关系如图所示。2TCP/IP协议分层结构在TCP/IP协议簇中,每个协议都有自己的协议头。协议头可以理解为一小段二进制数据,由长度不等的字段组成,用来说明协议所包含的信息。使用TCP/IP协议传输数据,在发送端按照协议层次从高到低依次在要传递的数据前加入各层协议的协议头,在接收端按照协议层次从低到高依次解析协议头。3网络接口层协议网络接口层也称做网络访问层,负责向网络发送和接收TCP/IP数据包,该层屏蔽了网络的具体差异。在

3、不同的网络上网络接口层的网络访问方法、数据帧格式等都不相同。TCP/IP协议支持以太网、令牌环网、串行链路、ATM、点对点等网络接口,支持PPP、SLIP、PPPoE、IEEE 802.x协议。4网络层该层负责数据包的寻址、打包和路由功能。路由的意思是寻找数据包在网络中的传输路径。网络层提供了ARP、IPv4、IPv6、ICMP、IGMP协议。ARP协议把数据包的逻辑地址翻译成网络硬件对应的媒体访问控制地址。与ARP协议对应的还有一个RARP协议,目的是翻译网络接口地址到数据包的逻辑地址。IP协议是TCP/IP协议的核心,它是一个数据报协议,负责主机之间数据包传输过程的寻址和路由。5传输层传输

4、层提供了数据包的传输控制,包括面向连接的TCP协议和UDP数据报协议。TCP协议最早出现在传输层,是TCP/IP协议簇中最重要的协议之一。TCP协议弥补了IP协议的不足,能够保证数据包在丢失后重发、删除多余的数据包,并且能否按照发送顺序重组数据包。6应用层该层允许应用程序访问其他层的服务。应用层定义了供应用程序使用的数据交换协议,包含大量的协议,并且还在不断的开发中。最常见的包括HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)等。应用层协议丰富了网络应用。23.2 以太网基础23.2.1 工作原理23.2.2 常见以太网标准23.2.3 拓扑结构23.2.4 工

5、作模式23.2.1 工作原理以太网中一个节点发送数据的工作过程如下:(1)监听网络是否有信号在传输,如果有信号,表示网络处于繁忙状态,则继续监听,直到网络空闲为止。(2)如果没有检测到网络上的传输信号则发送数据。(3)在传输数据过程中继续监听,如果发现网络有信号冲突(其他节点也发送数据),则执行退避算法。退避算法会随机等待一段时间,重复执行步骤(1)。(4)如果发送过程中没有冲突,则数据包发送成功,在发送下一个数据包前必须延迟一个固定时间(每种网络有自身的规定)后才可以执行步骤(1)。23.2.2 常见以太网标准从以太网的产生到目前已经产生了多种以太网标准,每种标准之前最大的差异就是传输速度的

6、提高。1标准以太网2快速以太网3千兆以太网4万兆以太网1标准以太网最初的以太网使用CSMA/CD访问控制方法,网络吞吐量只有10Mbps,称为标准以太网。以太网都遵守IEEE 802.3标准,支持双绞线和同轴电缆两种传输介质。提示:IEEE是国际电子电器协会的缩写,该协会指定了一系列的计算机接口和电气标准。2快速以太网在1993年GrandJunction公司推出了10/100Mbps的以太网集线器和接口卡。随后各家厂商都推出了自己的100Mbps以太网设备,IEEE对100Mbps的以太网设备进行了全面研究,提出了802.3u标准,从此提出了快速以太网的概念。在快速以太网出现之前,已经有了1

7、0Mbps以上吞吐量的局域网,使用光纤分布式接口(FDDI)。快速以太网采用了与标准以太网相同的技术,通过改进传输介质提高了网络吞吐量,是一种廉价的局域网解决方案。3千兆以太网千兆以太网是比较新的高速以太网技术,网络吞吐量可以达到1000Mbps。千兆以太网最大的特点是继承了以太网价格便宜的优点,采用了与标准以太网相同的帧格式和网络协议,对上层应用透明。因此,千兆以太网最大限度地保护了现有设备的投资。由于协议相同,千兆以太网可以很好地兼容10M和100M以太网。4万兆以太网万兆以太网是目前最新的以太网技术,其规范包含在IEEE 802.3ae标准中。万兆以太网使用光纤作为传输介质,并且改进了网

8、络传输技术,极大提高了网络吞吐量。23.2.3 拓扑结构以太网支持总线型和星型拓扑结构。总线型结构的特点是使用电缆少、价格便宜,但是管理成本高,网络故障不易定位。星型结构的特点是管理方便、容易扩展、网络故障容易定位,但是需要专用的网络设备作为网络交换核心,并且需要更多的网线,成本较高。23.2.4 工作模式以太网中最基本的设备就是以太网卡了,以太网卡可以在半双工和全双工模式下工作。半双工模式基于以太网的CSMA/CD机制工作。传统的以太网使用半双工模式,在同一时间只能一个方向传输数据,当有两个或两个以上节点传输数据的时候会导致网络产生数据冲突,降低了网络效率。全双工模式使用点对点连接方式,这种

9、方式没有冲突产生。全双工使用双绞线中两个独立的线路,也就是说发送和接收在不同的线路上进行,在没有安装介质的情况下就可以提高带宽。在全双工模式下,冲突检测电路不再使用,因此一个全双工连接只用一个端口,在连接的双方向都提供了100%的效率。23.3 网卡工作原理网卡的全程是网络适配器或者网络接口卡(Network Interface Card,NIC),是计算机联网的必备设备。在计算机系统中,网卡负责把用户传递的数据转换为网络能识别的电信号,并且把网络上电信号还原成数据传递给用户。网卡的技术参数涉及带宽、总线接口、电气接口等。网卡还提供了网络数据包的存取控制、数据缓存等功能。23.4 内核网络分层

10、结构23.4.1 内核网络结构23.4.2 与网络有关的数据结构23.4.3 内核网络部分的全局变量23.4.1 内核网络结构在Linux内核中,对网络部分按照网络协议层、网络设备层、设备驱动功能层和网络媒介层的分层体系设计。网络驱动功能层主要通过网络驱动程序实现。在Linux内核,所有的网络设备都被抽象为一个接口处理,该接口提供了所有的网络操作。在Linux内核中,对IPv4协议网络可以按照下面的方法划分。socket层INET socket层TCP/UDP层IP层驱动程序23.4.2 与网络有关的数据结构1分配和释放函数struct sk_buff*alloc_skb (unsigned

11、int len, int priority);/ 分配函数struct sk_buff*dev_alloc_skb (unsigned int len);void kfree_skb (struct sk_buff*skb, int rw);/ 释放函数void dev_kfree_skb (struct sk_buff*skb, int rw);2缓冲区尾部添加数据unsigned char *skb_put (struct sk_buff*skb, int len);skb_put()函数用于追加数据到skb_buff缓冲区的尾部,该函数添加完数据后会修改tail指针,并且更新len长度。

12、3缓冲区首部添加数据unsigned char *skb_push (struct sk_buff*skb, int len);skb_push()函数添加数据到缓冲区首部,之后会修改data和len。该函数返回值是修改后的data指针地址。23.4.3 内核网络部分的全局变量Linux内核网络部分有几个重要的全局变量,网络接口和协议都使用这些全局变量完成网络功能。1与协议有关的全局变量2与包类型有关的全局变量3网络设备接口中的全局变量1与协议有关的全局变量在net/socket.c文件的第150行定义了一个与网络协议有关的全局变量net_families,定义如下:static struct

13、 net_proto_family *net_familiesNPROTO;2与包类型有关的全局变量在net/core/dev.c文件定义了两个与包类型有关的全局变量:static struct list_head ptype_base16;/* 16 way hashed list */static struct list_head ptype_all;/* Taps */static struct packet_type ip_packet_type = .type = _constant_htons(ETH_P_IP),.func = ip_rcv,/ 接收到数据包的处理函数.gso_s

14、end_check = inet_gso_send_check,/ 发送数据包之前处理函数.gso_segment = inet_gso_segment,/ 包分片处理函数;该变量记录了IP数据包的处理函数,内核通过调用这些函数处理IP报文。3网络设备接口中的全局变量在net/core/dev.c第178行定义了一个dev_base全局变量:struct net_device *dev_base;static struct hlist_head dev_name_head1NETDEV_HASHBITS;static struct hlist_head dev_index_head1NETDE

15、V_HASHBITS;23.5 内核网络设备驱动框架23.5.1 net_device结构23.5.2 数据包接收流程23.5.3 数据包发送流程23.5.1 net_device结构net_device结构保存在include/linux/netdevices.h头文件,理解该结构对理解网络设备驱动有很大帮助。内核中所有网络设备的信息和操作都在net_device设备中,无论是注册网络设备,还是设置网络设备参数,都用到该结构。1设备名称2总线参数3协议参数1设备名称在name成员中记录网络设备的名称,Linux对局域网设备命名使用“eth”的方式,在网络驱动中可以设置name域,也可以留空由

16、内核自动分配网络设备名称。2总线参数总线参数设置设备的地址空间,主要包括下面几个参数:中断请求号(IRQ)基地址(bash_addr)mem_start和mem_end dma3协议参数网络驱动程序中需要提供协议层参数,可以更加智能地执行任务,协议参数也被保存在网络设备结构中。常见的协议参数如下:mtufamilytype定定 义义 名名 称称含含 义义ARPHRD_NETROMARPHRD_ETHER10或100Mbps以太网适配器ARPHRD_EETHER实验用网卡(没有使用)ARPHRD_AX25AX.25接口ARPHRD_PRONETPROnet token ring(未使用)4链接层

17、变量hard_header_len:该变量标示网络缓冲区中硬件帧的大小。该值与将来添加的硬件帧头部长度可能不一致。dev_addr:该变量是一个字符数组,保存物理地址。如果物理地址长度小于字符数组长度,则从左到右存放物理地址,并且使用addr_len成员变量标识物理地址长度。实际上,许多介质没有物理地址,该变量通常为0。有些介质的物理地址可以通过ifconfig工具设置,因此可以不初始化该变量。但是需要注意的是,如果没有设置设备的物理地址,数据包无法被传输。5接口标志在include/linux/if.h头文件中定义了一些接口标志,目的是为了标识接口属性,起到提高网络接口兼容性的作用。接接 口

18、口 标标 示示含含 义义IFF_UP接口已经激活IFF_BROADCAST设置设备广播地址有效IFF_DEBUG标识设备调试能力打开IFF_LOOPBACK环回设备使用IFF_POINTOPOINT点对点设备使用(包括SLIP和PPP协议设备)。点对点设备通常没有子网掩码和广播地址IFF_RUNNING同IFF_UPIFF_NOARP表示该接口不支持ARP协议。因此,接口必须有一个静态地址转换表,或者不做地址映射23.5.2 数据包接收流程23.5.3 数据包发送流程本节还是以UDP数据包发送流程为例,介绍在DM9000网卡上如何发送一个数据包,如图所示。23.6 实例:DM9000网卡驱动分

19、析23.6.1 DM9000芯片介绍23.6.2 网卡驱动程序框架23.6.3 DM9000网卡驱动主要数据结构23.6.4 加载驱动程序23.6.5 停止和启动网卡23.6.6 发送数据包23.6.7 接收数据包23.6.8 中断和定时器处理23.6.1 DM9000芯片介绍DM9000是DAVICOM公司的一款高度集成、低功耗的快速以太网处理器,该芯片集成了MAC和PHY。DM9000可以和CPU直接连接,支持8位、16位和32位数据总线宽度。该芯片支持10M和100M自适应以太网接口,内部有16K的FIFO以及4K双字节SRAM,支持全双工工作。DM9000内部还集成了接收缓冲区,可以在

20、接收到数据的时候把数据存放到缓冲区中,链路层可以直接把数据从缓冲区取走。23.6.2 网卡驱动程序框架在一个网络驱动程序中,一般都提供了一个platform_driver结构变量。platform_driver结构包括了网卡驱动的相关操作函数,通过platform_driver_register()函数注册到内核设备驱动列表。内核会根据驱动程序中设备描述设置网卡的中断和定时器,并且在网络数据包到来的时候调用网卡对应的处理函数。proberemovesuspendresume23.6.3 DM9000网卡驱动主要数据结构DM9000网卡驱动位于driver/net/dm9000.c文件中,有两个主要的数据结构dm9000_ driver和board_info。其中,dm9000_driver是platform_driver结构,定义如下:204 static struct platform_driver dm9000_driver = 205 .driver = 206 .name = dm9000,/ 网卡名称207 .owner = THIS_MODULE,208 ,209 .probe = dm9000_probe,/ 加载驱动函数210 .remove =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论