第章网络设备驱动程序分析与设计.ppt
- 文档编号:18705059
- 上传时间:2023-10-13
- 格式:PPT
- 页数:26
- 大小:662.50KB
第章网络设备驱动程序分析与设计.ppt
《第章网络设备驱动程序分析与设计.ppt》由会员分享,可在线阅读,更多相关《第章网络设备驱动程序分析与设计.ppt(26页珍藏版)》请在冰点文库上搜索。
第11章网络设备驱动程序分析与设计,2023/9/30,11.1以太网概述,11.1TCP/IP网络协议,图11-1TCP/IP协议分层结构图,11.1以太网概述,11.1TCP/IP网络协议
(1)TCP(TransferControlProtocol)传输控制协议TCP协议是基于连接的协议,在需要通信的两个应用程序之间建立起一条虚拟的连接线路,而这条线路间可能会经过很多子网、网关和路由器。
TCP协议保证在两个应用程序之间可靠地传送和接收数据,并且可以保证没有丢失的或者重复的数据包。
(2)UDP(UserDatagramProtocol)用户数据包协议UDP协议是一种无连接、不可靠的传输层协议。
使用该协议只是把应用程序传来的数据加上UDP头包括端口号、段长等字段,作为UDP数据包发送出去,但并不保证数据包能到达目的地,其可靠性由应用层来提供。
11.1以太网概述,11.1TCP/IP网络协议(3)IP(InternetProtocol)网际协议,版本:
占4比特,指IP协议的版本。
首部长度:
占4比特,数据据包包头的长度。
以32位(相当于4字节)长度为单位。
服务类型:
占8比特,主机要求通信子网提供的服务类型。
包括一个3比特长度的优先级,4个标志位D、T、R和C,其中D、T、R、C分别表示延迟、呑吐量、可靠性和代价,另外1比特未用。
11.1以太网概述,11.1TCP/IP网络协议(3)IP(InternetProtocol)网际协议,总长度:
占16比特,数据报的总长度,包括头部和数据,以字节为单位。
数据报的最大长度为2161字节,即65535字节。
标识:
占16比特,标识数据报。
当数据报长度超出网络最大传输单元(MTU)时,必须进行分割,并且需要为分割段(fragment)提供标识。
所有属于同一数据报的分割段被赋予相同的标识值。
11.1以太网概述,11.1TCP/IP网络协议(3)IP(InternetProtocol)网际协议,标志:
占3比特,指出该数据报是否可分段。
目前只有前两个比特有意义。
片偏移:
占13比特,若有分段时,用以指出该分段在数据报中的相对位置。
片偏移以8字节为偏移单位,即每个分片的长度一定是8字节(64位)的整数倍。
生存时间或生命期:
占8比特,记为TTL(TimeToLive),即数据报在网络中的寿命,生存时间每经过一个路由结点都要递减,当生存时间减到零时,分组就要被丢弃。
11.1以太网概述,11.1TCP/IP网络协议(3)IP(InternetProtocol)网际协议,协议:
占8比特,指示传输层所采用的协议,如TCP、UDP或ICMP等。
首部校验和:
占16比特,此字段只检验数据报的首部,不包括数据部分。
任选字段:
支持各种选项,提供扩展余地。
根据选项的不同,该字段是可变长的,从1字节到40字节,可用来支持排错、测量以及安全等措施。
IP地址:
占32比特,32位的源地址与目的地址分别指出源主机和目的主机的网络地址。
11.1以太网概述,11.1TCP/IP网络协议(4)ARP(AddressResolutionProtocol)地址解析协议ARP协议实现了从IP地址到对应物理地址的转换。
希望把IP地址翻译成硬件地址的主机使用广播地址向网络中的所有节点发送一个包括IP地址的ARP请求数据包,目的主机的ARP收到这份广播报文后,识别出这是发送端在询问它的IP地址,于是发送一个包含目的主机IP地址及对应的MAC地址的ARP应答给源主机。
为了加快ARP协议解析的数据,每台主机上都有一个ARP高速缓存,存放最近的IP地址到硬件地址之间的映射记录。
这样,当在ARP的生存时间之内连续进行ARP解析的时候,就不需要反复发送ARP请求了。
11.1以太网概述,11.1TCP/IP网络协议(5)SLIP(SerialLineInternetProtocol)串行线路网际协议用户接入Internet,在传送数据时都需要有数据链路层协议,其中最为广泛的是串行线路网际协议(SLIP)和点对点协议(PPP)。
SLIP是一种在串行线路上对IP数据报进行封装的简单形式,该协议是Windows远程访问的一种旧工业标准,主要在Unix远程访问服务器中使用,现今仍然用于连接某些ISP。
因为SLIP协议是面向低速串行线路的,可以用于专用线路,也可以用于拨号线路,Modem的传输速率在1200bps到19200bps。
11.1以太网概述,11.1TCP/IP网络协议(6)PPP(PointtoPointProtocol)点对点协议PPP是面向字符类型的协议。
PPP具有处理错误检测、支持多个协议、允许在连接时刻协商IP地址、允许身份认证等功能。
图11-3PPP帧格式,11.2以太网,11.2.1以太网拓扑结构,总线拓扑的优点是:
电缆长度短,易于布线和维护;结构简单,传输介质又是无源元件,从硬件的角度看,十分可靠。
总线拓扑的缺点是:
因为总线拓扑的网不是集中控制的,所以故障检测需要在网上的各个站点上进行;在扩展总线的干线长度时,需重新配置中继器、剪裁电缆、调整终端器等;总线上的站点需要介质访问控制功能,这就增加了站点的硬件和软件费用。
11.2以太网,11.2.2以太网协议以太网采用载波监听冲突检测CSMA/CD,其工作原理是:
发送数据前先监听信道是否空闲,若空闲,则立即发送数据。
在发送数据时,边发送边继续监听,若监听到冲突,则立即停止发送数据,这种在传输的过程中监测电缆的方法称为冲突检测。
CSMA/CD不仅仅只检测冲突,它也能从冲突中恢复。
在一个冲突发生后,计算机必须等待电缆再次空闲后才能传输帧。
然而,如果以太网一空闲计算机就开始传输,那么另一次冲突就会发生。
为了防止多次冲突,以太网要求每台计算机在冲突后延迟一段时间才尝试传输。
标准指定了最大延迟d,并且要求每台计算机选择一个小于d的随机延迟。
11.2以太网,11.2.3以太网帧结构,同步位:
由8个(以太网帧)或7个(IEEE802.3)字节的交替出现的1和0组成,设置该字段的目的是指示帧的开始并便于网络中的所有接收器均能与到达帧同步。
帧首定界符(SOF):
该字段仅在IEEE802.3标准中有效,它可以被看作前序字段的延续。
目标和源地址:
表示发送和接收帧的工作站的地址,各占6个字节。
11.2以太网,11.2.3以太网帧结构,类型:
仅存在于以太网帧中,占用2个字节,指定接收数据的高层协议。
长度:
存在于IEEE802.3帧中,表示紧随其后的以字节为单位的数据段的长度。
数据:
数据段长度不能超过1500字节,不能低于46字节。
帧校验序列(FSC):
该序列包含长度为4个字节的循环冗余校验值(CRC),由发送设备计算产生,在接收方被重新计算,以确定帧在传送过程中是否被损坏。
11.3嵌入式网络接口,网卡工作在网络OSI模型的最后两层,物理层和数据链路层。
物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。
物理层的芯片称之为PHY。
数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。
以太网卡中数据链路层的芯片称之为MAC控制器。
11.3嵌入式网络接口,1、内置网络的微处理器将微控制器、以太网媒体接入控制器(MAC)和物理接口收发器(PHY)整合进同一芯片,这样能去掉许多外接元器件。
这种方案可使MAC和PHY实现很好的匹配,同时还可减小引脚数、缩小芯片面积。
2、通过以太网芯片扩充网络
(1)RTL8019RTL8019AS是一种全双工即插即用的以太网控制器,它在一块芯片上集成了RTL8019内核和一个16KB的SDRAM存储器。
11.3嵌入式网络接口,2、通过以太网芯片扩充网络
(2)CS8900CS8900A是CIRRUSLOGIC公司生产的低功耗、性能优越的16位以太网控制器,功能强大。
该芯片的突出特点是使用灵活,其物理层接口、数据传输模式和工作模式等都能根据需要而动态调整,通过内部寄存器的设置来适应不同的应用环境。
(3)ENC28J60ENC28J60是MicrochipTechnology(美国微芯科技公司)近期推出的28引脚独立以太网控制器。
(4)DM9000DM9000是一款完全集成、符合成本效益单芯片快速以太网MAC控制器与一般处理接口,一个10/100M自适应的PHY和4KDWORD值的SRAM。
11.4嵌入式Linux网络驱动,11.4.1Linux网络设备驱动程序的体系结构,11.4嵌入式Linux网络驱动,11.4.2网络驱动程序的基本方法
(1)初始化(initialize)驱动程序必须有一个初始化方法。
在把驱动程序载入系统的时候会调用这个初始化程序。
它做以下几方面的工作。
检测设备。
在初始化程序里你可以根据硬件的特征检查硬件是否存在,然后决定是否启动这个驱动程序。
(2)打开(open)open这个方法在网络设备驱动程序里是网络设备被激活的时候被调用(即设备状态由down-up)。
(3)关闭(stop)close方法做和open相反的工作。
可以释放某些资源以减少系统负担。
close是在设备状态由up转为down时被调用的。
11.4嵌入式Linux网络驱动,11.4.2网络驱动程序的基本方法(4)发送(hard_start_xmit)所有的网络设备驱动程序都必须有这个发送方法。
在系统调用驱动程序的xmit时,发送的数据放在一个sk_buff结构中。
一般的驱动程序把数据传给硬件发出去。
也有一些特殊的设备比如loopback把数据组成一个接收数据再回送给系统,或者dummy设备直接丢弃数据。
(5)接收(reception)驱动程序并不存在一个接收方法。
有数据收到应该是驱动程序来通知系统的。
一般设备收到数据后都会产生一个中断,在中断处理程序中驱动程序申请一块sk_buff(skb),从硬件读出数据放置到申请好的缓冲区里。
接下来填充sk_buff中的一些信息。
skb-dev=dev,判断收到帧的协议类型,填入skb-protocol(多协议的支持)。
11.4嵌入式Linux网络驱动,11.4.2网络驱动程序的基本方法(6)硬件帧头(hard_header)硬件一般都会在上层数据发送之前加上自己的硬件帧头,比如以太网(Ethernet)就有14字节的帧头。
这个帧头是加在上层ip、ipx等数据包的前面的。
驱动程序提供一个hard_header方法,协议层(ip、ipx、arp等)在发送数据之前会调用这段程序。
(7)地址解析(xarp)(8)参数设置和统计数据在驱动程序里还提供一些方法供系统对设备的参数进行设置和读取信息。
一般只有超级用户(root)权限才能对设备参数进行设置。
11.4嵌入式Linux网络驱动,11.4.3网络驱动中主要的数据结构
(1)net_device数据结构structnet_device结构体是整个网络驱动结构的核心,其中定义了很多供网络协议接口层调用设备的标准方法,供操作系统或协议层调用,该结构在2.6内核源码树文件中定义,在内核目录的/include/linux/netdevice.h,其英文注释非常详细,其整个数据结构分为可见部分和隐藏部分。
11.4嵌入式Linux网络驱动,11.4.3网络驱动中主要的数据结构
(2)sk_buffLinux网络系统各个层次之间的数据传送都是通过套接字缓冲区sk_buff完成的,sk_buff数据结构是各层协议数据处理的对象。
sk_buff是驱动程序与网络之间交换数据的媒介,驱动程序向网络发送数据时,必须从其中获取数据源和数据长度;驱动程序从网络上接收到数据后也要将数据保存到sk_buff中才能交给上层协议处理。
11.5网络驱动程序的移植及分析,linux2.6内核已经自带了DM9000网卡芯片的支持,因此,只需要在其基础上稍加改动,让系统能正确的检测到设备、初始化网卡,让驱动找到收发的接口,一般也就是中断/DMA就可以了。
(1)定义设备结构(在arch/arm/plat-s3c24xx/devs.c中)
(2)在include/asm-arm/plat-s3c24xx/devs.h文件中添加一行(3)在arch/arm/mach-s3c2410/mach-smdk2410.c中将dm9000加入到要初始化的设备链表里去,内核启动时将会检测设备并加载驱动,11.5网络驱动程序的移植及分析,linux2.6内核已经自带了DM9000网卡芯片的支持,因此,只需要在其基础上稍加改动,让系统能正确的检测到设备、初始化网卡,让驱动找到收发的接口,一般也就是中断/DMA就可以了。
(4)在arch/arm/mach-s3c2440/mach-smdk2440.c中加入对DM9000的地址映射(5)修改driver/net/dm9000.c(6)配置内核(7)将内核烧写到开发板的flash中,ThankYou!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络设备 驱动程序 分析 设计