日期:2014-05-16  浏览次数:20581 次

Linux下的网络设备驱动(一)

版权所有,转载必须说明转自 http://my.csdn.net/weiqing1981127 

原创作者:南京邮电大学  通信与信息系统专业 研二 魏清

 

一.网络设备驱动基础

1.       以太网基础理论

以太网是局域网的一种,它使用载波监听多路访问及冲突检测技术(CSMA/CD),并以10M/S的速率运行在多种类型的电缆上,常用的网卡芯片有DM9000、DM9161、CS8900芯片。

以太网的拓扑结构有总线型和星型,以太网的工作模式有半双工和全双工。目前双绞线是以太网最普通的传输介质,它多用于从主机到集线器或交换机的连接,光纤主要用于交换机间的级联和交换机到路由器间的点到点的链路上。

在局域网中,多个节点是共享传输介质的,这就必须有某种机制来决定某个时刻,哪个设备占用传输介质来传输数据,因此,局域网的链路层要有介质访问控制的功能,即数据链路层分为逻辑链路控制LLC子层和介质访问控制MAC子层。

以太网的帧结构主要有Ethernet II Ethernet 802.3rawEthernet802.3SAPEthernet802.3SNAP

以太网控制器实现了MAC层功能,而且必须与PHY(物理层收发器)联合使用,前者与OSI的数据链路层相关,后者实现物理层功能。MII(媒体无关接口)是连接快速以太网MACPHY的标准接口,以太网的设备驱动是通过MIIPHY通信,以配置PHY ID、速率、双工模式等参数。

2.       Linux网络驱动层次

Linux网络驱动可以划分四层,即网络协议接口层、网络设备接口层、设备驱动功能层和设备物理媒介层,内核中是通过以dev_base为头指针的设备链表来管理所有的网络设备。网络设备驱动的编写主要是网络设备net_device的初始化和数据包的收发函数。

 

网络协议接口层

网络协议接口层最主要的功能是给上层协议提供了透明的数据包发送和接收接口,当上层的APIIP需要发送数据包时,它将调用网络协议接口层的dev_queue_xmit函数发送一个内容为sk_buff的数据;当上层对数据包的接收数据,则是通过向netif_rx函数传递一个sk_buff数据结构的指针来完成的。Sk_buff套接字缓冲区为linux网络层提供了高效的缓冲区处理和流量控制机制,当发送数据包时,Linux内核的网络处理模块必须建立一个需要传输的数据包