《第11章网络设备驱动程序分析与设计.ppt》由会员分享,可在线阅读,更多相关《第11章网络设备驱动程序分析与设计.ppt(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第1111章网络设备驱动程序分析章网络设备驱动程序分析与设计与设计现在学习的是第1页,共23页11.111.1以太网概述以太网概述v11.1 TCP/IP11.1 TCP/IP网络协议网络协议图11-1 TCP/IP协议分层结构图现在学习的是第2页,共23页11.111.1以太网概述以太网概述v11.1 TCP/IP11.1 TCP/IP网络协议网络协议(1 1)TCPTCP(Transfer Control ProtocolTransfer Control Protocol)传输控制协议)传输控制协议TCPTCP协议是基于连接的协议,在需要通信的两个应用程序之间建协议是基于连接的协议,在需
2、要通信的两个应用程序之间建立起一条虚拟的连接线路,而这条线路间可能会经过很多子网、网立起一条虚拟的连接线路,而这条线路间可能会经过很多子网、网关和路由器。关和路由器。TCPTCP协议保证在两个应用程序之间可靠地传送和接收数协议保证在两个应用程序之间可靠地传送和接收数据,并且可以保证没有丢失的或者重复的数据包。据,并且可以保证没有丢失的或者重复的数据包。(2 2)UDPUDP(User Datagram ProtocolUser Datagram Protocol)用户数据包协议)用户数据包协议UDPUDP协议是一种无连接、不可靠的传输层协议。使用该协议只是协议是一种无连接、不可靠的传输层协议。
3、使用该协议只是把应用程序传来的数据加上把应用程序传来的数据加上UDPUDP头包括端口号、段长等字段,作为头包括端口号、段长等字段,作为UDPUDP数据包发送出去,但并不保证数据包能到达目的地,其可靠性由应数据包发送出去,但并不保证数据包能到达目的地,其可靠性由应用层来提供。用层来提供。现在学习的是第3页,共23页11.111.1以太网概述以太网概述v11.1 TCP/IP11.1 TCP/IP网络协议网络协议(3 3)IPIP(Internet ProtocolInternet Protocol)网际协议)网际协议 版本:占4比特,指IP协议的版本。首部长度:占4比特,数据据包包头的长度。以3
4、2位(相当于4字节)长度为单位。服务类型:占8比特,主机要求通信子网提供的服务类型。包括一个3比特长度的优先级,4个标志位D、T、R和C,其中D、T、R、C分别表示延迟、呑吐量、可靠性和代价,另外1比特未用。现在学习的是第4页,共23页11.111.1以太网概述以太网概述v11.1 TCP/IP11.1 TCP/IP网络协议网络协议(3 3)IPIP(Internet ProtocolInternet Protocol)网际协议)网际协议 总长度:占16比特,数据报的总长度,包括头部和数据,以字节为单位。数据报的最大长度为2161字节,即65535字节。标识:占16比特,标识数据报。当数据报长
5、度超出网络最大传输单元(MTU)时,必须进行分割,并且需要为分割段(fragment)提供标识。所有属于同一数据报的分割段被赋予相同的标识值。现在学习的是第5页,共23页11.111.1以太网概述以太网概述v11.1 TCP/IP11.1 TCP/IP网络协议网络协议(3 3)IPIP(Internet ProtocolInternet Protocol)网际协议)网际协议 标志:占3比特,指出该数据报是否可分段。目前只有前两个比特有意义。片偏移:占13比特,若有分段时,用以指出该分段在数据报中的相对位置。片偏移以8字节为偏移单位,即每个分片的长度一定是8字节(64位)的整数倍。生存时间或生命
6、期:占8比特,记为TTL(Time To Live),即数据报在网络中的寿命,生存时间每经过一个路由结点都要递减,当生存时间减到零时,分组就要被丢弃。现在学习的是第6页,共23页11.111.1以太网概述以太网概述v11.1 TCP/IP11.1 TCP/IP网络协议网络协议(3 3)IPIP(Internet ProtocolInternet Protocol)网际协议)网际协议 协议:占8比特,指示传输层所采用的协议,如TCP、UDP或ICMP等。首部校验和:占16比特,此字段只检验数据报的首部,不包括数据部分。任选字段:支持各种选项,提供扩展余地。根据选项的不同,该字段是可变长的,从1字
7、节到40字节,可用来支持排错、测量以及安全等措施。IP地址:占32比特,32位的源地址与目的地址分别指出源主机和目的主机的网络地址。现在学习的是第7页,共23页11.111.1以太网概述以太网概述v11.1 TCP/IP11.1 TCP/IP网络协议网络协议(4 4)ARPARP(Address Resolution ProtocolAddress Resolution Protocol)地址解析协议)地址解析协议ARPARP协议实现了从协议实现了从IPIP地址到对应物理地址的转换。希望把地址到对应物理地址的转换。希望把IPIP地址地址翻译成硬件地址的主机使用广播地址向网络中的所有节点发送一翻
8、译成硬件地址的主机使用广播地址向网络中的所有节点发送一个包括个包括IPIP地址的地址的ARPARP请求数据包,目的主机的请求数据包,目的主机的ARPARP收到这份广播报文收到这份广播报文后,识别出这是发送端在询问它的后,识别出这是发送端在询问它的IPIP地址,于是发送一个包含目地址,于是发送一个包含目的主机的主机IPIP地址及对应的地址及对应的MACMAC地址的地址的ARPARP应答给源主机。应答给源主机。为了加快为了加快ARPARP协议解析的数据,每台主机上都有一个协议解析的数据,每台主机上都有一个ARPARP高速缓高速缓存,存放最近的存,存放最近的IPIP地址到硬件地址之间的映射记录。这样
9、,当在地址到硬件地址之间的映射记录。这样,当在ARPARP的生存时间之内连续进行的生存时间之内连续进行ARPARP解析的时候,就不需要反复发解析的时候,就不需要反复发送送ARPARP请求了。请求了。现在学习的是第8页,共23页11.111.1以太网概述以太网概述v11.1 TCP/IP11.1 TCP/IP网络协议网络协议(5 5)SLIPSLIP(Serial Line Internet ProtocolSerial Line Internet Protocol)串行线路网际协)串行线路网际协议议用户接入用户接入InternetInternet,在传送数据时都需要有数据链路层协议,其,在传送
10、数据时都需要有数据链路层协议,其中最为广泛的是串行中最为广泛的是串行 线路网际协议(线路网际协议(SLIPSLIP)和点对点协议()和点对点协议(PPPPPP)。)。SLIPSLIP是一种在串行线路上对是一种在串行线路上对IPIP数据报进行封装的简单形式,该协议数据报进行封装的简单形式,该协议是是WindowsWindows远程访问的一种旧工业标准,主要在远程访问的一种旧工业标准,主要在UnixUnix远程访问服务远程访问服务器中使用,现今仍然用于连接某些器中使用,现今仍然用于连接某些ISPISP。因为。因为SLIPSLIP协议是面向低速串协议是面向低速串行线路的,可以用于专用线路,也可以用于
11、拨号线路,行线路的,可以用于专用线路,也可以用于拨号线路,ModemModem的传输速的传输速率在率在1200bps1200bps到到19200bps19200bps。现在学习的是第9页,共23页11.111.1以太网概述以太网概述v11.1 TCP/IP11.1 TCP/IP网络协议网络协议(6 6)PPPPPP(Point Point to to Point Point ProtocolProtocol)点点对对点点协协议议 PPPPPP是是面面向向字字符符类类型型的的协协议议。PPPPPP具具有有处处理理错错误误检检测测、支支持持多多个个协协议议、允允许许在在连连接接时时刻刻协协商商IP
12、IP地地址址、允允许许身份认证等功能。身份认证等功能。图11-3 PPP帧格式现在学习的是第10页,共23页11.211.2以太网以太网v11.2.111.2.1以太网拓扑结构以太网拓扑结构总线拓扑的优点是:电缆长度短,易于布线和维护;结构简单,传输介质又是无源元件,从硬件的角度看,十分可靠。总线拓扑的缺点是:因为总线拓扑的网不是集中控制的,所以故障检测需要在网上的各个站点上进行;在扩展总线的干线长度时,需重新配置中继器、剪裁电缆、调整终端器等;总线上的站点需要介质访问控制功能,这就增加了站点的硬件和软件费用。现在学习的是第11页,共23页11.211.2以太网以太网v11.2.211.2.2
13、以太网协议以太网协议以太网采用载波监听冲突检测以太网采用载波监听冲突检测CSMA/CDCSMA/CD,其工作原理是:发送,其工作原理是:发送数据前先监听信道是否空闲,若空闲,则立即发送数据。在发送数据时,数据前先监听信道是否空闲,若空闲,则立即发送数据。在发送数据时,边发送边继续监听,若监听到冲突,则立即停止发送数据,这种在传输边发送边继续监听,若监听到冲突,则立即停止发送数据,这种在传输的过程中监测电缆的方法称为冲突检测。的过程中监测电缆的方法称为冲突检测。CSMA/CDCSMA/CD不仅仅只检测冲突,它也能从冲突中恢复。在一个冲突不仅仅只检测冲突,它也能从冲突中恢复。在一个冲突发生后,计算
14、机必须等待电缆再次空闲后才能传输帧。然而,如果发生后,计算机必须等待电缆再次空闲后才能传输帧。然而,如果以太网一空闲计算机就开始传输,那么另一次冲突就会发生。为了以太网一空闲计算机就开始传输,那么另一次冲突就会发生。为了防止多次冲突,以太网要求每台计算机在冲突后延迟一段时间才尝防止多次冲突,以太网要求每台计算机在冲突后延迟一段时间才尝试传输。标准指定了最大延迟试传输。标准指定了最大延迟d d,并且要求每台计算机选择一个小,并且要求每台计算机选择一个小于于d d的随机延迟。的随机延迟。现在学习的是第12页,共23页11.211.2以太网以太网v11.2.311.2.3以太网帧结构以太网帧结构同步
15、位:由8个(以太网帧)或7个(IEEE802.3)字节的交替出现的1和0组成,设置该字段的目的是指示帧的开始并便于网络中的所有接收器均能与到达帧同步。帧首定界符(SOF):该字段仅在IEEE802.3标准中有效,它可以被看作前序字段的延续。目标和源地址:表示发送和接收帧的工作站的地址,各占6个字节。现在学习的是第13页,共23页11.211.2以太网以太网v11.2.311.2.3以太网帧结构以太网帧结构类型:仅存在于以太网帧中,占用2个字节,指定接收数据的高层协议。长度:存在于IEEE 802.3帧中,表示紧随其后的以字节为单位的数据段的长度。数据:数据段长度不能超过1500字节,不能低于4
16、6字节。帧校验序列(FSC):该序列包含长度为4个字节的循环冗余校验值(CRC),由发送设备计算产生,在接收方被重新计算,以确定帧在传送过程中是否被损坏。现在学习的是第14页,共23页11.3 11.3 嵌入式网络接口嵌入式网络接口网卡工作在网络网卡工作在网络OSIOSI模型的最后两层,物理层和模型的最后两层,物理层和数据链路层。物理层定义了数据传送与接收所需要数据链路层。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。物理电路等,并向数据链路层设备提供标准接口。物理层的芯片称之为层
17、的芯片称之为PHYPHY。数据链路层则提供寻址机构、。数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。以太网卡中数据链层提供标准的数据接口等功能。以太网卡中数据链路层的芯片称之为路层的芯片称之为MACMAC控制器。控制器。现在学习的是第15页,共23页11.3 11.3 嵌入式网络接口嵌入式网络接口1 1、内置网络的微处理器、内置网络的微处理器将微控制器、以太网媒体接入控制器将微控制器、以太网媒体接入控制器(MAC)(MAC)和物和物理接口收发器理接口收发器(PHY)(PHY)整合进同一芯片,这样能去
18、掉许整合进同一芯片,这样能去掉许多外接元器件。这种方案可使多外接元器件。这种方案可使MACMAC和和PHYPHY实现很好的实现很好的匹配,同时还可减小引脚数、缩小芯片面积。匹配,同时还可减小引脚数、缩小芯片面积。2 2、通过以太网芯片扩充网络、通过以太网芯片扩充网络(1 1)RTL8019RTL8019RTL8019ASRTL8019AS是一种全双工即插即用的以太网控制是一种全双工即插即用的以太网控制器,它在一块芯片上集成了器,它在一块芯片上集成了RTL8019RTL8019内核和一个内核和一个16KB16KB的的SDRAMSDRAM存储器。存储器。现在学习的是第16页,共23页11.3 11
19、.3 嵌入式网络接口嵌入式网络接口2 2、通过以太网芯片扩充网络、通过以太网芯片扩充网络(2 2)CS8900CS8900CS8900ACS8900A是是CIRRUS LOGICCIRRUS LOGIC公司生产的低功耗、性能优越的公司生产的低功耗、性能优越的1616位以太网控制器,功能强大。该芯片的突出特点是使用灵活,其位以太网控制器,功能强大。该芯片的突出特点是使用灵活,其物理层接口、数据传输模式和工作模式等都能根据需要而动态调物理层接口、数据传输模式和工作模式等都能根据需要而动态调整,通过内部寄存器的设置来适应不同的应用环境。整,通过内部寄存器的设置来适应不同的应用环境。(3 3)ENC2
20、8J60ENC28J60ENC28J60ENC28J60是是Microchip TechnologyMicrochip Technology(美国微芯科技公司)近期(美国微芯科技公司)近期推出的推出的2828引脚独立以太网控制器。引脚独立以太网控制器。(4 4)DM9000DM9000DM9000DM9000是一款完全集成、符合成本效益单芯片快速以太网是一款完全集成、符合成本效益单芯片快速以太网MACMAC控制器与一般处理接口,一个控制器与一般处理接口,一个10/100M10/100M自适应的自适应的PHYPHY和和4K DWORD4K DWORD值的值的SRAMSRAM。现在学习的是第17页
21、,共23页11.411.4嵌入式嵌入式LinuxLinux网络驱动网络驱动v11.4.1 Linux11.4.1 Linux网络设备驱动程序的体系结构网络设备驱动程序的体系结构现在学习的是第18页,共23页11.411.4嵌入式嵌入式LinuxLinux网络驱动网络驱动v11.4.2 11.4.2 网络驱动程序的基本方法网络驱动程序的基本方法 (1 1)初始化()初始化(initializeinitialize)驱动程序必须有一个初始化方法。在把驱动程序载入系统的时候会驱动程序必须有一个初始化方法。在把驱动程序载入系统的时候会调用这个初始化程序。它做以下几方面的工作。检测设备。在初始化程调用这
22、个初始化程序。它做以下几方面的工作。检测设备。在初始化程序里你可以根据硬件的特征检查硬件是否存在,然后决定是否启动这个序里你可以根据硬件的特征检查硬件是否存在,然后决定是否启动这个驱动程序。驱动程序。(2 2)打开()打开(openopen)openopen这个方法在网络设备驱动程序里是网络设备被激活的这个方法在网络设备驱动程序里是网络设备被激活的时候被调用(即设备状态由时候被调用(即设备状态由down-updown-up)。)。(3 3)关闭()关闭(stopstop)closeclose方法做和方法做和openopen相反的工作。可以释放某些资源以减少系相反的工作。可以释放某些资源以减少系
23、统负担。统负担。closeclose是在设备状态由是在设备状态由upup转为转为downdown时被调用的。时被调用的。现在学习的是第19页,共23页11.411.4嵌入式嵌入式LinuxLinux网络驱动网络驱动v11.4.2 11.4.2 网络驱动程序的基本方法网络驱动程序的基本方法 (4 4)发送()发送(hard_start_xmithard_start_xmit)所有的网络设备驱动程序都必须有这个发送方法。在系统调用驱动所有的网络设备驱动程序都必须有这个发送方法。在系统调用驱动程序的程序的xmitxmit时,发送的数据放在一个时,发送的数据放在一个sk_buffsk_buff结构中。
24、一般的驱动结构中。一般的驱动程序把数据传给硬件发出去。也有一些特殊的设备比如程序把数据传给硬件发出去。也有一些特殊的设备比如loopbackloopback把数据组成一个接收数据再回送给系统,或者把数据组成一个接收数据再回送给系统,或者dummydummy设备直设备直接丢弃数据。接丢弃数据。(5 5)接收()接收(receptionreception)驱动程序并不存在一个接收方法。有数据收到应该是驱动程序来驱动程序并不存在一个接收方法。有数据收到应该是驱动程序来通知系统的。一般设备收到数据后都会产生一个中断,在中断处理通知系统的。一般设备收到数据后都会产生一个中断,在中断处理程序中驱动程序申请
25、一块程序中驱动程序申请一块sk_buff(skb)sk_buff(skb),从硬件读出数据放置到申,从硬件读出数据放置到申请好的缓冲区里。接下来填充请好的缓冲区里。接下来填充sk_buffsk_buff中的一些信息。中的一些信息。skb-dev=skb-dev=devdev,判断收到帧的协议类型,填入,判断收到帧的协议类型,填入skb-protocolskb-protocol(多协议的支(多协议的支持)。持)。现在学习的是第20页,共23页11.411.4嵌入式嵌入式LinuxLinux网络驱动网络驱动v11.4.2 11.4.2 网络驱动程序的基本方法网络驱动程序的基本方法 (6 6)硬件帧
26、头()硬件帧头(hard_headerhard_header)硬件一般都会在上层数据发送之前加上自己的硬硬件一般都会在上层数据发送之前加上自己的硬件帧头,比如以太网件帧头,比如以太网(Ethernet)(Ethernet)就有就有1414字节的帧头。字节的帧头。这个帧头是加在上层这个帧头是加在上层ipip、ipxipx等数据包的前面的。驱等数据包的前面的。驱动程序提供一个动程序提供一个hard_headerhard_header方法,协议层方法,协议层(ip(ip、ipxipx、arparp等等)在发送数据之前会调用这段程序。在发送数据之前会调用这段程序。(7 7)地址解析()地址解析(xar
27、pxarp)(8 8)参数设置和统计数据)参数设置和统计数据 在驱动程序里还提供一些方法供系统对设备的参在驱动程序里还提供一些方法供系统对设备的参数进行设置和读取信息。一般只有超级用户数进行设置和读取信息。一般只有超级用户(root)(root)权限才能对设备参数进行设置。权限才能对设备参数进行设置。现在学习的是第21页,共23页11.411.4嵌入式嵌入式LinuxLinux网络驱动网络驱动v11.4.3 11.4.3 网络驱动中主要的数据结构网络驱动中主要的数据结构(1 1)net_device net_device 数据结构数据结构struct net_devicestruct net_
28、device结构体是整个网络驱动结结构体是整个网络驱动结构的核心,其中定义了很多供网络协议接口层调用构的核心,其中定义了很多供网络协议接口层调用设备的标准方法,供操作系统或协议层调用,该结设备的标准方法,供操作系统或协议层调用,该结构在构在2.62.6内核源码树文件中定义,在内核目录的内核源码树文件中定义,在内核目录的/include/linux/netdevice.h/include/linux/netdevice.h,其英文注释非常详,其英文注释非常详细,其整个数据结构分为可见部分和隐藏部分。细,其整个数据结构分为可见部分和隐藏部分。现在学习的是第22页,共23页11.411.4嵌入式嵌入
29、式LinuxLinux网络驱动网络驱动v11.4.3 11.4.3 网络驱动中主要的数据结构网络驱动中主要的数据结构(2 2)sk_buffsk_buffLinuxLinux网络系统各个层次之间的数据传送都是通网络系统各个层次之间的数据传送都是通过套接字缓冲区过套接字缓冲区sk_buffsk_buff完成的,完成的,sk_buffsk_buff数据结构数据结构是各层协议数据处理的对象。是各层协议数据处理的对象。sk_buffsk_buff是驱动程序与是驱动程序与网络之间交换数据的媒介,驱动程序向网络发送数网络之间交换数据的媒介,驱动程序向网络发送数据时,必须从其中获取数据源和数据长度;驱动程据时,必须从其中获取数据源和数据长度;驱动程序从网络上接收到数据后也要将数据保存到序从网络上接收到数据后也要将数据保存到sk_buffsk_buff中才能交给上层协议处理。中才能交给上层协议处理。现在学习的是第23页,共23页