时间:2022-02-12 13:10:59
开篇:写作不仅是一种记录,更是一种创造,它让我们能够捕捉那些稍纵即逝的灵感,将它们永久地定格在纸上。下面是小编精心整理的12篇网卡驱动程序,希望这些内容能成为您创作过程中的良师益友,陪伴您不断探索和进步。
1、通常正确安装以太网卡设备的驱动程序之后,都会在网络连接中自动生存本地连接。开始运行输入:ncpa.cpl 按回车键打开网络连接。
2、如果之前网络是正常的,突然之间本地连接异常了,可以尝试右键点击本地连接禁用。
3、禁用之后,再右键点击本地连接启用即可。通过先禁用,后启用,可以还原本地连接的默认值,很多异常会排除。
4、如果是刚刚装好操作系统的异常,那么网卡驱动程序不匹配的可能性最大,需要使用正确的以太网卡设备的驱动程序更新即可。步骤是:开始控制面板系统设备管理器网络适配器右键点击网卡设备更新驱动程序软件按照向导指向驱动光盘按照向导运行即可。
5、如果没有附带的驱动程序光盘,可以使用自带万能网卡驱动程序的第三方软件更新之。
6、如果之前网卡设备的驱动程序正常,突然异常,也可以右键点击网卡设备禁用(或卸载)再启用(或扫描),此时系统会自动更新网卡驱动程序(也是还原默认值的操作),然后再启用即可。
(来源:文章屋网 )
【关键字】 单片机 以太网 精简协议栈
Embedded Network Module Design Based on MCU and Ethernet
Xiu Jianxin,Han Hongtao East University of Heilongjiang, Computer Science and Electrical Engineering Department
Abstract:With the coming of Internet of things,embedded technology and network technology already complete fusion.The embedded network module based on MCU and Ethernet can quickly and easily access network thought the existing equipment,and solve the connection problem of embedded devices and Ethernet, so as to realize remote control, remote data communication and other functions.The design includes three parts, which are the hardware design, the driver program of the network card driver and the UIP of the protocol stack.
Keywords:MCU;Ethernet; UIP
基于单片机和以太网的嵌入式联网模块采用串口连接方式,能够实现即插即用,使用方便。本设计采用单片机、网卡控制器等硬件,通过软件编程实现了网卡的驱动和精简的协议栈UIP的嵌入[1]。从而实现了以太网的接入,达到了低成本、高可靠连接网络的目的。本设计包括三部分,具体内容如下。
一、硬件设计
嵌入式联网模块的硬件设计是整个联网模块的基础,主要涉及到单片机和网卡控制器接口设计[2]。硬件采用了8位单片机、以太网控制器芯片Realtek 8139C/D、网络变压器、地址锁存器、外部RAM、串行EEPROM和串口芯片MAX232。硬件设计的电路比较简单,器件价格也较低廉,达到了低成本的目的。具体的硬件设计图如下图1所示。
二、网卡驱动程序设计
网卡驱动程序包括网卡芯片的初始化、报文发送和报文接收三部分[2]。Realtek 8139C/D的初始化主要是上启动芯片后设置相关的寄存器,寄存器主要包括指针位置、地址寄存器、发送寄存器、接收寄存器、数据寄存器和中断屏蔽寄存器等。报文发送包括缓冲区选定、设置报文长度、复制数据和发送报文等步骤。报文接收包括到达判断、数据校验、接收数据和协议解析等步骤。报文发送和接收过程如图2和图3所示。
三、精简协议栈UIP的嵌入
TCP/IP协议的程序流程复杂、容量大、稳定性差,不适合嵌入式系统的开发。因此先将TCP/IP协议进行简化,实现ARP、IP、ICMP和TCP协议的简化。然后将精简协议栈UIP嵌入到单片机中[3],步骤如下。
(1)将UIP协议栈的代码架构文件,保存在默认目录中。(2)网卡驱动程序的初始化、报文发送和报文接收程序的设计。(3)ARP和TCP定时器程序的设计。(4)UIP初始化文件的配置。(5)主程序完成以上程序的调用。
四、结论
基于单片机和以太网的嵌入式联网模块完成了硬件的设计、驱动程序的设计和UIP精简协议栈的嵌入三部分内容,实现了单片机接入以太网,进而实现了远程数据的控制和通信。
该联网模块结构简单、造价低廉、稳定性好、使用方便,具有广泛的应用价值。
参 考 文 献
[1]吴强.基于单片机的以太网嵌入式控制器设计[J].《微计算机信息》, 2008, 24(8): 55-56
驱动精灵2004对于很多用户而言并不陌生,在经历长时间的停止更新之后,对新硬件的支持已经力不从心。最近驱动精灵又推出了新版本的2008,在功能和硬件的支持上都有增加。最新版的驱动精灵2008 Beta3完善了新硬件的数据库支持,还新增了集成主流网卡驱动的功能,在安装完成之后,如果系统的网卡驱动没有加载,会自动安装网卡驱动,并且在线智能检测用户硬件,可自动完成驱动程序的安装。
软件的界面比较简单,主要分为驱动更新、驱动备份、驱动还原和驱动卸载四部分(如图1)。其中驱动更新的部分,可以检测当前选定设备安装的驱动版本和日期,并且可以自动在线搜寻最新的驱动版本(如图2)。如果需要更新到最新版驱动,只需勾选对应的硬件设备,并且点击“开始更新”的按钮,就可以更新了。该选项还支持一次更新多个设备的驱动程序。比较简单方便。
对于硬件设备而言,最新的驱动并非是最适合的,有时候老版本的驱动反而更加稳定高效。由于老版驱动的时间久远,不一定可以很方便地下载到,因此驱动备份有很重要的作用。驱动精灵2008可以方便地备份驱动程序,并且可以随时恢复。驱动备份可选4种格式,包括zip、文件夹、自解压文件和自安装文件。备份的步骤也比较简单,勾选需要备份驱动的硬件设备,选择需要备份的格式以及备份文件的位置和文件名,然后点击“开始备份”按钮,就可以备份驱动了(如图3)。驱动还原的步骤和备份类似,选择备份的文件格式,驱动精灵会自动搜寻备份的文件,选择备份驱动的对应设备,点击“开始还原”按钮,就可以从备份文件还原驱动程序了(如图4)。
对于需要经常更换硬件设备的用户而言,不想重新安装系统,最好是彻底删除此前设备的驱动程序。系统卸载有时不能彻底删除,需要手动删除残留文件,步骤比较繁琐。利用驱动精灵2008则可以简单地卸载硬件的驱动。只需在驱动卸载选项页中勾选对应的设备,点击“卸载所选驱动”按钮,就可以快速地卸载对应的驱动程序(如图5)。另外,在驱动精灵2008的推荐选项页中,还推荐了常用设备如主板、显卡、声卡等硬件的最新稳定版本的驱动下载以及常用硬件工具如硬件检测、调节设置以及性能测试等常用软件(如图6)。
1、安装了不正确的网卡驱动,且网卡包括无线网卡的驱动没有通过WHQL认证也会出现此类情况。
2、或是无线网卡的驱动程序被禁用或者丢失,需要卸载优化软件,建议重新安装一次无线网卡的驱动程序。
3、或是无意中关闭了无线开关导致无法禁用。
(来源:文章屋网 )
关键词:高校;网络故障;分析维护
中图分类号:TP393.06 文献标识码:A文章编号:1007-9599 (2011) 11-0000-01
Enterprise Information Network Fault Analysis and Maintenance Method
Yang Xingmin
(Ningxia International Tendering Co.,Ltd.,Yinchuan750002,China)
Abstract:With the rapid development of computer network technology,enterprise information network failures affect the safe operation of the factors increasing.Enterprise information network fault diagnosis,symptoms should start to network fault diagnostic tool as a means to obtain information to determine the type of failure and exclusion,to ensure network uptime.
Keywords:College;Network failure;Analysis of maintenance
一、引言
伴随计算机网络技术的迅速发展,影响企业信息网络安全运行的因素日益增多。计算机网络可能出现的故障多种多样,解决一个复杂的网络故障需要有广泛的网络知识与丰富的工作经验。诊断企业信息网络故障,应从故障现象出发,以网络诊断工具为手段获取故障信息,确定故障类型并排除,保证网络正常运行。由于出现网络故障的随机性、多样性、不确定性,不同类型故障的排除方法与解决途径也各不相同。
二、企业信息网络故障的诊断与排除方法
在企业信息网络中,线路故障发生的概率是最大的,而人为因素是引起线路故障是主要因素。在检测线路故障时,使用最多的就是ping命令,ping命令不但使用简单,而且可以确定是软件故障还是硬件故障,通过ping命令的数据包传递时间还可以测定网络速度的快慢。如果执行ping不成功,则可推断出网络故障可能为网卡驱动不正常或配置错误、网线不通、IP地址不可用等。如果ping命令执行成功而网络无法使用,则可能为网络属性配置不当、网络系统软件配置不当等等。由于ping采用ICMP实现,部分不支持此协议的服务在此情况下是不能使用的。
(一)本机至交换机、集线器之间的故障诊断与排除
本机至交换机、集线器间网络故障的首要表现就是网络不通,任务栏中的电脑图标有红叉(linux操作系统的网络状态图标位置、颜色与windows操作系统略有差别,但大同小异,如fedora15的网络设置在应用程序搜索栏输入nm即可调出网路设置管理器)。诊断线路故障的第一步即为检查机器物理线路连接是否正常,然后检查数据包传输情况。在检查本机物理连接正常后,用ping命令测试线路远端交换机端口是否正常。具体格式为ping+目的地址,一般首先利用ping命令检测本机网卡工作是否正常,然后再利用ping命令测试网关。
故障分析:
网络连接设备故障一般是由交换机引起的,多为交换机硬件设备损坏或硬件性能不足,此类故障比较容易判断,检查并更换故障点即可。排除步骤为:
1.检查网线是否插好
按照网卡、双绞线、交换机或集线器的顺序依次重新插拔网线后,若网卡、交换机或集线器的相应指示灯仍未显示正常,就应该检查RJ245接头是否顶到顶端,或者是否存在缠绕、断头磨损等情况,如果条件允许,可用测线仪测量双绞线是否完好,如果是双绞线存在故障,可重新压接更换新的水晶头排除。若仍然不通,则可确定为网卡或交换机、集线器端口问题。
2.检查交换机或集线器故障
在单台交换机或集线器上连接的数台主机同时出现网络故障,则可初步判断为交换机或集线器故障。若指示灯闪烁异常,则可能为网络内存在环路,通过插拔各接口的网线找出问题端口,并拔出问题端口网线即可。
3.网卡故障的分析、诊断与排除
网卡故障是产生网络故障的最常见问题,如网卡设置错误、驱动程序错误、I/O端口地址错误等等。在诊断网卡故障时,若怀疑网卡设置存在问题,可通过普通网卡驱动程序附带的测试程序与设置网卡参数程序分别检查网卡设置IRQ,I/O端口地址等参数,若有冲突,只需重新设置重启电脑后即可恢复网络。如果是因网卡驱动程序造成的故障,或者不确定是否因网卡驱动引起的故障,可重新安装一次网卡驱动程序后再进行查找。若网卡设置无错误,则需考虑是否为网卡硬件故障造成的断路。直接判断方法为将一条工作正常的网线连接主机,检查网卡Link灯是否显示正常、Data灯是否闪烁。若指示灯不正常,说明网卡可能损坏。打开主机,检查网卡上是否有元件烧毁、芯片温度是否过高等问题。
(二)病毒故障
随着近年计算机的迅速普及与快速发展,蠕虫病毒与木马病毒随处可见,而病毒传播的迅速性、高传染性、强大的破坏性、隐蔽性,使得服务器一直处于发送被感染主机的邮件工作,而成百上千的垃圾邮件因各种原因而堆在服务器中,占据服务器的网络流量而引起服务器网络堵死。在由病毒故障引起的企业信息网络故障中,ARP木马病毒是引起企业信息网络故障的最常见问题。在整个故障网络中,除被感染ARP木马病毒的主机外,其余主机几乎无法上网。诊断方法为利用ipconfig/all命令查看网络协议与DNS配置,然后ping网关地址,若不通,则可初步确定网络中存在ARP木马病毒。然后使用ARP病毒探测工具检测存在问题的主机,强行断开问题主机的交换机端口,避免更多主机感染病毒,然后对问题主机进行病毒查杀或者重装系统,在确定病毒清除完全后再允许其重新入网。
另外,安装arp防火墙(如彩影ARP防火墙),通过绑定IP/MAC的方式也可以预防或抑制ARP病毒对网络的破坏,但不能根除。如果条件允许,通过绑定主机与交换机物理端口的方法是防止ARP病毒的最好方式。但由于学校网络连入主机的随机性较大,通过绑定IP/MAC的方式仍然是大多数网络管理员采取的方法。
三、结语
因企业信息网络出现故障的随机性、多样性、不确定性,使得网络运行管理与故障诊断工作变得更为复杂化。而企业信息网络的维护工作是一个长期繁琐的过程,这就需要网络管理员在做好企业信息网络运行管理工作的同时,提高网络故障的诊断水平,从网络技术知识理论、网络结构设计、设备连接、系统参数设置、网络运行状况等方面积累日常资料,为出现故障时提供参考,确定正确的处理方法。
参考文献:
关键词:服务器;虚拟化;故障处理方案
中图分类号:TP39305文献标识码:A文章编号:1009-5349(2016)07-0241-01
一、虚拟机故障
(一)虚拟机镜像上传失败
完成好的虚拟机镜像在上传的过程中有可能会出现失败,关于上传失败的日常现象主要归结以下几点:(1)镜像存储空间不足;(2)网络中断;(3)镜像存储断开;(4)上传镜像过程中,刷新浏览器。
上述的服务器虚拟化的虚拟机镜像上传失败,处理方案归结如下:(1)镜像分组下,选择未成功的镜像,右键点击“删除”;修改镜像存储库的位置或调整镜像存储的大小,重新上传。(2)检查并修复网络后,重新上传。(3)检查存储硬件是否完好,并且网络连接通畅,若一切调整好后,可重新上传镜像。(4)重新上传。建议:上传过程中不要刷新浏览器。
(二)虚拟机镜像保存失败
完成好的虚拟机镜像在保存的过程中有可能会出现失败,关于保存失败的日常现象主要归结以下几点:(1)镜像存储空间不足;(2)网络中断;(3)镜像存储断开。(4)镜像库空间不足。
上述的服务器虚拟化的虚拟机镜像保存失败,处理方案归结如下:(1)在服务器“虚拟机”列表,强行关闭“保存为镜像”的虚拟机,镜像分组下删除“正在保存”的镜像,修改镜像存储库的位置或调整镜像存储的大小,重新保存镜像。(2)检查并修复网络后,重新保存镜像。(3)检查存储硬件是否完好,并且网络连接通畅,若一切调整好后,可重新保存镜像。(4)更改镜像库存储,或调整镜像库空间大小。
二、操作系统故障排除
(一)操作系统安装完成,不显示网卡驱动
在虚拟机中安装操作系统完成后却不显示网卡的驱动程序,主要因以下几方面原因:(1)未安装guest-tools;(2)虚拟机选择的网卡类型未按默认安装网卡驱动程序安装。处理方案:(1)安装guest-tools工具;(2)虚拟机控制台,安装网卡驱动。
(二)windows 7 64位虚拟机无法加载软盘驱动程序
在虚拟机中我们安装上windows 7 64位的操作系统后,出现无法加载软盘驱动程序,主要是由于安装的版本为windows 7 64位的操作系统为SP1版本,安装的windows 7 64版本要求高于SP1,否则将会导致该现象的发生。处理方案为:新建一个windows 7 64的操作系统并且版本要高于SP1。
三、存储故障排除
(一)添加NFS存储失败或连接NFS存储断开
添加NFS存储失败或者造成NFS存储连接中断,主要是由以下几方面的原因造成:(1)NFS存储未运行;(2)NFS存储参数给的不正确;(3)搭建NFS存储的服务器或主机硬件损坏。处理方案主要归结如下:(1)使搭建的NFS存储运行起来Linux:输入命令 service nfs start;(2)例如将NFS存储参数给为只读;(3)检查服务器或主机硬件设备,修理好后可继续使用。
(二)添加FC存储失败或连接FC存储断开
添加FC存储失败或者造成FC存储连接中断,主要是由以下几方面的原因造成:(1)连接失败,例如:FC光纤未插上;(2)存储硬件损坏,例如存储控制器损坏;(3)存储设置的容量大小正好等于存储的可用容量。处理方案主要归结如下:(1)检查光纤连接状况;(2)更换存储硬件设备;(3)存储设置的容量小于可用容量。
四、网络问题故障排除
(一)主机无法连接网络
设置的主机无法连接网络主要是由于以下几方面原因造成:(1)安装过程中,两台主机设置相同的主机名;(2)安装过程中,两台主机配置的网卡IP地址相同;(3)安装过成功,将控制网络网卡IP与另一未连接网线的网卡IP配置为同一网段。处理方案主要归结如下:(1)修改其中一台主机的主机名;(2)修改其中一台主机的IP地址;(3)将未连接网线的网卡IP配置为另一网段的IP。
安装完成后,需要自己安装网卡驱动,才能正常上网。
具体的解决办法:
1、点击右键,会出现未安装网络适配器驱动程序的提示。
2、这时候就要打开控制面板,选择进入设备管理器。
3、进入设备管理器后,会发现一个黄色的感叹号。然后鼠标右键点击选择浏览计算机更新驱动程序。
4、然后在整个刚刚安装完系统的C盘里查找,要去掉后面的路径,选择整个C/盘。
5、选择包括子文件夹,然后点击“下一步”。
6、查找到网络适配器的驱动程序之后就会自动安装。
7、此时网络自动连接完毕,就可以正常上网了。
(来源:文章屋网 )
关键词:Linux通信;TCP/IP协议;虚拟技术;性能测试;驱动编程
中图分类号:TP393文献标识码:A文章编号:1009-3044(2009)25-7284-03
Realization of the Virtual Multi- network Card Test Platform under Linux
ZOU Fang-qiang, TAO Jun-cai
(Data Processing Center of Nanchang University, Nanchang 330031, China)
Abstract: Studied the Linux network protocol and the working mechanism of network card, build a Linux-based virtual multi- network card test platform by restructuring system network traffic model and joined many logical network cards in the link level.
Key words: Linux communication; TCP / IP protocol; virtual technology; performance Testing; driver programming
随着虚拟和网络技术的不断发展,虚拟网卡技术被广泛应用。虚拟网卡能够很好地解决报文截获技术中存在的被绕开和软件冲突的问题[1];虚拟机软件中也要使用虚拟网卡技术实现虚拟机内系统和互联网通信;虚拟专用网的实现,通常也是使用虚拟网卡来让同一台主机注册多个子网的IP;软件开发过程中,虚拟网卡也被用做网络数据源,测试软件网络数据处理性能。目前出现的虚拟网卡软件要么灵活性差、使用不方便,要么满足不了数量上的要求,凭借Linux系统优良的网络性能和内核的易扩展性,本文实现一个简洁、易于使用和部署的虚拟多网卡平台。
1 Linux协议分析
Linux提供了对于当前的TCP/IP协议的完整支持,Linux包括了IP防火墙代码、IP防伪、IP服务质量控制及许多安全特性,这些特性使得Linux被广泛应用于网络服务器。开源特性使Linux在网络性能能够始终处在前列,良好的框架和统一的风格,也让他对新的通信协议的支持变得容易。协议结构上,Linux基本采用了TCP/IP的四层逻辑结构,但并没有拘泥于TCP/IP协议,如为了便于体现程序调用逻辑,内核将ICPM、IGMP模块与TCP、UDP放在同一个层次对待。Linux系统在网络方面的优秀表现,也是本文最终在Linux上实现的主要原因,为了后面能清晰地说明问题,下面简要介绍虚拟网卡实现中涉及到的Linux内核网络相关概念。
1.1 协议实现中的关键数据结构
在网络协议的实现中有几个关键的数据结构,它们贯穿了整个协议的实现,其中之一是对接收和发送的报文进行统一管理的缓冲区数据结构――sk_buff。一个个单独的sk_buff被组织成双向链表的形式。sk_buff的强大功能在于它提供了众多指针,可以快速地定位协议头位置;它也同时保留了许多报文信息(如使用的网络设备等),以便协议层根据需要灵活应用。其中:Union h是传输层协议头(tcp);Union nh是网络层协议头(ip);Union mac是链路层协议头。
从应用层到链路层,报文的生成始终离不开sk_buff,对报文的每次封装其实就是在对sk_buff指向的缓冲区的操作,以下简要介绍sk_buff的生命周期,当一个数据包被网卡接收到后,网卡驱动就会申请一个sk_buff结构,然后将数据部分拷贝到sk_buff结构里,并且将与链路层相关的信息设置好,交给网络层处理。网络层、传输层根据sk_buff的信息实现相应协议。一般地,当数据包被传输层的协议接收到后,Socket接口将sk_buff中的数据拷贝到应用层的数据缓存区,这时候sk_buff的生命就结束了,被释放掉。当应用层发送数据时,也是在网络协议族提供的接口函数里,申请一个sk_buff结构,将数据拷贝到这个结构里。当sk_buff结构达到网卡驱动程序时,里面包含足够二层路由信息,数据部分也是一个完整的数据包。
另一个关键数据结构是用来描述逻辑网络设备的net_device,该结构主要描述了以下信息:检索信息,设备的物理信息,接口类型,接口状态,各种对接口进行操作的函数指针,报文输出队列,二层地址信息,比结构层高一次的协议指针。专著[2]中第十四章详细来描述这个结构。通常情况下一个net_device和一个网卡对应,系统中涉及到网卡的操作都通过调用这个结构中的接口进行操作的函数指针进行。
1.2 报文的发送和接收过程
[3]报文在Linux操作系统内核中的接收和发送都是基于sk_buffer数据结构进行的。报文接收过程是:首先网络设备接收到报文,为报文建立sk_buffer数据结构,然后将之放入backlog队列,等待下一步处理。操作系统调度进行底层处理,将sk_buffer数据从backlog队列取出,根据sk_buffer数据结构中协议头(即mac,nh,h)中的协议,调用相应的网络协议层进行进一步处理。一份报文可以被多个网络协议处理。网络协议都有一个初始化入口,每个协议提供自己的处理程序。Linux操作系统维护了两个网络协议表,一个是单向链表,其成员类型为ptype_all,提供给用户,用户可以定义自己对报文进行处理的网络协议;另一个是hash表,其成员类型是ptype_base,包括Linux操作系统中标准的网络协议,如 IP、TCP等。网络各协议屋处理后,将报文提交给Socket队列,等待应用程序的处理。
数据报文的发送过程与之相反,首先应用程序将数据放入Socket队列,然后网络协议层将数据从Socket队列取出,为之建立相应的sk_buffe数据结构,各网络协议层分别填写sk_buffer中各自的协议头,最后将sk_buffer放入发送队列,等待操作系统调度网络设备驱动程序,发送报文。
从函数调用的角度分析,在发送数据时,socket被实现为一个文件系统,这样可以通过vfs的write来调用,也可以直接使用send来调用,它们最终都是调用sock_sendmsg。sock_sendmsg通过它的内核版本――sock_sendmsg直接调用tcp_sendmsg来发送数据。在tcp_sendmsg中,同时完成数据复制和数据校验。Linux使用skb结构来管理数据缓冲。当复制完数据后,使用tcp_push来进行发送。tcp_push通过一tcp_push_pending_frames调用tcp_write_xmit将数据填人top的发送缓冲区。这里的填充仅是指针引用而已。下一步,tcp_transmit_skb将数据放人ip的发送队列。Ip_queue_xmit函数完成IP包头的设置以及数据效验,并调用ip_output进入下一步发送。如果不用分片,将使用ip_finish_output继续发送。在这里,将检查硬件头部描述符(这里就是以太网包头)并填充人数据缓冲区,而后调用dev_queue_xmit函数来进一步处理。Dev_queue_xmit函数将数据排队放人硬件缓冲区以等待随后的发送。而使用具体的网卡驱动动程序cp_start_xmit 来完成数据的最终发送。最后的cp_start_xmit做的事情是检查数据,并将其复制进硬件缓冲。
当接收到一个数据包的时候,网卡会产生中断,这样网卡驱动的cp_interrupt会被调用。cp_interrupt做的事情很少,只进行必要的检查后就返回了,更多的事情通过cp_rx_poll来完成,这是因为linux驱动分为上半部和下半部,下半部的cp_rx_poll函数在软中断中被调用,这样做是为了提高驱动的处理效率。cp_rx_poll做的事情主要就是申请并将数据复制进一个skb缓冲中。netif_rx函数将数据从这个队列中转移至网络核心层队列中,netif_receive_skb从这里接收数据,并调用ip_rcv来处理。Ip_rcv和ip_rcv_finish一起检查数据包,得到包的路由,并调用相应的input函数来完成路由,在这里就是ip_rcv_finish一起检查数据包,得到包的路由,并调用相应的input函数来完成路由,在这里就是ip_local_deliver,ip_local_deliver完成IP包的重组,而后将使用ip_local_deliver_sinish来进入TCP的处理流程,tcp_v4_do_rcv先判断是否正常的用户数据,如果是则用tcp_rcv_cstabUshde处理,否则用tcp_rcv_state_process来更新本条TCP连接的状态机。在top ircv_cstablished中同样实现有首部预测。如果一切顺利,将唤醒等待在top_recvmsg中的用户进程。后者将数据从skb缓冲中复制进用户进程缓冲。
2 结构设计和实现
首先在TCP/IP协议的链路层创建存储在Hash表中多个net_device,然后将它们注册到系统,这些net_device的底层被绑定到实际存在的网卡上,这样报文的最终发送还是通过被绑定的物理网卡,只是在报文的设置和传输途径上用另外的方法来实现。虚拟网卡的通信原理如下,首先将网卡被设定为混杂模式,接收数据时,由于每个net_device有自己的MAC地址和IP,且系统上层要先通过net_device与下层交互,这样系统应用层以为系统中存在多块网卡,而机器间是通过IP来通信的,外面的机器也会认为是在与多个不同的网卡通信。内核加载了虚拟网卡模块后,报文的发送和接收过程将比以前复杂,处理好虚拟网卡报文的发送和接收是会影响到整个系统的性能,也是成败的关键。以下详细说明虚拟网卡报文的发送和接收过程。
2.1 加载虚拟网卡模块前后报文接收过程
首先将虚拟的网卡绑定到一块物理网卡上,我们称被绑定的网卡为“宿主”网卡,虚拟的网卡为从属的网卡。为了使虚拟的网卡正常工作,首先要将宿主网卡设置为混杂模式,使用”ifconfig eth0 promisc”可以达到效果。宿主网卡设置为混杂模式后,就可以接受目的MAC为任何地址的以太报文了。
如图1左半部分所示,宿主网卡接收到一个报文后,按照正常的流程调用netif_rx()函数将报文加入softnet_data[].input_pkt_queue队列。NET类型的软件中断被调度时,通过net_rx_action()函数将报文分发给各个协议模块处理。其中报文分发时有ptype_all、ptype_base两种方式,ptype_all为处理所有类型的报文接口(如AF_PACKET),ptype_base为处理特定类型的报文接口(如ARP、IP等),虚拟网卡通过dev_add_pack()注册一个ptype_all接受任何从宿主网卡发关过来的报文。
所以宿主网卡接受到的报文都会到达虚拟网卡,相等于在一个总线型的网络环境里,每台计算机都收到网络里传递的每个报文。接下来做的事情就是判断哪些报文是“属于虚拟网卡的”,哪些报文不是。
当收到一个报文时,需要断定哪些报文属于哪块虚拟网卡,所以在驱动程序里实现了一个HASH算法。
算法为:Index=Hash(报文的目的MAC)
如果查到的索引为有效值,则将报文skb的dev属性修改为这个虚拟网卡的地址。然后再次调用netif_rx()函数将报文加入softnet_data[]input_pkt_queue队列。
这样做还有一个问题,就是会引起死循环,虚拟网卡自己发送的中断的机制并不会死机,只会降低系统的速度而已。所以在接受函数里,还要判断skb的dev属性不能为虚拟网卡集的地址,如果是就丢弃。为了不影响其它真实的网卡,处理宿主网卡的报文外,其它报文也不与处理。
另外对于广播、多播报文,无需查找虚拟网卡,按个复制、修改skb的dev属性即可。
2.2 加载虚拟网卡模块前后报文发送过程
按照正常的发送流程上层将报文放入output队列,然后数据被拷贝到物理网卡缓存,最终由网卡发送到网络,添加虚拟网卡后,加载模块判断提出来是否来自虚拟网卡,是则将报文skb的dev修改成宿主dev的地址,然后再次dev_queue_xmit将会被宿主网卡发送出去。
3 结束语
本文实现的虚拟网卡能够在Linux操作系统下稳定运行,和物理网卡一样拥有独立的IP和MAC地址,并且能够对常用的网络命令做出正确响应,最多支持1024块虚拟网卡使其能够满足大多数网络测试下的要求,只是随着虚拟网卡数量的增加,为所有网卡分配IP和MAC地址会占用较长的时间。
参考文献:
[1] 李之棠,何桂丽,王美珍.基于虚拟网卡的SSL VPN体系结构的研究[J].计算机应用研究,2007,24(12):327-329.
一台PC组装好,系统也安装完毕,此时的必要工作就是为PC上的各个硬件安装驱动。大到显卡,小到主板上一个极为不起眼的第三方芯片或者机箱上的读卡器,全部需要驱动程序才能正常工作。
大多数设备(例如主板和显卡)的驱动,都是由厂家用驱动光盘的形式提供给用户使用的。但目前很多用户装机时并没有选购光驱,也有一些超极本没有配备光驱,这时如果我们要安装驱动该如何是好?
没光驱也能装电脑
这一问题绝非个案,很多人都面临拿着光盘没光驱的困境。其实解决起来也不难,而且有两种方法供你选择。很多人家里都有带光驱的老电脑,或者有使用光驱的室友,这时只要把主板光盘放进他们的光驱读取,用移动硬盘或U盘将全部内容拷贝下来,然后插在自己的PC上,运行其中的根目录运行文件即可(比如setup.exe或者autorun.exe等),这之后的操作与用光驱操作完全相同。如果不具备这一条件或者主板光盘丢失,还可以从网络上单独下载驱动程序,不过这是建立在网卡能够工作的前提下。下载驱动时要看准设备型号不要张冠李戴,避免不必要的故障。实在拿不准型号,使用类似驱动精灵那样的软件也是可以的。
Windows简版驱动
我们都知道,系统安装完毕Windows会自动为一些设备安装驱动,这些驱动程序集成于操作系统之中,被称为简版驱动,能够提供最为基本的功能。包括我们的显卡、SATA磁盘控制器、声卡和网卡芯片都有可能被安装这种简版驱动。
大多数人接触Windows是从Windows 95和98开始,当时的操作系统集成的简版驱动程序极为有限,绝大多数设备都需要用户自行手动安装。这也形成了在Windows设备管理器中所有设备都没有问号图标(驱动不正常状态)我们就判断所有设备安装妥当的错误观点。其实,有很多被Windows安装好简版驱动的设备,我们仍有必要去手动安装完整版本的驱动程序,以确保其发挥100%的功效。
需重装完整驱动的设备
需要手动安装驱动的设备当中,最为重要的就是显卡的驱动。不论是NVIDIA还是AMD的独立显卡,或者Intel和AMD的核芯显卡或者APU,Windows为其提供的简版驱动性能都极为有限。想让显卡正常工作,必须安装官方提供的驱动程序。推荐大家去厂商相关的官网,通过搜索设备型号(比如GTX 670或者HD 7800系列)来下载官方的驱动程序,不仅更新最为及时,驱动程序也最有保障。
其次就是芯片组的驱动。芯片组的概念略有些模糊,我们购买的配件中并没有叫做芯片组的东西。其实芯片组就是主板上最为重要的主板芯片,它支持所有设备需要的通道和接口,如此重要的设备不推荐大家用简版驱动。可以使用主板光盘中的芯片组驱动,当然也可以去官网下载对应的最新版本。
电脑安装的顺序
绝大多数人的装机方法都是先安装类似芯片组之类的重要驱动,再去安装显卡声卡网卡和诸多第三方芯片驱动,然后再安装自己需要的软件。这个顺序已经约定俗成,似乎只有如此安装系统才能稳定好用。但其实没有什么证据表明一个Windows安装好之后,先装好所有软件再装驱动的电脑会出现问题。现在绝大多数软件都有硬件更新就刷新硬件列表的功能,其实先装驱动还是先装软件可能并没太大不同。不过为了避免潜在的问题,尽可能先装底层的驱动程序后装软件,总没有什么坏处。
笔者习惯的顺序是在安装完操作系统后用主板光盘安装重要的驱动程序,之后进行完整的Windows在线更新,之后再去安装软件, 仅供参考。
存在争议的设备.键鼠
除了必须手动安装的这些驱动,还有很多设备的驱动究竟是使用简版驱动还是另行下载完整版驱动存在一定争议。首先就是键鼠驱动。键鼠在Windows安装完毕后就已经能够使用,而且几乎所有鼠标和键盘的按键都能够正常使用。在这种情况下,我们为什么还需要安装驱动呢?
有些键盘拥有独特的多媒体按键,比如音量调节功能等。使用Windows简版驱动,这些按键有可能正常工作,也有可能完全不工作,这取决于具体每一款产品,不能一概而论,是否安装驱动还要用户自行决定。
而鼠标的情况则完全不同,虽然按键都能使用,但是简版驱动和完整版驱动下的鼠标手感有时会有很大不同。而且目前很多多功能游戏鼠标提供了炫光、变色、自定义按键和宏功能,这些复杂的功能都是由完整版驱动提供的。如果你购买的是极为简单的三键鼠标,没有什么特殊功能就无所谓,如果是多功能游戏鼠标,还是推荐安装厂商提供的完整版驱动。
存在争议的设备.声卡网卡
声卡和网卡,这两件以前我们必须安装驱动的设备,在如今的Windows安装后也都拥有了能使其稳定工作的简版驱动。声卡能正常出声,网卡也能联网,有必要安装完整版驱动吗?
关于这两件设备,我们的推荐是针对自身需要而定。在笔者测试过的绝大多数Realtek集成网卡当中,简版驱动和完整版驱动性能相差无几。而类似Bigfoot Killer这类网卡的情况则不然,由于诸多功能都由软件提供,必须要安装完整版驱动程序。声卡的情况其实与网卡类似,一般的集成声卡使用哪种驱动真的没有太多区别,只不过Realtek的完整版驱动程序提供了一些环绕或混音效果,但大多数用户根本用不到这些功能。而目前越来越火爆的高端板载声卡,还是推荐去安装完整版驱动程序,毕竟那些声卡是主打音质的。
存在争议的设备.SATA控制器
SATA控制器其实就是控制那些SATA接口的,这里特指的是主板芯片提供的原生接口,而并非那些必须要安装驱动的第三方芯片提供的接口。关于性能,简版驱动与完整驱动并没有多大差距,但是如果你想关掉讨厌的SATA硬盘热插拔功能或者用好硬盘节电功能,最好还是去下载对应的快速存储技术等软件。
更换配件后必需的操作
不是所有人都新装电脑,有很多用户只是小幅升级。在更换主板、显卡等设备之后,是需要更换驱动程序的。在升级的情况下,这个驱动问题该如何处理呢?比如只是更换主板的用户,主板更换具体取决于芯片组,相同芯片组的话可直接更换主板而不重装系统,如果芯片组不同则最好重装系统。更换显卡可以换装后再卸载驱动安装新驱动,当然先卸载驱动再换硬件也可以,没有固定的顺序。显卡驱动在侦测不到自家显卡时,大部分内容不会启动。此时卸载老版驱动,安装新驱动并没什么问题。不过有一点要注意,最好不要在NVIDIA驱动还没卸载完的情况下安装AMD显卡驱动,反之亦然。在极个别Windows环境下,同时安装完全不同的两种显卡驱动程序会造成一定程度上的系统紊乱。
解决莫名驱动好帮手.驱动精灵
有时电脑年代久远找不到驱动光盘,而且也不记得电脑上具体的芯片品牌;也有时候就算我们安装了主板光盘中所有的驱动程序依然会有未知设备。这时我们应该怎么办?一个软件解决所有问题,这就是大名鼎鼎的驱动精灵。
下载驱动精灵可以去官网http:///下载,拥有不集成网卡驱动的标准18.5MB版本和集成了万能网卡驱动的扩展190MB两个版本。如果需要安装驱动的PC网卡没有驱动则应该选择后者,否则小巧的标准版即可满足我们的需要。
关键词:嵌入式;Linux;网络设备驱动;DM9000
中图分类号:TP316.89 文献标识码:A文章编号:1009-3044(2009)33-9272-02
Embedded Linux Platform of the Network Device Driver Development
ZHAO Jun
(Suzhou Polytechnic Institute of Agriculture, Suzhou 215008, China)
Abstract: Linux device driver is an important component of the system, it has been established between the hardware and terminals standard interfaces, which greatly simplifies driver development effort. This paper analyzes the embedded Linux system, network communication module under the driver's implementation principle, combined with a specific network card shows the process of its implementation.
Key words: embedded; linux; network device drivers; DM9000
目前,Linux操作系统己经越来越广泛的被应用于嵌入式设备,这主要是由于其具有良好的开放性,并且其上的应用软件的源代码也是完全公开的。Linux的网络设备驱动程序是Linux操作系统内核的一个重要组成部分,并且在嵌入式设备上有着重要的应用。该文重点对Linux网络设备驱动程序进行了分析,并具体通过嵌入式系统下的DM9000以太网口,介绍嵌入式设备上的Linux系统的网络接口驱动的开发过程。
1 运行机理
Liuux网络驱动程序的体系结构如图1所示可以划分为四层,从上到下分别为协议接口层,网络设备接口层,提供实际功能的设备驱动功能层,以及网络设备媒介层。
我们在设计网络驱动程序时,最主要的工作就是完成设备驱动功能层,使其满足我们自己所需的功能。在Linux中对所有网络设备都抽象为一个接口,这个接口提供了对所有网络设备的操作集合,由数据结构struct device来表示网络设备在内核中的运行情况,即网络设备接口,它既包括纯软件网络设备接口,如环路(Loopback),也可以包括硬件网络设备接口,如以太网卡。而由以dev_base为头指针的设备链表来集体管理所有网络设备,该设备链表中的每个元素代表一个网络设备接口。数据结构device中有很多供系统访问和协议层调用的设备方法,包括供设备初始化和往系统注册用的init函数,打开和关闭网络设备的open和stop函数,处理数据包发送的函数hard_start_xmit,以及中断处理函数等。
2 DM9000驱动的实现过程
下面以工作在Linux平台上的嵌入式DM9000网卡驱动程序为例,说明网络设备驱动程序的实现原理。
2.1 设备初始化
网络设备的初始化主要是由device数据结构中的init函数指针所指的初始化函数来完成的,当系统加载网络驱动模块的时候,就会调用初始化过程。首先利用函数request_mem_region映射DM9000的数据、地址端口,通过dmfe_probe函数检测网络物理设备是否存在,检测DM9000内部串行NIC的值是否正确,然后再对设备进行资源配置,构造设备的net_device数据结构。包括一些低层硬件信息:base_addr(网络接口的I/O基地址),I RQ(安排的中断号)等。
2.2 打开设备和关闭设备
open方法在网络设备被激活的时候被调用,具体DM9000的硬件初始化工作放到这里来做。对于DM9000需要完成的初始化包括:对DM9000内部上电,软件复位,通过NCR寄存器设置网络工作模式,可以选择设置内部或者外部PHY、全双工或者半双工模式、使能唤醒事件等网络操作,对RX/TX中断使能,使能数据接收功能。调用request_irq()申请中断号登记中断处理函数,调用netf_carrier_on侦测连接状态。启动定时器,调用netif_start_queue激活设备发送队列。
close所做的工作和open相反,主要释放open获得的资源,以减少系统负担。
2.3 数据包的发送与接收
数据包的发送和接收是实现Linux网络驱动程序中两个最关键的过程,对这两个过程处理的好坏将直接影响到驱动程序的整体运行质量。
图1中很明确地说明了网络数据包的传输过程。首先在网络设备驱动加载时,通过device域中的init函数指针调用网络设备的初始化函数对设备进行初始化,如果操作成功就可以通过device域中的open函数指针调用网络设备的打开函数打开设备,再通过device域中的建立硬件包头函数指针hard header来建立硬件包头信息。最后通过协议接口层函数dev_queue_xmit来调用device域中的hard_start_xmit函数指针来完成数据包的发送。该函数将把存放在套接字缓冲区中的数据发送到物理设备,该缓冲区是由数据结构sk_buff来表示的。
数据包的接收是通过中断机制来完成的,当有数据到达时,就产生中断信号,网络设备驱动功能层就调用中断处理程序,即数据包接收程序来处理数据包的接收,然后网络协议接口层调用netif rx函数把接收到的数据包传输到网络协议的上层进行处理。
2.4 驱动部分的实现过程
如果对网络设备的初始化成功且有数据需要发送,则通过net_device域中的open函数指针调用打开函数打开设备:
int mac_open(struct net device * dev);
再通过协议接口层函数(dev_queue_xmit来调用net_device域中的hard_start_xmit函数指针所指向的发送函数来主动地完成数据包的发送:
int mac_start_xmit(struct sk_buff * skb,struct_net device * dev);
该函数将把存放在socket缓冲区中的数据发送到物理设备,该缓冲区是由数据结构sk_ buff来表示的。
另一方面,数据包的接收是一个被动的过程,所以是通过中断机制来完成的。当有数据到达时,硬件就会产生中断信号,由于此时己经向系统注册好中断处理函数,内核就会切断当前进程的执行,转向相应的中断处理程序,mac_interrupt(),即数据包接收程序来处理数据包的接收。
3 结束语
该文结合DM9000网卡驱动的开发,分析了网络设备驱动程序的运行机理,详细说明了嵌入式网络驱动程序的实现原理和开发流程。该文对于编写网络设备驱动程序起到一个很好的借鉴作用。
参考文献:
[1] DM9000-DS-F03 Data Sheet.Davicom Semicon doctor Inc[S].2004.
[2] 刘淼.嵌入式系统接口设计与Linux驱动程序开发[M].北京:北京航空航天大学出版社,2006.
[3] 黄志武,潘俊杉.基于嵌入式LINUX驱动程序开发的研究[J].电脑与电信,2007(6):66-68.
[4] 王慧娟,刘立媛,袁全波.基于AT91RM9200的嵌入式Linux驱动程序的开发[J].北华航天工业学院学报,2008,18(6):19-21.
[5] 肖杰,李仁发,徐成.基于嵌入式Linux设备驱动程序的开发[J].科学技术与工程,2006(3):28-32.
[6] 彭朝勇,薛兵.一种嵌入式Linux串口驱动开发模式[J].微计算机信息,2007(14):16-17.
无法记忆密码
Q我使用的是Windows 7系统,最近系统总是无法记忆密码。例如每次打开服务器\\192.168.0.4,都需要输入用户名和密码,很是麻烦,于是我勾选“记住密码”项,但重启电脑后,却依旧要重新输入密码。请问有办法解决吗?
A可试试以下的方法。按Win+R键打开运行对话框,输入执行命令control keymgr.dll调出凭据管理器,选择删除掉原有不正常的记忆信息,然后再手工添加即可。如果没有“添加Windows凭据”按钮,可打开“控制面板管理工具本地安全策略”,在“本地策略安全选项”里修改“网络访问:不允许为网络身份验证储存凭据或.NET Passports”,将其设置为“已禁用”即可。
傻博士有话说
系统记忆用户的账号信息除了受安全策略设置影响外,如果安装了还原卡,也会无法保存记忆。而在浏览器中,还受浏览器的参数设置影响,例如在IE浏览器中,如果设置成退出时删除保存的密码信息,也会出现无法保存的情况,需要根据具体的现象来找解决方法。如果平时使用的各类登录信息比较多,建议使用专用的密码管理工具,例如KeyPass,统一管理各种登录账号及密码信息,这样可以使效率得到提高。
电脑经常自动开机
Q一台使用了五年的老电脑,安装的是Windows XP SP3,在使用过程中发现,它经常会在接上电源后自动开机,但偶尔也会正常,不自动开机。请问这是什么原因?
A这一般与BIOS设置有关,例如设置成上次启动失败后自动开机就会出现这样的现象。只要在BIOS中修改一下参数即可。打开BIOS设置界面后,找到电源管理项并进入,找到Pwron After PW-Fail项,将其值由默认值On修改为Off即可。当然,这只是可能的一种原因,并且也只是权宜之计,建议找专业的朋友帮你彻底检查一下老脑。
本地连接、网上邻居均丢失
Q我使用的是Windows XP SP3系统,不知道什么原因导致本地连接、网上邻居均消失了,因特网和局域网无法使用。请问这是什么原因?
A如果本地连接消失,首先考虑的是网卡是否丢失(驱动程序丢失)。打开设备管理器,检查列表中是否有网卡,如果没有网卡,则说明网卡硬件本身有问题,建议打开机箱检查网卡是否插好。如果是板载网卡,有可能是设备损坏。如果设备列表中有网卡,则可能是网卡驱动程序丢失,只要重新安装网卡驱动程序即可解决问题。
系统无声音
Q安装Windows 8系统后,音频喇叭呈红叉号,显示一个或多个音频服务未启动,系统无声音。请问这该如何解决?
A先检查声卡驱动程序是否正确安装,如果驱动程序安装无误,再尝试下面的方法。
按Win+R键打开运行对话框,输入执行regedit命令调出注册表编辑器,搜索Audiosrv(全字匹配搜索),找到后双击右侧的RequiredPrivileges项,将打开窗口中的数值项后两项删除,只保留SeChangeNotifyPrivilege。
重新启动一次系统,然后再调出运行对话框,输入执行services.msc命令打开服务管理器,找到Windows Audio服务项,单击“登录”标签,选择“此账户”项,再点击“浏览”按钮,在打开的窗口中查找并选择“LOCAL SERVICE账户”,之后将下面的密码清空,保存设置即可。
无法安装专业版Acrobat
Q卸载老版本后,我准备安装新的专业版Acrobat,却被提示“Error 2753”错误,请问这该如何解决?
A这可能是由于老版本的程序未卸载干净,注册表中残留相关信息所致,可试试微软的Windows Installer清理实用工具(下载地址:),将旧版Acrobat的残留信息清除干净,然后再重装即可。注意,这个清理工具主要是用来清理Office安装问题的,但有时它会损坏计算机上安装的其他组件,因此已从微软下载中心删除了,使用前要慎重,并做好相应的备份工作。
虚拟机
无法上网
Q之前直接在路由器中进行拨号,虚拟机可以正常上网,而现在改成在系统中拨号,虚拟机的参数未动,但就是无法上网了,总是显示DNS服务器的问题。请问如何让虚拟机正常上网?
A这可能是由于你设置的拨号连接没有开启共享所致。只要右击拨号连接,选择“属性”,在“共享”选项卡中选择“允许其他网络用户通过此计算机的Internet连接来连接”项,然后将虚拟机的本地连接属性参数设置成自动获取IP地址、DNS服务器即可。
傻博士有话说
虚拟机上网,在设置成NAT共享模式后,虚拟机其实就相当于双机连接的小型局域网,它是共享主机上网连接来进行上网的,如果直接在路由器中完成拨号,这种情况下,只要将主机与虚拟机的IP地址设置在同一个网段中,它们就相当于由路由器连接而成的局域网,直接上网。而若主机进行拨号连接,虚拟机则成了共享上网的另一台“电脑”,因此需要共享主机的共享连接才能进行上网。
Chrome无法安装插件
Q我安装的是谷歌浏览器(Chrome),从应用商店下载的CRX插件可以正常安装,而自己的CRX插件总是无法安装。请问这该怎么办?
A在谷歌浏览器中单击“自定义并控制Google Chrome浏览器工具扩展程序”,打开Chrome的扩展程序设置页面,然后直接将CRX插件程序用鼠标拖放到其中即可正常安装了。
笔记本无法上网
防止网络监控步骤:
1、在网络连接中,使用静态IP和动态IP两种方式,如果使用静态IP地址,出现网络监控提示,是电脑IP地址被占用;
2、在IP冲突的时候,打开网络和共享中心,本地连接修改IP地址即可;
3、如果使用动态IP接入互联网出现网络监控,是第三方软件篡改电脑DNS数据,重新设置自动获取IP和DNS即可;
4、如果在网络环境下,其他人使用正常,而本机电脑网络连接显示为网络监控,并且IP、DNS显示正常,计算机的网卡驱动程序出现异常,下载并重新安
(来源:文章屋网 )