网卡驱动程序范例6篇

网卡驱动程序

网卡驱动程序范文1

前言

windows nt是一个功能全面的操作系统,具有完全集成式的连网能力,它的网络模型开始于mac子层,网络接口卡(network interface card以后简称网卡或nic)驱动程序驻留在其中。通过相关的网卡把windows nt与网络连接起来,但一直到80年代后期,许多传输协议的实现受限于mac层接口的独特实现,因为mac层定义了协议与网卡之间的转换机制。

1989年,microsoft和3com两公司提出了一个定义mac层与osi模型高层协议驱动程序之间的网络设备接口规范(network device interface specification : ndis),ndis给数据交换提出了一个灵活的环境,它规范了软件接口──称为ndis接口,传输协议可用它与网卡驱动程序进行通信。因此在windows nt环境下开发核心态网卡驱动程序应遵循ndis规范。

对于高速网络fddi(fiber distributed data interface)网卡驱动程序还需要smt(station management)站管理功能的实现,否则将不能作为一个fddi站连入环结构中,只能实现点到点间的数据通信。故有必要将smt软件移植到网卡驱动程序中,这将又导致对miniport nic驱动程序编程框架的破坏,于是有必要形成fddi网卡驱动程序(包含smt)与windows nt操作系统的良好接口──由逻辑网卡的注册和mac层驱动程序的初始化来完成。

所以,本课题旨在深入研究应用microsoft公司的ddk(device driver kit)将smt移植于windows nt的fddi网卡驱动程序过程中如何注册miniport nic驱动程序。即怎样正确注册逻辑网卡和mac驱动程序的初始化。着重讨论与初始化相关的上边缘函数的使用和调用关系以及初始化过程中遇到的各种问题的具体解决。

第一章windows nt环境下fddi网卡驱动程序

总体结构介绍

第一节windows nt网络结构

§1.1.1 windows nt网络体系结构

windows nt的网络体系结构是基于国际标准化(iso)制定的标准模型──开放式系统互连(open system interconnection:osi)参考模型分层建立的,这种方式有利于随时扩展其它功能和服务。

windows nt网络模型开始于mac子层,网卡驱动程序就驻留在其中。它通过相关的网卡把windows nt与网络连接起来,图中的多个网卡表明在一台运行windows nt的计算机上能使用多种网卡。

这一网络体系结构包括两个重要接口──ndis接口与传输驱动

程序接口(tdi)。这两个接口把两个层隔离开来,办法是相邻的部件只允许按单一的标准来写,不允许多重标准。例如一个网卡驱动程序(在ndis接口的下面)就不需要特地按每个传输协议来写它的代码块,恰恰相反,该驱动程序是写给ndis接口的,它通过符合ndis的相应传输协议来请求服务。这些接口包含在windows nt的网络体系结构中,以容纳可移植、可互换的模块。

在两个接口之间,是传输协议。它在网络中起着组织者的作用。一个传输协议规定了数据以何种方式呈递给下一个接收层,以及如何对数据相应地进行打包。它通过ndis把数据传给网卡驱动程序,并通过tdi把数据传给转发程序(redirector)

tdi之上是转发程序,它把本地的网络资源申请转送给网络。

为了能和其他厂商的网络互连,windows nt允许有多个转发程序。对于每一个转发程序windows nt计算机必须也有一个相应的供应者(provider)(由网络厂商提供)。多供应者路由选择程序决定适当的供应者,然后借助于供应者,对应用请求到相应的转发程序做出选择。

§1.1.2 windows nt网络驱动程序

windows nt支持两种类型的网络驱动程序

传输驱动程序

实现数据链路层中的逻辑链路控制子层协议和传输层协议。向 下与ndis接口,向上与tdi接口。

网卡驱动程序

实现对物理层的管理和数据链路层中介质访问控制子层协议,通过ndis向下管理物理网卡,向上与传输驱动程序通信。

§1.1.3 windows nt网卡驱动程序

windows nt环境下的网卡驱动程序也分为两种:

miniport网卡驱动程序:miniport驱动程序只须实现与网络硬件相关的操作(包括发送和接收)。而所有底层网卡驱动程序的通用操作(如同步),一般由ndis接口程序来实现。

full网卡驱动程序:full网卡驱动程序必须实现所有硬件相关和同步、排队等操作。例如full网卡驱动程序为了响应数据接收,需要保持本身的捆绑信息,而miniport就可以由ndis接口库来实现。

在windows nt的早期版本中,full网卡驱动程序要求开发者实现许多底层操作,来处理多处理器的核心问题以及处理器、线程的同步,这样不同的开发者在大量重复着许多相同的工作。

而miniport网卡驱动程序允许开发者仅仅写一些与网络硬件相关的代码即可,而那些通用的函数由ndis接口库来实现,这样开发出来的驱动程序减少了不必要的工作。

第二节miniport驱动程序的结构

ndis接口规范了网卡驱动程序的实现,同时也对tdi驱动程序的实现提出了一定的要求,在nt中,ndis约束下的网卡驱动程序、tdi驱动程序和系统的关系如下图所示:

图2.0 ndis约束下的网卡驱动程序、tdi驱动程序和系统的关系

miniport驱动程序包括驱动程序对象、驱动程序源代码和ndis接口库代码。windows nt ddk提供ndis.h作为miniport驱动程序的主要头文件,定义了miniport驱动程序的入口点、ndis接口库函数和通用数据结构。

上边缘函数的作用是网卡驱动与ndis接口库进行通信,而下边缘函数是tdi协议驱动程序与ndis通信的手段。

§1.2.1 miniport网卡对象

ndis用一个叫做逻辑网卡的软件对象来描述系统中的每块网卡,而逻辑网卡与windows nt设备对象的通信由i/o子系统来管理,描述网卡的设备对象包括相关的网络信息如名字、网络地址和网卡内存基地址等,它还包含与硬件相关的驱动程序状态数据(捆绑数目,捆绑句柄,包过滤数据库等)。ndis分配一个句柄到miniportinitialize这个上边缘函数的一个结构中,然后miniport网卡驱动程序将在以后提供这个句柄来给ndis调用,这个结构一直被ndis保持,并且对miniport驱动程序不透明。

当miniport网卡驱动程序初始化一块网卡时,它创立自己的内部数据结构来描述网卡,记录需要它管理的与设备相关的状态信息。当miniport网卡驱动程序调用ndismsetatttibutes或ndismsetattributesex两ndis库函数时,它传递一个句柄给这数据结构。这样,当调用miniport驱动程序入口点时,它就传递这个句柄来验证驱动程序所对应的网卡的正确性。这个数据结构为miniport网卡驱动程序所拥有并维护。

§1.2.2网络对象标识符

miniport nic驱动程序还需要维护一组对象,这些对象是系统定义的对象标识符(object idetifier:oid)来标识,以描述驱动程序的性能和当前状态信息。为查询这些信息,上层驱动程序调用ndisrequest向ndis接口库指示oid。oid表示了调用所需的信息类型,如miniport驱动程序所支持的lookahead缓冲区大小等。ndis接到上层驱动程序的查询请求,将oid传递给上边缘函数miniportqueryinformation实现对oid的查询,如果上层驱动程序请求改变状态信息则调用miniportsetinformation实现对oid的设置。

§1.2.3 miniport网卡驱动程序代码

典型的miniport nic驱动程序必须有一些函数来通过ndis接口实现上层驱动程序与硬件的通信。这些函数称为上边缘服务函数。

这些上边缘服务函数由驱动程序的开发者根据驱动程序面向的特定低层网络类型和硬件以及相应环境,可以有选择地实现,但必须保证驱动程序最基本的功能,这些基本功能包括初始化、发送、中断处理、重置、参数查询与设置和报文接收。

miniportinitialize:操作系统根据系统配置信息,检测出网卡已安装时,由ndis接口在初始化时调用,主要完成低层网络类型确定,对应于物理网卡的逻辑网卡初始化,中断信息注册,网卡与主机通讯方式的确认。i/o端口的申请与注册,内存映像,mib的初始化,物理网卡的验证与初始化等。

miniportreconfigure:支持网卡参数动态变化,和miniportinitilize一样由ndis接口以初始化级别调度执行(不能屏蔽中断,必须由驱动程序承认并清除在此期间产生的中断),支持即插即用和软配置的网卡在动态改变参数时,必须提供此函数。

miniportqueryinformation:查询网卡的状态以及网卡驱动程序的操作或统计参数,如是否支持组通讯、网卡的物理速率是否支持回环、是否支持直接拷贝等,这些参数以oid方式统一管理。

miniportsetinformation:ndis接口或协议驱动程序通过调用此接口改变驱动程序维护的oid库,一些操作参数的改变也将同时改变驱动程序状态,例如组地址的设置。

miniportreset:包括网卡硬件重置和驱动程序软件重置,软件重置包括驱动程序状态重置,以及一些相关的参数重置,还需考虑有些参数的恢复,重置时不必完成所有正在活跃的外部请求,但必须释放已占用的外部资源。

miniporthalt:挂起网卡并释放该网卡驱动程序占用的所有资源,在此期间不屏蔽中断。

miniportisr:高优先级的中断处理程序,进行的工作包括初始中断处理类型,决定是否进行中断转交,对卡上中断进行处理 等,该服务类型只在以下情况被调用:

ndis接口调用miniportinitialize和miniporthalt两函数时。

.中断处理类型设为每此中断处理过程都调用时。

为使系统能及时响应所有硬件中断,高优先级的硬件中断处理程序应尽可能的减少运行时间,防止长时间的屏蔽低优先级中断,避免造程中断丢失。

miniporthandleinterrupt:由中断延时处理程序在中断延时处理时进行调用。ndis排队所有的延时处理,该服务主要处理发送完成、报文接收、描述符用尽、溢出、网卡异常等中断。

miniportsend:ndis收到上层发送请求时经过若干协议处理再向下调用此服务过程,发送的packet已含有llc和mac头,该服务过程进行边界对齐、packet约束重整、描述符映射和报文发送、以及发送资源和packet缓冲队列管理。

miniporttransferdata:多个已和网卡捆绑的协议驱动程序在接收到报文到达指示后,向网卡驱动程序发出传送请求以拷贝各自所需的报文数据部分,网卡驱动程序根据各协议驱动程序对单个packet是否进行多次拷贝,以决定是否暂存只允许单次拷贝的packet等。

miniportcheckhandle:ndis每秒调用此服务函数一次,驱动程序发现网卡异常时报告给ndis由ndis调用miniportreset进行硬件重恢复。

miniportenableintrrupt:中断使能。

miniportdisableinterrupt:中断屏蔽。

另外,每个网卡驱动程序必须有一个初始化入口点,由driver entry函数实现,它和系统相关,由操作系统在装入驱动程序时调用,主要完成初始化ndis wrapper,再由wrapper初始生成驱动程序管理块并完成相应各种初始化工作,登录网卡驱动程序所有上边缘服务入口点,同时写入ndis版本信息。

§1.2.4 ndis接口库

ndis接口库包括在ndis.sys中,它是一个核态函数库,有一套抽象的函数,无论协议驱动程序还是nic驱动程序都连接到这个库中,以实现上下层之间的操作。

第二章fddi网卡驱动程序的加载和运行

第一节 网卡驱动程序的安装

windows nt网卡驱动程序安装的目的是实现网卡相应硬件信息和驱动程序在windows nt注册库中的注册,使windows nt能够正确识别网卡,了解所必需的软硬件信息并能在windows nt启动时加载相应驱动程序。

网卡驱动程序安装时,首先在主群组的控制面板中选择“网络”,然后添加网卡,指定相应信息文件──oemsetup.inf的路径,以完成以下两个必要的操作:

复制驱动程序到相应的系统目录(windows nt根目录\system32\drivers\)中;

在windows nt注册库中存入相应软硬件信息。

下面主要以fddi网卡为例介绍安装驱动程序所必需的工作:

§2.1.1网卡一般硬件参数

对于fddi网卡,必须在编写其oemsetup.inf文件时确定以下硬件参数:

总线类型:pci(5)……括号中的数字5表示pci总线在ndis中的总线类型代码;

厂商代号:0x5588……系统加载时确定网卡的标记,也是编程时确定pci槽号的标识;

cfid: 0x01;

介质类型:光纤(3) ……括号中的数字表示光纤在ndis中的介质类型代码;

是否支持全双工:支持。

对于其它的硬件信息在此inf配置信息文件中可有可无,如若配置,则可在驱动程序的编写时利用这些信息,方便编程,同时有利于其它应用对其参数的确定和使用。

§2.1.2 fddi网卡加载时需在注册库登录表里做的网络配置

网卡驱动程序的安装通常将创建登录表中的四个不同子键:

software registrion键,对应于驱动程序,存在于hkey_local_machine\software\company\ productname\version中。我们的fddi网卡驱动程序所对应的是hkey_local_machine\software\net612\yhfddi\yhfddi1.0;

网卡的软件登录键,存在于hkey_local_machine\software\microsoft\ windows nt\nt3.51\networkcards\yhfddi1;

驱动程序的服务登录键,存在于hkey_local_machine\system\currentcontrolset\services

网卡的服务登录键,存在于hkey_local_machine\system\currentcontrolset\services

对于每一个网络部件,一个名为netrules的特殊子键在邻近的驱动程序或网卡登录子键里创建,netrules标识网络部件为网络整体的一部分。

fddi网卡驱动程序对应的标准软件登录表项将出现在以下路径:

hkey_local_machine\software\net612\yhfddi\yhfddi1.0;

驱动程序对应的标准项的值为:

description =yhfddi/pci adapter controller

install date =……

……

refcount =0x01

servicename =yhfddi

softwaretype =driver

title =yhfddi/pci adapter controller

而且在yhfddi驱动程序相关的netrules子键下,这些值项为:

bindable =yhfddi driver yhfddi adapter non exclusiver

bindform =“yhfddisys”yes no container

class = reg_multi_sz “yhfddi driver basic”

infname =oemnad1.inf

type =yhfddisys ndisdriver yhfddidriver

use =driver

yhfddi网卡在如下路径的networkcards子键里介绍:

hkey_local_machine\software\microsoft\

windows nt\nt3.51\networkcards\yhfddi1;

网卡的标准项包括以下这些值:

description =yhfddi/pci adapter controller

install date =……

manufacturer =net612

productname =yhfddi

servicename =yhfddi01

title =[01]yhfddi/pci adapter controller

§2.1.3编写inf信息配置文件

gui inf描述语言被windows nt用以书写系统所有部件的配置文件,当然也可以用以书写网络系统各部件的配置文件,该配置文件描述了网络部件安装、配置、删除的执行过程。当网络部件进行初始安装或二次安装(通常通过ncpa进行)时,安装程序读取部件对应的配置文件,进行解释执行。gui inf描述语言由节、命令、逻辑操作、变量规范、流程控制以及一套调用dll或外部程序的机制组成,其中,节是配置文件的主体,节可分为install节(类似于函数),shell节(也类似于函数,但可调用insall和shell节),detect节(不包含命令),一个配置文件一般由若干不同类型的节组成。驱动程序的开发者根据需要可以在配置文件中编写相应代码,使得用户和系统之间能进行交互,并且由用户决定一些配置参数。

nt网卡配置文件有其一套规范,驱动程序开发者必须按规范编写配置文件,一般来说,一个配置文件至少应该提供下面三个节:

安装入口点:[identify]shell节。该节主要功能是给出安装部件的类型名,系统通过它识别该部件属于哪一大类(display,mouse,scsi,network等)中的哪一类(网络adapter,driver,transport,service,network和netprovidor),同时,还需要给出映像文件和配置文件所在的源介质及标识。

[returnoption]shell节。系统执行安装identify节后,执行该节。它主要功能是检查所需安装的部件是否支持的硬件平台和语言,并给出网卡名(有些配置文件支持多类网卡,此时必须让用户进行选择,并获得选择结果)。

[installoption]shell节。该节是配置文件得主体,也是上次安装完后再次进行配置、删除、更新的入口点。主要功能是拷贝映像文件和配置文件,生成配置的各种选项,创建该部件在注册库中对应的各种登录子树并更新重写。

第二节 驱动程序的加载过程

§2.2.1 windows nt的启动过程

第一阶段:调入装入程序。和硬件平台相关,x86机器首先由rom装入根扇区,再由根扇区装入ntldr;

第二阶段:硬件检测。x86机器调ntdetect程序最大限度地获取各种硬件设备信息,引导hal及基本卷设备驱动程序,以便引导nt内核;

第三阶段:获取注册库中各种控制信息,如用户定义的非页内存大小;第四阶段:初始化注册库 \registry\machine下system和hardware并创建currentcontrolset,为装入相关硬件设备驱动程序作准备;

第五阶段:装入基本核心驱动程序;

第六阶段:释放一些已经完成使命的装入初始数据块;

第七阶段:进一步初始化注册库,以便有些依赖于基本核心驱动程序的上层驱动程序能顺利装入;

第八阶段:服务控制器装入应该由该服务控制器装入的各种驱动程序。

§2.2.2 fddi网卡驱动程序的加载过程

在windows nt启动的第五个阶段,将加载核心驱动程序。而对于ndis网卡驱动程序是在ndis接口(ndis.sys)加载后调入运行,向ndis wrapper注册、初始化、查询设置参数等。

windows nt启动时,相应的实体如nt的服务控制器根据注册库中yhfddi驱动程序的配置注册信息,初始化ndis wrapper,并装入相应的驱动程序,生成驱动程序管理块结构,申请内存以保存各种信息,向ndis wrapper注册驱动程序。初始化和注册完毕后,再由服务控制器读取注册库中相应的链接信息。

在ndis wrapper和yhfddi驱动程序初始化和注册成功后,ndis wrapper根据系统相应的注册信息,加入和yhfddi驱动程序所对应的fddi网卡,同时读入网卡的注册信息,并进行网卡注册和网卡初始化。

在以上过程成功后,wrapper将查询和设置驱动程序的各种参数,了解驱动程序对哪些操作支持,决定对上层驱动程序的支持范围。

第三节fddi网卡驱动程序的注册

driverentry函数是windows nt ddk规定的核心驱动程序的入口点,wrapper识别到入口点后,调入驱动程序,在driverentry函数内完成两个基本注册任务:

调用ndisminitializewapper函数向ndis接口报告驱动程序将以miniport类网卡驱动程序注册。ndis建立它需要记录的驱动程序状态信息,同时返回ndiswrapperhandle,驱动程序保存这个句柄,以利后来调用ndisxxxconfiguration和initialization等函数。

填写ndisxx_miniport_characteristics属性结构,主要记录ndis版本号和驱动程序支持的miniportxxx函数的入口点,然后调用ndismregisterminiport函数实现驱动程序的整体注册。

以yhfddi为例所要注册的属性结构的内容大致如下:

ndis_miniport_characteristics yhfddichar;

(ndis_miniport_characteristics这个结构将在第三章介绍)

yhfddichar.majorndisversion=yhfddi_ndis_major_version;

yhfddichar.minorndisversion=yhfddi_ndis_minor_version;

这两个属性决定驱动程序是ndis的哪个版本所支持,我们所用的是ndis3.0

yhfddichar.disableinterrupthandler=yhfddidisableinterrupt;

yhfddichar.enableinterrupthandler=yhfddienableinterrupt;

yhfddichar.isrhandle=yhfddiinterruptservice;

yhfddichar.handleinterrupthandler=yhfddihandleinterrupt;

以上四项属性是中断处理所需的上边缘服务函数的入口点(句柄)。fddi网卡驱动程序需要有smt站管理功能,而smt是以中断处理方式进行的,故这四项属性在fddi网卡驱动程序中是很重要的。

yhfddichar.initializehandler=yhfddiinitialize;

此项注册的是驱动程序的初始化函数句柄。

yhfddichar.queryinformationhandler= yhfddiqueryinformation;

yhfddichar.setinformationhandler=yhfddisetinformation;

这两项注册的是参数查询和设置函数的句柄。

yhfddichar.sendhanler= yhfddisend;

yhfddichar.transferdatahandler= yhfdditransferdata;

主要提供数据发送和接收函数句柄。

yhfddichar.resethandler=yhfddireset;

此项注册网卡软硬件重置函数句柄。

yhfddichar.halthandler= yhfddihalt;

此项注册网卡驱动程序挂起函数句柄。

yhfddichar.checkforhandler=null;

yhfddichar.reconfigurehandler=null;

这两个上边缘服务函数是fddi网卡驱动程序所不提供的,故置为null。

填好这些结构以后,调用以下函数实现驱动程序的注册:

ndismregisterminiport(

yhfddiwrapperhandle,

&yhfddichar,

sizeof(yhfddichar));

其中yhfddiwrapperhandle是在此之前初始化wrapper调用ndisminitializewrapper所得的句柄。

如果调用ndismregisterminiport不能返回ndis_status_success,必须在退出driverentry之前释放已经分配的资源(如yhfddiwrapperhandle等),故调用

ndisterminatewrapper(yhfddiwrapperhandle,null)。

这样驱动程序没能正确注册,亦不能正常运行。

第四节 网卡驱动程序对象查询与设置

如果ndis的管理实体要查询或设置一个特定的网络对象,它必须提供一个32位的oid。oid的结构如下: 图2.3.0 oid结构图

由上可以看到,oid可分为三大类:

所有ndis驱动程序都有的一般对象;

特定介质的对象;

特殊的与具体实现相关的对象(如多目地址表的长度)。

一般的和特定介质的oid被记录在windows nt ddk中,对于这些oid ddk文本指明了相关的对象能否通过miniportqueryinformation查询参数和通过miniportsetinformation设置参数。

oid也可被分为操作特性(如多目地址表长度参数)和统计参数(如广播包接收)。最后oid可分为必须的和可选的两种。

oid的前三个字节表明oid的不同类别,而最后一个字节确定这一类别内特定的信息管理对象。

针对于fddi网卡,被查询的oid的第一个字节为0x03。而ndis所查询的介质相关参数为:

0x03010104 oid_fddi_long_max_list_size

0x03010108 oid_fddi_short_max_list_size

0x03010102 oid_fddi_long_current_addr

0x03010106 oid_fddi_short_current_addr

tcp/ip传输驱动程序所要查询的fddi oid为:

0x03010102 oid_fddi_long_current_addr

0x03010103 oid_fddi_long_multicast_list

0x03010107 oid_fddi_short_multicast_list

通过以上两阶段的查询,ndis和tcp/ip驱动程序就分别了解了网卡驱动程序对其的支持,从而进行相应的捆绑,以便数据传输时正确选择网卡驱动程序。

第五节 开发环境与调试方法

开发环境:

fddi网卡驱动程序的开发环境为nt server 3.51,sdk,ddk for workstation 3.51, vc++4.1,硬件平台为586。

调试平台:

主机为nt server 3.51,windbg32

目标机为nt workstation3.51 (check 944)

调试方法:

利用dbgprint把目标机上关键信息通过串口传到主机进行分析,以得出ndis驱动程序的调度机制和运转状况;

利用assert产生异常断点,由主机对异常进行控制

自定义宏,进行分级控制,以根据不同情况产生不同调试信息

第四章 与smt移植相关的问题讨论

在本yhfddi网卡驱动程序中,smt的移植是极其关键的一部分,主要承担了驱动程序中硬件初始化和中断延迟处理。但由于smt是相对独立的软件,这样就有一个ndis wrapper与smt间参数传递的问题。所以本章主要讨论miniport驱动程序与smt的关系和移植smt过程中初始化的要求、中断处理的要求,ndis wrapper与smt如何传递参数。

(一)miniport fddi网卡驱动程序与smt的关系。

在第一章已经谈及网卡驱动程序主要实现osi参考模型中的物理层和mac层。而对于fddi网络的物理层又可分为介质相关子层和介质无关子层。

对于我们的fddi/pci是基于x.3.19、x3.148、x3.166和x3.229而实现的。

smt在整个iso七层模型中属低两层范畴。下图是iso模型与fddi层次的对应关系,从而可知fddi miniport驱动程序在nt网络结构中的位置。

即在windows nt fddi网卡驱动程序应包含smt,实现fddi拓扑环上的站管理。

而在驱动程序内部smt主要是在miniport驱动程序中的中断延迟处理上边缘服务中实现的,也可以说是将smt嵌入中断延迟处理程序中,实现ndis接口对smt的正确调度。

yh-fddi驱动程序的实现可分为硬件无关部分和硬件相关部分。

移植smt过程中初始化的要求.

这里的初始化主要是指硬件初始化,包括寄存器的初始化和数据结构的初始化,由smt共用的硬件相关例程库中硬件初始化部分来完成. 我们在开发过程序是调用fddi_main(bdd_t*bdd)这个函数来调用smt共用的硬件相关例程库的.可见使用fddi_main(bdd_t*bdd)时,需要传递bdd这个参量,而bdd_t这个数据结构的定义如下:

它包含了各类硬件寄存器的基址,所以要对其进行正确赋值就必须首先在nt的内存中映射一块虚存与网卡内存相对应,也就实现了bdd_t结构的赋值,对fddi_main(bdd_t *bdd)的正确调用.

因此,我们在调用fddi_main前首先将网卡上寄存器内存空间映射到nt的虚存空间上,并将bdd结构正确赋值.以映射bsi_phy_base为例,具体过程如下:

pchar destination;

bdd_t *bdd;

ndis_physical_address physicaladdress;

ulong baseaddress;

ndis_status status;

baseadress =0x0d0000+bsi_phy_base;

ndissetphysicaladdresshigh(physicaladdress,0);

ndissetphysicaladdresslow(physicaladdress,baseaddress);

status=ndismmapiospace(

(pvoid *)&destination,

miniportadapterhandle,

physicaladdress,

bsi_phy_len

);

bdd->bsi_vir_base=(pchar) destination;

adapter-> bdd->bsi_vir_base= bsi_vir_base;

/*对adapter结构中的bdd结构赋值,以便在其它上边缘函数中使用这些虚存基地址*/

中断处理要求.

对于中断处理,在smt中主要调用cspintrhandandler()来实现.我们的fddi网卡驱动程序是miniport方式的,若在isr中做此处理将占用大量系统资源,使系统崩溃,所以我们采用只在isr中进行中断的排队,而在dpc中调用cspintrhandler()来完成中断处理.

在中断处理方面还有一个中断屏蔽和中断使能的问题,这两方面smt并不提供,故我们要正确处理.

具体处理方法见第三章.

ndis wrapper与smt间参数如何传递.

miniport方式的网卡驱动程序中,网卡上有中断时,系统反映给ndiswrapper,再由wrapper调度中断处理上边缘服务实现中断处理,在我们的yhfddi网卡驱动程序的中断具体处理是smt完成的所以在调用cspintrhandler时应将adapter结构传进smt以便在以后应用.

如在处理接收中断时,处理的最后应调用ndisindicatefddireceive,向ndiswrapper指示以接收到一个数据包,而ndisindicaterfddireceive的调用需要adapterminiporthandle作为参数,这就必须一级级从中断延迟处理函数(yhfddi handleinterrupt)中将adapter结构传递下来. 当然,其它方面如发送,也会有类似的问题需要考虑.

总之,对于smt的移植,需要详尽的在程序中做好接口,才能实现与

smt的数据交换.

结束语

ndis规范在网络两层间提供了一个统一界面,ndis对网络本身而言,是一个带有协议功能的标准接口,对实现者而言,它应该是一个环境,这种环境不仅带有协议功能,更重要的是带有和软、硬平台无关的核心功能支持,它不会受软、硬平台的变化严重影响,无疑,它是软件的移植和兼容的可靠保证,ndis把网络的一部分共性抽象出来,并根据具体的操作系统实现系统和平台相关的基础库以保证ndis的标准性和对开发者提供最大的功能支持,这也将加速和规范开发过程,但是,在操作系统之上提供ndis基础库获得标准同时也失去直接作用于操作系统带来的灵活性以及更强的功能支持,同时,ndis处于网络中层和低层之间,低层网络的快速发展和ndis对网络部分共性的抽象必然导致ndis对实现者的滞后,例如ddk3.51提供的ndis开发环境只支持10m以太网、fddi、令牌网(802.5)、localtalk、arcnet等,而对新出现的快速以太网及atm不提供支持,这对我们如何在ndis环境下实现诸如atm的lan emulation,ip over atm、快速以太网带来很大问题。

smt是实现fddi网卡驱动程序的关键,然而由于应用ddk开发miniport驱动程序时要遵循其结构框架,所以要想完整地按其结构移植smt,就必须分解smt适应之,即要求对smt有一个很好的理解。但smt是庞大的给开发带来了一定的困难。

参考文献

【1】《device driver kit用户手册》

【2】《device driver kit核心驱动程序设计》

【3】《device driver kit网络驱动程序设计》

网卡驱动程序范文2

就象UNIX,Linux支持的网卡主要是以太网卡。如3COM、ACCTON、AT&T、IBM、CRYSTAL、D-LINK等众多品牌的以太网卡只要安装配置正确,都可以得到你所期望的效果。

一、Linux中网卡的工作原理

为了将这个问题说明的更清楚一些,不妨先简要地剖析一下Linux是如何让网卡工作的。一般来说,Linux核心已经实现了OSI参考模型的网络层及更上层部分。网络层的实现依赖于数据链路层的有效工作。网卡的驱动程序就是数据链路层与物理层的接口。通过调用驱动程序的发送例程向物理端口发送数据,调用驱动程序的接收例程从物理端口接收数据。

1.网卡驱动程序

简单地说,要将你手中的网卡利用起来,你唯一要做的是得到这块网卡的驱动程序。驱动程序提供了面向操作系统核心的接口和面向物理层的接口。

驱动程序的操作系统接口是一些用于发现网卡、检测网卡参数以及发送接收数据的例程。当驱动程序开始运作时,操作系统首先调用检测例程以发现系统中安装的网卡。如果该网卡支持即插即用,那么检测例程应该可以自动发现网卡的各种参数;否则你就要在驱动程序运作前,设置好网卡的参数供驱动程序使用。当核心要发送数据时,它调用驱动程序的发送例程。发送例程将数据写入正确的空间,然后激活物理发送过程。

驱动程序面向物理层的接口是中断处理例程。当网卡接收到数据、发送过程结束,或者发现错误时,网卡产生一个中断,然后核心调用该中断的处理例程。中断处理例程判断中断发生的原因,并进行响应的处理。比如当网卡接收到数据而发生中断时,中断处理例程调用接收例程进行接收。

2.驱动程序工作参数

驱动程序的工作参数因网卡性质的不同而不同,大致包括I/O端口号、中断号、DMA通道、共享存储区等。输入输出端口号又被称为输入输出基地址,当网卡工作于端口输入输出模式时被使用。端口输入输出模式需要CPU的全程干预,但所需硬件及存储空间要求较低。CPU通过端口号指定的空间与网卡交换数据。中断号是网卡的中断序号,只要不与其它设备冲突即可。当网卡使用DMA方式时,它要使用DMA通道批量传输数据而不需要CPU的干预。

对于一块具体的网卡,如果网卡支持完全自动检测,那么一个参数也不用指定,驱动程序的检测例程会自动设定所需参数。一般情况,你需要人工设定这些参数的一部分。如果你的网卡使用端口输入输出模式,你要设定端口号和中断号。如果你的网卡使用DMA模式,你要设定DMA通道和中断号。如果你的网卡使用共享存储区的模式,那你就得设定共享存储区的地址范围。

3.驱动程序的使用方式

有了网卡的驱动程序后,你可以选择是把驱动程序加入到Linux核心之中还是把驱动程序加工成独立模块。Linux系统一个引人入胜的长处就是可以定制系统的核心。把需要频繁调用的功能加入系统核心,可以大大提高系统的效率。在这种情况下系统启动时,系统核心自动加载网卡的驱动程序。驱动程序的参数可以通过LILO命令参数加以指

定。系统启动后驱动程序永久驻留核心,不能用常规的方法将其卸载。至于定制的系统核心,是通过重新编译得到的;如何编译核心将在后文叙及。

如果把驱动程序编译成可装载模块,就可以用系统提供的命令在系统启动后随时加载。随时加载的好处是减少内存开销,易于管理,但同时也牺牲了一点网络传输的效率。驱动程序的参数是在命令行中直接输入或通过配置文件指定。二、网卡安装前的准备在安装网卡前,务必检查是否具备下列条件:

1.硬件方面

以太网卡

网络连接线及连接头,如10base-T一般为8芯双绞线配RJ-45接口

2.软件方面

Linux操作系统

网卡驱动程序(目标码或源代码)

*网卡配置程序

*软件开发工具,如GNU工具包(包括编译器gcc、make等)

3.系统配置信息

可用的端口地址

可用的中断号

以上不带星号标记的是必要条件,带星号的是视情况不同而要求的条件。具体情况在下面进一步说明。

三、网卡的安装及配置

第一步:配置以太网卡的工作参数

配置网卡就是配置网卡的工作参数,如端口地址、中断号等。网卡的缺省参数一般存储于网卡内部的EEPROM,这是网卡出厂前设置好的。缺省参数在大多数情况下是可行的,但如果这些参数与你的系统有冲突并且网卡又不支持软件动态设置,那么你就要使用网卡的设置程序。并不是所有的网卡都要经过这一步,因为有些网卡支持通过驱动软件及其输入参数来确定网卡的工作参数。可以通过查阅网卡使用说明书来确定这一点。

网卡的设置程序与驱动程序不同,设置程序仅仅用来对网卡EEPROM中的设置进行修改。网卡程序本身可能运行在其它操作系统下,如WINDOWS95/98、OS/2、DOS等。如果是非Linux平台,那你就先在适合设置程序运行的系统中安装网卡,按设置程序说明设置网卡参数。然后再在Linux系统下安装该网卡。

第二步:安装Linux系统

假如你将要安装以太网卡的Linux系统本身还未安装,那么可以先试着在安装Linux的同时安装网卡。这一步成功的前提是你的Linux发行版本包含将要安装的网卡的驱动程序。

运行Linux的安装程序,按提示进行操作,别忘了安装核心的网络部分。当进行到LAN配置时,安装程序会列出它支持的所有网卡的类型。看看你的网卡是否榜上有名。随着Linux发行版本的不断升级,目前RedHat6.0已经覆盖了常用的网卡类型。如果很幸运地你的网卡恰好在其中,那么下文讨论的很多步骤都可以不必考虑了,安装程序会自动完成网卡的安装与驱动。但如果没找到适用于你的网卡类型,也不必担心,继续下一步。

第三步:手工安装网卡

安装网卡也就是安装网卡的驱动程序。网卡要工作必须要有驱动程序,并且驱动程序越成熟越好。驱动程序一般由网卡的生产或供应商提供。由于Linux是一个起步不久的新兴操作系统,网卡的生产商并不一定提供Linux环境下的驱动程序。这时候你就得从其它途径想办法了,比如到INTERNET上专门提供硬件驱动程序的网站查找一下,也可以在新闻组上贴个求助信息。总之,只有得到网卡的驱动程序后,方可进行下一步。

网卡的驱动程序有两种类型。一是可直接使用的二进制代码;另一种是驱动程序的源代码。二进制代码一般是预先编译好的可装载模块。源代码可以编译成可装载模块,也可以编译成系统核心的一部分。如何把源代码编译成可装载模块不在本文讨论之列,具体可以查阅驱动程序的说明书。

1.可装载模块的使用

系统提供了一组命令用于将驱动程序模块载入内存执行。这些命令包括modprobe、insmod、Ismod、rmmod。modprobe与insmod命令功能相似,但是方式各异。

modprobe命令使用配置文

件/erc/config.modules来加载可执行模块。要用modprobe命令加载以太网卡的驱动程序,可以在config.modules文件中加入:

aliaseth0drivermodule(drivermodule是驱动程序模块的名称)

这行配置信息把以太网卡的设备名与驱动程序模块联系起来。modprobe命令依据这条信息,自动加载存放于/lib/library/xxxx/net目录下名为drivermodule.o的模块。因此要使modprobe命令找到驱动程序模块,必须将该模块放在/lib/library/xxxx/net目录下。

那么驱动程序的参数如何指定呢?还是使用conf.modules文件。方法是在接着上述配置信息的后面加入下行信息:

optionsdrivermoduleparml=valuel,parm2=value2,……

这里parm1是驱动程序可以接受的参数名,valuel是该参数值;依次类推。

比如optionscs89x0io=0x200irq=0xAmedia=aui

insmod命令直接通过命令行参数将驱动程序模块载入内存,并可以在命令中指定驱动程序参数。例如:

insmoddrivermodule.oparml=valuel,parm2=value2,……

以上两个命令中可以使用驱动程序参数要依据具体的网卡及其驱动程序而定,要仔细阅读网卡及驱动程序的说明书。有的网卡驱动程序可以用这些参数覆盖网卡本身EEPROM中存储的参数。有的则必须使用EEPROM中的参数。有的因为驱动程序不自动检测网卡使用的参数,所以还得把网卡使用的EEPROM中的参数传给驱动程序。

卸载驱动程序模块使用rmmod命令:

rmmoddrivermodule.o

2.把驱动程序编译入系统核心

除了以可装载模块的形式使用驱动程序,还可以把驱动程序编译进Linux核心,以获取更高的效率。这种方式需要驱动程序的源代码、Linux核心源代码及其编译工具。Linux核心的编译过程包括配置核心、重建依赖关系、生成核心代码等步骤。配置核心的过程是用系统提供的配置工具(makeconfig或makemenuconfig)重新生成用来编译核心的众多make文件的过程。为了让核心的配置工具了解你的网卡驱动程序,你需要修改一些核心的配置文件。

(1)修改配置文件:主要修改核心源代码目录下的四个文件,即drivers/net/CONFIG文件、drivers/net/Config.in文件、drivers/net/Makefile文件和drivers/net/Space.c文件。CONFIG和Config.in文件用于控制核心配置工具(makeconfig或makemenuconfig)的运行,主要是加入关于是否包括该网卡的支持提示。Makefile和Space.c文件用于编译核心代码并说明面向核心的接口。详细语句参见下面例子。

(2)运行核心配置工具:在核心源代码目录下执行makeconfig或makemenuconfig命令。makeconfig是面向命令行的,通过逐句回答提问来配置核心。由于其在配置过程中不可改变或撤消以前的回答,故多有不便。makemenuconfig则是通过窗口菜单方式,使用起来很方便。就本文而言,你只要在上一步中正确修改了配置文件,那么在config中会出现是否需要该网卡支持的提问,你选择‘y’。或者在menuconfig中的network菜单中出现表示该网卡的菜单项,把它选上即可。

(3)重建依赖关系:很简单,执行makedep和makeclean命令。

(4)生成核心代码:执行makezImage命令。这个命令开始真正编译核心代码,并把核心代码存放为arch/i386/boot目录下的zImage。

(5)为了使用新的核心代码,你需要用新的核心代码替换原有的。原有的核心代码一般存放在/boot目录下,文件名称类似于vmlinuz-v.s.r-m(v.s.r-m)表示核心的版本号)。如vmlinuz-2.0.34-1。执行下列命令:

cparch/i386/boot/zImage/boot/vmlinuz-v.s.r-m

为了安全起见,可以先把原有的核心代码做个备份,以便发生错

误时恢复。

至此,你可以重新引导系统以使用新的带有正确网卡驱动支持的Linux核心。唯一剩下未解决的是驱动程序的参数问题。有些网卡驱动程序如果不输入参数,那它工作就会不正常,甚至根本不工作。由于现在网卡的驱动程序是系统启动时由核心载入运行的,系统启动之后用户就很难改变这些参数了,所以你必须在系统启动时告诉Linux核心网卡驱动程序使用的参数。具体方法有两种:

(1)在系统引导程序LILO中输入。

在LILO开始引导系统时,用ether子命令设定以太网卡驱动程序的参数。ether命令的使用方式为:

LILO:linuxether=IRO.BASE_ADDR,NAME

这里带下划线的是要输入的部分,IRQ表示中断号,BASE_ADDR表示端口号,NAME表示网卡的设备名。例如:linuxether=15,0x320,eth0

(2)在LILO配置文件中设定。

每次在系统启动时再输入驱动程序参数似乎有点过于麻烦。幸好系统提供了LILO的配置文件可以用来永久性的设置Linux系统启动时的子命令。方法是在/etc/lilo.conf文件中的适当位置加入以下一行:

append=“ether=IRQ,BASE_ADDR,NAME”

这里带下划线部分的意义同上。加入这一行后,还需要用/sbin/lilo命令把这个配置写入引导程序。

第四步:网络配置及测试

安装完网卡就可以配置网络通信了。配置网络简单地就是使用ifconfig命令,

例如:

ifconfigeth01.2.3.4netmask255.0.0.0up

最后ping一下网上其它机器的ip地址,检查网络是否连通。

五、一个以太网卡安装实例

下面以Cirrus公司生产的CrystalCS8920以太网卡为例,详细说明上述安装配置过程。本例中,有些命令参数,如核心源代码目录等,是以我使用的系统环境为出发点。具体应用中还要加以本地化。为了更接近实际,例子中也包括了对安装中碰到的问题的描述。

1.此网卡是IBMPC机的内置式网卡,机器只提供了Windows95/98环境下的驱动程序。由于RedHat5.0发行版本尚未提供对此网卡的直接支持,所以从Cirrus的站点上找到并下载了该网卡驱动程序的Linux版本,是一个名为Linux102_tar.gz的压缩文件。

2.文件Linux102_tar.gz解压后包括五个文件。包括源代码,仅适用于Linux2.0版本的目标模块以及readme文件。

3.查阅readme文件后,了解到这个驱动程序只能使用网卡EEPROM中设定的端口号(I/O基地址)、中断号。为了知道网卡EEPROM的设置,又从Cirrus站点下载了该网卡DOS版本的设置程序setup.exe

4.在DOS中运行setup.exe,发现网卡的起始端口号为0x360,中断号为10,与别的设备有冲突。选择setup.exe程序的相应菜单,把中断号改成5。另外,此驱动程序不支持plugandPlay,故也在setup.exe中将网卡的PnP功能屏蔽掉。

5.我所使用的RedHat5.0的Linux核心版本为2.0.34,所以不能用现成的驱动程序目标模块,需要自己动手编译。如上文所述,有两种方式使用此驱动程序。

6.如果要编译成独立模块,执行下列命令:

gcc-D_KERNEL_-I/usr/src/linux/include-I/usr/src/linux/net/inet-Wall-Wstrictprototypes-02-fomit-frame-pointer-DMODULE-DCONFIG_MODVERSIONS-ccs89x0.c

编译结果是名为cs89x0.o的驱动程序目标模块。要装载此驱动程序,输入下列命令:insmodcs89x0.oio=0x360irq=10

要卸载此驱动程序,用rmmod命令:

rmmodcs89x0.o

7.如果要将驱动程序编进系统核心,

修改/usr/src/linux/drivers/net/CONFIG,加入:

CS89x0_OPTS=

修改/usr/src/linux/drivers/net/Config.in,加入:

tristate‘CS8920Support’CONFIG_CS8920

以上两行是为了让makeconfig在配置过程中询问是否增加CS8920网卡的支持。修改/usr/src/linux/drivers/net/Makefile加入:

ifeq((CONFIG_CS8920),y)

L_OBJS+=cs89x0.o

endif

修改/usr/src/linux/drivers/net/Space.c,加入:

externintcs89x0_probe(structdevice*dev);

……

#ifdefCONFIG_CS8920

&&cs89x0_probe(dev);

#endif

以上两段是为了编译并输出网卡驱动程序及其例程。

把驱动程序源代码拷到/usr/src/linux/drivers/net目录下。

在/usr/src/linux目录下执行makeconfig或makemenuconfig,选择核心CS8920网卡支持。

执行makedep、makeclean命令。最后用makezImage编译Linux核心。

如何设置核心驱动程序参数,上节已有说明,不再赘述。

网卡驱动程序范文3

一台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网卡没有驱动则应该选择后者,否则小巧的标准版即可满足我们的需要。

网卡驱动程序范文4

我是3月买的明基S35笔记本,预装Linux系统,回家后自己改装了Windows 7,尽管可操作触摸板移动鼠标,但在看网络小说时,却无法使用虚拟滚动功能切换页面,可进入鼠标属性界面后,却找不到触摸板设置功能,感觉很郁闷。

经咨询得知,这是因为没有安装触摸板驱动,而Windows 7内置触摸板驱动又不完善,导致无法开启触摸板的一些特殊功能(例如虚拟滚动、多点触摸、触摸板/鼠标自动切换),由于笔记本没有内置光驱,于是将随机驱动盘放入台式机的光驱里,打开后没有找到触摸板驱动,登录明基官方中文网站,也没有查到对应的触摸板驱动。

无奈之下,打电话咨询明基售后中心,技术工程师称他们也没有触摸板驱动,并称既然触摸板能正常使用,就没必要升级驱动了,但当听到我的需求时,对方告之这台笔记本采用的是Synaptics触摸板,建议我升级公版触摸板驱动,于是登录Synaptics官方网站,下载了V14.0.3版触摸板驱动,安装后提示重新启动系统(如图1)。

再次进入鼠标属性界面,此时多出了一个“装置设定值”选项卡(如图2),点击“设定值”按钮后,展开“滚动单指滚动”,勾选“启用垂直滚动”和“启用水平滚动”两个选项,点击“应用”按钮后(如图3),在浏览内容较长的网页或DOC文档时,只需手指在TouchPad 表面的滚动区域轻轻滑过,即可实现鼠标滑轮的滚动功能。

有时在编辑DOC文档或QQ聊天打字时,总是误触摸到触摸板而影响鼠标定位,尽管可进入“装置设定值”界面禁用触摸板,但频繁手动操作很繁琐,不过据某网友称,升级V14.0.10版触摸板驱动后,触摸板会自动检测外接USB鼠标,并自动禁用或开启触摸板,于是下载并安装了V14.0.10版触摸板驱动,再次进入“装置设定值”界面,此时多出了一个“连接外部USB指向装置时禁用内部指向装置”,勾选该选项后(如图4),系统任务栏会弹出提示信息(如图5),此时触摸板无法使用,而当拔除USB鼠标时,触摸板会自动恢复。

二、优化内置读卡器性能

我在2009年12月买了一台上网本,预装Linux系统,最近将内存升级到了2GB,并改装了Windows 7,由于内置了5合1读卡器,于是经常将存储卡插入拷贝数据,平时拷贝小文件时时间很短,感觉不到速度的快慢,可一旦拷贝100MB以上大文件时,感觉速度非常慢。

由于经常通过内置读卡器拷贝电影文件,于是计划对读卡器性能进行优化,经过测试发现,当SD存储卡插入读卡器时,系统将其识别为“USB大容量存储设备”(如图6),且显示“可移动存储”盘符标志(如图7),经查询得知,这种现象是没有安装读卡器驱动,此时内置读卡器并没有工作在USB 2.0模式,怪不得数据传输速度很慢。

由于是一台山寨上网本,没有内置光驱,且官方网站也打不开,打电话咨询经销商,对方称没有解决方法,本以为借助EVEREST软件能检测出读卡器芯片类型,但得到的结果是“Generic-Multi-Card”,根本无法判断读卡器芯片类型,那么去哪里寻找内置读卡器驱动呢?百般无奈之下,听不少网友说,与网卡、声卡一样,很多上网本都采用了Realtek公司的IC芯片,本着尝试的心态,登录Realtek官方网站,下载了USB card reader驱动。

解压并执行安装程序,安装过程中居然没有提示错误,之后提示“SD Card已安装好”(如图8),非常幸运读卡器驱动安装成功,系统将内置读卡器识别为“Realtek USB 2.0 Card Reader”,此时将SD存储卡插入内置读卡器后,可顺利检测到SD存储卡,且盘符标志显示为“SD”字样(如图9),马上向SD存储卡里拷贝一部700MB电影文件,拷贝速度比之前有很大改善,感觉比较爽。

最近为MP4播放器配了一个8GB存储卡,于是经常拷贝超过1GB容量的高清电影,为了提升数据传输速度,此时应该开启磁盘高速模式,方法是右键单击“计算机”界面的SD盘符标志,选择“属性”后切换到“硬件”界面,双击其中的“SD Card”磁盘驱动器(如图10),切换到“策略”选项页,勾选“更好的性能”选项(如图11),这样可大幅提升数据传输率,但要注意,数据拷贝完毕后,必须用安全方式拔除SD存储卡,否则会丢失数据。

三、恢复失效的音频输出接口

我是2009年买的惠普dv6笔记本,预装了Vista系统,由于运行速度并不流畅,于是改装了Windows 7,将各设备驱动装好后,看电影、看游戏、听音乐都没问题,内置音箱发声正常,可外接耳麦时却无法使用,感觉很不爽。

起初以为是耳麦问题,可连接PC外置音箱后,音箱同样无法发声,看来是声卡驱动有问题,重新安装声卡驱动后故障依旧,咨询HP售后中心后,工程师称因私自改装系统出现的故障,他们不负责售后,具体故障原因也无法给予解决,可是当笔者将系统改回到Vista后,同样的故障依旧出现,再次打电话咨询HP售后中心,工程师称可通过升级BIOS解决。

登录HP官方网站,查询并下载F.36 A版BIOS升级程序,在Windows下直接执行升级程序,根据提示升级BIOS后(如图12),尽管没有解决外置音频接口故障问题,但显卡BIOS视频版本却提升了,显卡性能和节能效果都有所改善,笔者喜欢玩游戏时佩戴耳机,不解决外置音频接口问题誓不罢休,经过多次测试摸索,笔者终于找到了解决方案。

方法是在HP官方网站下载声卡驱动,执行sp45044.exe程序后,记录一下声卡驱动解压路径(如图13),然后根据提示安装声卡驱动,进入设备管理器,此时可找到一个IDT声卡标志,双击后切换到“驱动程序”界面,点击“更新驱动程序”按钮,选择手动更新方式,并将驱动文件指定为C:\SwSetup\SP45044\WDM\Vista\STWRT.inf(如图14)。

强制安装驱动后,重新启动系统,此时声卡并不能马上使用,按照同样的方法,再次强制安装一次声卡驱动,并将驱动文件指定为C:\SwSetup\SP42717\WDM\xp\STHDA.inf,重新启动系统后,声卡可以正常使用,但外接耳麦还是没有声音,进入Windows控制面板,双击“IDT Audio控制面板”图标,切换到“设置”界面,取消“关闭外部放大器电源”选项(如图15),再次接入耳麦时就可以正常使用了。

四、让老本刻录机焕发活力

我是2005年买的宏基Aspire 5502WXMi笔记本,虽然平时日常娱乐没问题,但内置DVD刻录机噪音非常大,而且不支持DVD-RAM格式刻录,最近在国外网站闲逛,找到了DVD刻录机的新固件,升级后不仅噪音降低,而且也支持DVD-RAM格式刻录。

在升级固件之前,需要了解笔记本主板上的IDE通道情况,如果只有一个IDE通道,那么必须刷写SLAVE版本固件,而如果有两个IDE通道,则必须刷写MASTER版本固件,如果刷错了固件版本,会与硬盘出现冲突,导致重启后无法进入系统。要判断主板IDE通道数,可进入设备管理器,展开“IDE ATA/ATAPI控制器”,然后就可以看到IDE通道数(如图16)。

网卡驱动程序范文5

>> 谁才是“总管”?四款资源管理器软件大比拼 四大“总管” 谁才是班级管理的主人 乱战!谁才是杀毒软件之王? 燃油总管、喷嘴密封试验器设计 行政管理:“大总管”生涯 谁更好用? 主流显卡监控超频软件大比拼 谁最称手?常用浏览器大比拼 Q-Dir让你用上四个资源管理器 基于Android的资源管理器设计 资源管理器不能随机启动 开启资源管理器的“大视野” 简单又实用,巧用资源管理器 Windows资源管理器下岗 资源管理器 这样用更高效 打开资源管理器提示错误等 DOS如何打败资源管理器的 资源管理器也要多标签 为资源管理器增加标签 A43“PK”资源管理器 常见问题解答 当前所在位置:I”下载一款制作好的Windows PE镜像。之后在windows XP中运行Ghost32 exe程序,依次选择“local”“disk”“fromimage”,在打开的弹出窗口中,选择之前下载到的windows PE GHO镜像文件。确定后在选择要恢复的分区时,选择将其恢复到SD卡上(如图10)。

步骤2 由于这个Windows PE专做下载之用,因此还要为它安装上本本的网卡驱动。对此可运行“智能光盘驱动2008”,单击“驱动备份”,按提示选择上网卡驱动,点击“下一步”将网卡驱动提取到“D:\本机驱动程序备份\WinXp”文件夹中(如图11)。完成后使用winRAR打开提取出的网卡驱动,将其中的NET目录解压到D盘下备用。

步骤3 现在运行“xcab.exe”系统封包程序,在打开窗口中,定位到“待压缩”栏,并输入要添加的网卡驱动所在文件夹,这里为“d:\net”。在“保存为”输入栏内,键入SD卡上Windows PE系统“外置程序”目录的位置,这里为“e:\外置程序\PE_OUTERPART\DRlVERS_NET01.CAB”(如图12)。完成后点击“压缩”按钮,即可将当前网卡驱动重新压缩为CAB文件,并放置在Windows PE的“外置程序”目录下。这样当进入Windows PE系统后。便可自动安装好本本的网卡驱动。

步骤4 现在重启Windows XP系统,进入本本BIOS设置窗口,将SD卡设置为第一启动设备。保存退出后,本本即可由SD卡启动到Windows PE系统,双击桌面上的“启动网络支持”图标。Windows PE便会自动加载网络服务和本本的网卡驱动。当成功加载后,可看到网络配置窗口(如图13)。

小提示

如果Windows PE提示无法安装网卡时,可手动为其安装网卡驱动。方法是右击点击“我的电脑’选择“管理”命令,在打开窗口中切换到“设备管理器”标签,单击菜单栏上的“查看””显示隐藏设备”,之后转到右侧窗格中,依次展开“others device”“以太网控制器”,在其上右击选择“更新驱动程序”,在弹出窗口中选择“在这些位置搜索最佳的驱动程序”,然后勾选上“在搜索时包含这个位置”,并在输入栏内键入“c:\windows\lnf”路径,这样即可自动搜索硬盘上Windows XP的网卡驱动,接着按提示指定驱动文件位置“c:\Wlndowsksystem32\drivers”,就可成功安装网卡。注意在安装完成后,系统提示是否需要重启时,一定要选择“否”。

步骤5 一切就绪,只要双击桌面上的“宽带连接”图标,按提示输入ADSL帐号密码就可以联机上网了。现在再来试试是否能够进行下载操作,点击“开始”“程序”“聊天下载工具”“迅雷5.0”(如图14),之后在网上找到要下载的电影和软件。点击下载链接后便可使用迅雷开始下载了。注意在选择下载文件保存路径时,要将其保存到SD卡上,这样才不会对硬盘进行读写操作。

步骤6 考虑到要整夜下载软件,所以尽管此时本本上的硬盘已不在有读写操作,但为更好保护本本硬盘,达到节能、降温、减噪的效果,此时不妨将硬盘关闭。对此,如果是采用SATA接口硬盘的本本,可在Windows PE系统托盘中,点击“安 全删除硬件”图标,在弹出的提示条中选择硬盘即可将其关闭。

小提示

如果本本采用的是lDE接口硬盘,那么可在Windows PE系统中,右键点击“我的电脑”,选择“管理”,在打开窗口中依次展开“存储”“磁盘管理”链接,之后在右侧窗格的各个硬盘盘符上,逐个点击右键选择“更改驱动器号和路径”,并在弹出窗口中单击“删除”按钮,将所有硬盘盘符删除。这样即可在windowsPE中进行下载操作时避免数据的读写,从而使硬盘处于“停用”状态。

第四次亲密接触SD卡全面加速系统

使用过Windows Vista的朋友,可能知道其带有一个“ReadyBoost”功能,它能够利用高速闪存存储设备来加速系统。而由于本本内存槽有限,加到2GB内存后基本就占满了,这时把手中的高速SD卡拿出来用作加速,可是个额外提升性能的不错选择。

SD卡为Windows XP加速

由于Windows XP系统没有内置ReadyBoost功能,因此要想获得同等的效果,就要借助“eBoostr”这款软件。除此之外,用来做加速的SD卡必须是SDHC高速产品,本本上的读卡器也要工作在USB 2.0接口上。

步骤1 安装并运行“eBoostr”,完成后系统将会重新启动并自动打开程序设置窗口,此时可在“选择装置”栏中的下拉列表内,选取本本上的SD卡,并设置“选择快取大小”为一个较合适的范围。比如这里采用4GB的高速SD卡,就可选择1GB空间用于系统加速(如图15)。

步骤2 设置完成后,单击“确定”按钮,程序便开始设置加速参数并切换到控制台窗口,在这里将显示当前硬盘负载等参数。现在同时运行多个大型程序,看看运行速度是不是有了明显提升呢(如图16)。

SD卡启动ReadyBoost

如果使用了Windows Vista系统。那么其已内置了“ReadyBoost”加速功能,只要将其开启并应用在SD卡上即可。对此,可在本本上插入SD卡后,打开“我的电脑”,右键点击SD卡盘符选择“属性”,然后在打开的属性窗口中切换到“ReadyBoost'’标签,选择“使用这个设备”单选框,接着在“用于加快系统速度调节的保留空间”选项中,拖动滑块选择适当的存储空间用作加速即可(如图17)。

小提示

要在Windows Vista中激活“ReadyBoost”功能,所使用的SD卡要支持在4K随机读取时不低于2.5MB/s或512K随机写入时不低于1.75MB/s的传输率,并保证带有64MB到8 GB的空闲空间。

因为开启“ReadyBoost”功能需要SD卡具备一定条件。所以当某些兼容性较差的SD卡插入本本后,在windows Vista系统下可能会自动屏蔽“ReadyBoost”功能。如果确认SD卡为高速产品,这时可手动开启该功能。

步骤1 插入SD卡,并切换到“ReadyBoost”设置窗口后,如果系统提示该设备无法用于加速,那么可取消系统默认勾选的“插入设备时不要再测试此设备”复选框,并单击“确定”退出(如图18)。

步骤2 在“运行”栏中执行“regedit”命令,打开注册表编辑器,接着在上方搜索列表选中regedit,右击选择“以系统管理员身份运行注册表编辑器”,之后依次展开“HKEY_LOCAL_MACHlNE\SOFTWARE\Mic rosoft\Wlndows NT\CurrentVersion\EMDMgmt”分支。双击右侧窗格中的“DveviceStatus”子键,在弹出窗口中将其键值修改为“2”。

网卡驱动程序范文6

1、首先检查显卡是否松动,试试把电脑的显卡驱动卸载,安装稳定版本的驱动。有时进入电脑的显示器刷新频率时,却发现没有刷新频率可供选择,这是由于之前显卡的驱动程序不正确或太旧造成的,购买时间较早的电脑容易出现问题。

2、在网上下载对应显卡的最新版驱动程序,然后打开“系统”属性窗口,单击“硬件”窗口中的“设备管理器”按钮,进入系统的设备列表界面。

3、用鼠标右键单击该界面中的显卡选项,从弹出的右键菜单中单击“属性”命令,然后在弹出的显卡属性设置窗口中,单击“驱动程序”,再单击“更新驱动程序”按钮,然后根据向导提示逐步将显卡驱动程序更新到最新版本。

4、将计算机系统重新启动了一下,如果驱动安装合适,就会出现显示器刷新频率选择项了,再将刷新率设置成75Hz以上即可解决电脑屏幕闪烁。

(来源:文章屋网 )