




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Windows NT中逻辑网卡的驱动贵州大学信息与计算机科学学院99级计算机科学与技术系李小龙 李家杰指导教师: 段 迅 讲师摘 要:本课题旨在深入研究应用Microsoft公司的DDK(Device driver kit),将SMT移植于Windows NT的FDDI网卡驱动程序,过程中如何注册miniport nic驱动程序。要怎样正确注册逻辑网卡和MAC驱动程序的初始化?着重讨论与初始化相关的上边缘函数的使用和调用关系,以及初始化过程中遇到的各种问题的具体解决。关键词: 国际标准、网卡接口。The driver of FDDI controller in Windows NT Compu
2、ter Science Department of Guizhou University Li Xiaolong LiJiajieAbstract :This paper is focus on how to register the driver of miniport nic in Windows NT during the process of transplanting SMT to FDDI controller driver . We also discuss how to register the virtual network controller correctly and
3、the initiation of MAC driver program I will focus on the usage of higher bi-function and transfer relation which is relate to the initation, and the soluation of varions problems.Keyword: ISO、Network Interfce Card.序 言Windows NT是一个多用户多任务的操作系统,其操作系统家族在硬件、软件和系统管理方面进行了增强以解决可用性和可靠性的问题,是在Windows XP之后Micro
4、soft公司开发出来的功能全面的操作系统,具有完全集成的连网能力,这也就是我们所说的逻辑网卡。它的网络模型开始于MAC子层,网络接口卡(network interface card以后简称网卡或NIC)驱动程序驻留在其中。通过相关的网卡把Windows NT 与网络连接起来,但一直到80年代后期,许多传输协议的实现受限于MAC层接口的独特实现,因为MAC层定义了协议与网卡之间的转换机制。1989年,Microsoft和3CM两公司提出了一个定义MAC层与OSI模型高层协议驱动程序之间的网络设备接口规范(Network device interfce specification:NDIS),ND
5、IS给数据交换提出了一个灵活的环境,它规范了软件接口称为NDIS接口,传输协议可用它与网卡驱动程序进行通信。因此在Windows NT 环境下开发核心态网卡驱动程序应遵循NDIS规范。对于高速网络FDDI(Fiber distributed data interface)网卡驱动程序还需要SMT(station management)站管理功能的实现,否则将不能作为一个FDDI站连入环结构中,只能实现到点间的数据通信。故有必要将SMT软件移植到网卡驱动程序中,这将又导致对miniport nic驱动程序编程框架的破坏,于是有必要形成FDDI网卡驱动程序(包含SMT)与Windows NT的操作
6、系统的良好接口由逻辑网卡的注册和MAC层驱动程序的初始化来完成。所以,本课题旨在深入研究应用Microsoft公司的DDK(Device driver kit)将SMT移植于Windows NT的FDDI网卡驱动程序过程中如何注册miniport nic驱动程序。即怎样正确注册逻辑网卡和MAC驱动程序中遇到的各种问题的具体解决。第一章 Windows NT环境下FDDI网卡驱动程序总体结构介绍第一节windows NT网络体系结构网络体系结构windows NT的网络体系结构是基于国际标准化(OSI)制定的标准模型开放式系统互连(Open system interconnection:OSI)
7、参考模型分层建立的,这种方式有利于扩展其他功能和服务。Windows NT与模型开始于子层,网卡驱动程序就驻留在其中。它通过相关的网卡把Windows NT与网络连接起来,表明在一台运行Windows NT的计算机上能使用多种网卡。这一网络体系结构包括两个重要接口NDIS接口与传输驱动程序接口(TDI)。这两个接口把两个层隔离开来,办法是相邻的部件只允许按单有一的标准来写,不允许多重标准。例如一个网卡驱动程序(在NDIS接口的下面)就不需要特地按每个传输协议来请求服务。这些接口包含在Windows NT的网络体系结构中,以容纳可移植、可互换的模块。在两个接口之间,是网络数据的传输协议。它在网络
8、中起着组织者的作用,而且他的良好的稳定性和可靠的安全性,是用户选择他的主要标准。一个传输协议规定了数据以何种方式呈递给下一个接收层,以及如何对数据相应地打包,这是对协议的良好工作性能的检测。它通过NDIS把数据传给网卡驱动程序,并通过TDI把数据传给转发程序(redirector)TDI之上是转发程序,它把本地的网络资源申请转送给整个网络系统。为了能和其他厂商的网络互连,Windows NT允许有多个转发程序。对于每一个转发程序Windows NT计算机必须也有一个相应的供应者(proveder)(由网络厂商提供)。多供应者路由选择程序决定适当的供应者,然后借助于供应者,对应用者的请求到相应的
9、转发程序的响应所做出选择。§1.1.2 Windows NT网络驱动程序windows NT支持两种类型的网络驱动程序:【1】传输驱动程序:实现数据链路层中的逻辑链路控制子层协议和传输层协议。向下与NDIS接口,向上与NT接口。【2】网卡驱动程序:实现对物理层的管理和数据链路层中介质访问控制子层协议,通过NDIS向下管理物理网卡,向上与传输驱动程序通信。§Windows NT 网卡驱动程序Windows NT环境下的网卡驱动程序也分为两种:【1】miniport网卡驱动程序:miniport驱动程序只需实现与网络硬件相关的操作(包括发送和接收)。而所有底层网卡驱动程序的通用
10、操作(如同步),一般也NDIS接口程序来实现。【2】full网卡驱动程序:full网卡驱动程序必须实现所有硬件相关的同步、排队等操作。例如full网卡驱动程序为了响应数据接收,需要保持本身的捆绑信息,而miniport就可以也接口库来实现。在Windows NT的早期版本中,full网卡驱动程序要求开发者实现许多底层操作,来处理多处理器的核心问题以及处理里器、线程的同步,这样不同的开发者在大量重复着许多相同的工作。而miniport网卡驱动程序允许开发者仅仅写一些与网络硬件相关的代码即可,而那些通用的函数由NDIS接口库来实现,这样开发出来的驱动程序减少了不必要的工作。第二节 miniport
11、驱动程序的结构NDIS接口规范了网卡驱动程序的实现,同时也对TDI驱动程序的实现提出了一定的要求,在Windows NT中,NDIS约束下的网卡驱动程序、TDI驱动程序和系统存在着相应的关系。miniport驱动程序包括驱动程序对象,驱动程序源代码和NDIS接口库代码。Windos NT DDK提供NDIS.h作为miniport驱动程序的主要头文件,定义了miniport驱动程序的入口点、NDIS接口库函数和通用数据结构。上边缘函数的作用是网卡驱动与NDIS接口库进行通信,而下边缘函数是TDI协议驱动程序与通信的手段。网卡对象NDIS用一个叫做逻辑网卡的软件对象来描述系统的每块网卡与Wind
12、ows NT设备对象的通信由I/O子系统来管理,描述网卡的设备对象包括相关的网络信息如名字、网络地址和网卡内存基地址等,它还包括与硬件相关的驱动程序状态数据(捆绑数目,捆绑句柄,包括过数据等)。NDIS分配一个句柄到miniportinitialize这个上边缘函数的一个结构中,然后miniport网卡驱动程序将在以后提供这个句柄来给NDIS调用,这个结构一直被NDIS保持,并且对miniport驱动程序不透明。当miniport网卡驱动程序初始化一块网卡时,它创立自己的内部数据结构来描述网卡,记录需要它管理的与设备相关的状态信息。当miniport网卡驱动程序调用NDISmsetatttib
13、utes或NDISmsetattributesex两NDIS库函数时,它就传递一个句柄给这数据结构。这样,当调用miniport驱动程序入口点时,它就传递这个句柄来验正驱动程序所对应的网卡的正确性。这个数据结构为miniport网卡驱动程序所拥有并维护。网络标识符miniport nic驱动程序还需要维护一组对象,这些对象是系统定义的对象图标识符(object idetifier:oid)来标识,以描述驱动程序的行能和当前状态信息。为了查询这些信息,上层驱动程序调用NDISrequest向NDIS接口库指示oid。oid表示了调用所需要的信息类型,如miniport驱动程序所支持的lookah
14、ead缓冲区大小等。NDIS接到上层驱动程序的查询请求,将oid传递给上边缘函数miniport set information实现对oid的设置。§miniport网卡驱动程序代码 典型的miniport nic驱动程序必须有一些函数来通过NDIS接口实现上层驱动程序与硬件的通信。这些函数称为上边缘服务函数。这些上边缘服务函数由驱动程序的开发者根据驱动程序面向的特定低层网络类型和硬件以及相应环境,可以由选择地实现,但必须保证驱动程序最基本的功能,这些基本的功能包括初始化、发送、中断处理、重置、参数查询、设置与报文接收。miniportinitialize: 操作系统根据系统配置信息
15、,检查出网卡已安装时,由NDIS接口在初始化时调用,主要完成低层网络类型确定,对应于物理网卡的逻辑网卡初始化,中断信息注册,网卡与主机通讯方式的确认。I/O端口的申请与注册,内存映像,mib的初始化,物理网卡的验证与初始化等。miniportreconfigure: 查询网卡的状态以及网卡驱动程序的操作或统计参数,如是否支持组通讯、网卡的物理速率是否支持回环、是否支持直接拷贝等,这些参数以oid方式统一管理。miniportsetinformation: NDIS接口或协议驱动程序通过对调用此接口改变驱动程序维护的oid库,一些操作参数的改变也将同时改变驱动程序的状态,例如组地址的设置。min
16、iportset: 包括网卡硬件重置,软件重置包括驱动程序状态重置,以及一些相关的参数重置,还需考虑有些参数的恢复,重置时不必完成所有正在活跃的外部请求,但必须释放已占用的外部资源。miniporthalt: 挂起网卡并释放网卡驱动程序所占用的所有资源,在此期间不屏蔽中断。miniportisr: 高优先级的中断处理程序,进行的工作包括初始中断处理类型,决定是否进行中断转交,对卡上中断进行处理等,该服务类型只在以下情况被调用:【1】NDIS接口调用miniportinitialize和miniporthalt两函数时。【2】中断处理类型设置为每次中断处理过程都调用时。为使系统能及时响应所有硬件
17、中断,高优先级的硬件中断处理程序应尽可能的减少运行时间,防止长时间的屏蔽低优先级中断,避免造成中断丢失。miniporthandleinterrupt: 由中断延时处理时进行调用。NDIS排队所有的延时处理,该服务主要处理发送完成、报文接收、描述符用尽、溢出、网卡异常等中断。miniportsend: NDIS收到上层发送请求时经过若干协议处理再向下调用此服务过程,发送的packet已含有LLC和MAC头,该服务过程进行边界对齐、packet约束重整、描述符映射和报文发送、以及发送资源和packet缓冲队列管理。miniporttransferdata:多个已合乎网卡捆绑的协议驱动程序在接收到
18、报文到达指示后,向网卡驱动程序发出传送请求以拷贝各自的报文数据部分,网卡驱动程序根据各协议驱动程序对单个packet是否进行多次拷贝,以决定是否暂存只允许单次拷贝的packet等。miniportcheckhandle: NDIS每秒调用此服务函数一次,驱动程序发现网卡异常时报告给NDIS,由NDIS调用miniportreset进行硬件重恢复。miniportenableintrrupt:中断使用。miniportdisableinterrupt:中断屏蔽。另外,每个网卡驱动程序必须有一个初始化入口点,由driver entry函数实现,它和系统相关,由操作系统在装入驱动程序时调用,主要完成
19、初始化NDISwrapper,再由 wrapper初始生成驱动程序管理块并完成相应各种初始化工作,登陆网卡驱动程序 所有上边缘服务入口点,同时写入NDIS版本信息。§接口库NDIS接口库包括在NDIS.sys中,它是一个核态函数库,有一套抽象的函数,无论协议驱动程序还是NIC驱动程序都连接到这个库中,以实现上下层之间的操作。第二章 FDDI网卡驱动程序的加载和运行第一节 网卡驱动程序的安装Windows NT网卡驱动程序安装的目的:是实现对网卡相应硬件信息和驱动程序在Windows NT注册库中的注册,使Windows NT能够正确识别网卡,了解所必需的软件信息并能在Windows
20、NT启动时加载相应驱动程序。网卡驱动程序安装时,首先在主群组的控制面板中选择“网络”,然后添加网卡,在指定相应信息文件oemsetup,inf的路径,以完成以下两个必要的操作:复制驱动程序到相应的系统目录(Windows NT根目录system32drivers)中;在 Windows NT注册库中存入相应软硬件信息。下面以FDDI网卡为例介绍安装驱动程序所必需的工作:§网卡的一般硬件参数对于FDDI网卡,必须在编写其oemsetup.inf文件时确定以下硬件参数:【1】总线类型:PCI(5)括号中的数字5表示PCI总线在NDIS中的总线类型代码;【2】厂商代号:0×558
21、8系统加载时确定网卡的标记,也是编程时确定号的标识;cfid:0×01【3】介质类型:光纤(3)括号中的数字表示光纤在NDIS中的介质类型代码是否支持全双工:支持。对于其它的硬件信息在此配置信息文件中可有可无,如若配置,则可在驱动程序的编写时利用这些信息方便编程,同时有利于其它应用对其参数的确定和使用。§FDDI网卡加载时需在注册库登录表里做的网络配置网卡驱动程序的安装通常将创建登录表中的四个不同子键:skftware registrion键,对应于驱动程序,存在于hkey-local-machinesoftwarecompanyproductnameversion中。我们
22、的FDDI网卡驱动程序所对应的是hkey-local-machinesoftwarenet612yhFDDIyhFDDI1.0;网卡的软件登录键,存在于hkey-local-machinesoftwaremicrosoftwidowsNtnt3.51networkcardsyhFDDI1:驱动程序的服务登录键,存在于hkey-local-machinesoftwarecurrrentcontrolsetservices对于每一个网络部件,一个名netrules为的特殊子键在邻近的驱动程序或网登录子键里创建,netrules标识网络部件为网络整体的一部分。FDDI网卡驱动程序对应的标准软件登录表
23、项将出现在以下路径:hkey-local-machinesoftwarenet612yhFDDIyhFDDI1.0;驱动程序对应的标准项的值为:description=yhFDDI/PCI adapter controller install date=refcount=0×01seruicename=yhFDDIsoftwaretype=drivertitle=yhFDDI/pci adapter controller而且在yhFDDI驱动程序相关的netrules子键下,这些值项为:bindable=yhFDDI driver yhFDDI adapter non exclusi
24、verbindform=“yhFDDIsys” yes no containerclass=reg-multi-sz“yhFDDI driver basic”infname=oemnadl.inftype=yhFDDIsys NDISdriver yhFDDIdriveruse=driveryhFDDI网卡在如下路径的networkcards子键里介绍: hkey-local-machinesoftwaremicrosoftwindows ntnt3.51networkcardsyhFDDI1;网卡的标准项包括以下这些值:description=yhFDDI/PCI adapter contr
25、ollerinstall date=manufacturer=yhFDDIseruicename=yhFDDI01title=01yhFDDI/PCI adapter controller§编写 inf信息配置文件gui inf描述语言被windows用以书写系统所有部件的配置文件,当然也可以用以书写网络系统各部件的配置文件,该配置文件描述了网络部件安装、配置、删除的执行过程。当网络部件进行初始安装或二次安装(通常通过ncpa进行)时安装程序读取部件对应的配置文件,进行解释执行。Gui inf描述语言由节、命令、逻辑操作、变量规范、流程控制以及一调用 或外部程序的机制组成,其中,节是
26、配置文件的主体,节可分为install节(类似于函数),shell节(类似于函数,但可调用insall和shell节),detect节(不包含命令),一个配置文件一般由若干不同类型的组成。驱动程序的开发者根据需要可以在配置文件中编写相应代码,使得用户和系统之间能进行交互,并且由用户决定一些配置参数。网配置文件有其一规范,驱动程序开发者必须按规范编写配置论据,一般来说,一个配置文件至少应该提供下面三个:【1】安装入口点:identifyshell节。该节主要功能:是给出安装部件的类型名,系统通过它识别该部件属哪一类(display,mouse,scsi,network等)中的哪一类(网络adap
27、ter,driver,transport,service,network和netprovidor),同时,还需要给出映像文件所在的源介质及标识。returnoptionshell节。【2】系统执行安装identify节后,执行该节。它主要功能:是检查所需安装的部件是否支持的硬件平台和语言,并给出网卡名(有些配置文件支持多类网卡,此时必须让用户进行选择,并获得选择结果)。【3】installoptionshell节。主要功能:是拷贝映像文件和配置,生成配置的各种选项,创建该部件在注册库中对应的各种登录子树并更新重写。第二节 驱动程序的加载过程§的启动过程第一阶段:调入装入程序。和硬件平
28、台相关,86机器首先由 装入根扇区,再由根扇区装入ntldr;第二阶段:硬件检测。86机器调ntdetect程序最大限度地获取各种硬件设备信息,引导hal及基本设备驱支程序,以便引导nt内核;第三阶段:获取注册库中各种控制信息,如用户定义的非内页存大小;第四阶段:初始化注册库=registrymachine下system和hardware并创建currentcontrolset,为装入相关硬件设备驱动程序作准备;第五阶段:装入基本核心驱动程序;第六阶段:释放一些已经完成使命的装入初始数据块;第七阶段:进一步初始化注册库,以便有些依赖于基本核心驱动程序的上层驱动程序能顺利装入;第八阶段:服务控制
29、器装入应该由该服务器装入的各种驱动程序。§ FDDI驱动程序的加载过程 在windows NT启动的第五个阶段,将加载核心驱动程序。而对于 驱动程序是在 接口(NDIS.sys)加载后调入运行,向NDISwrapper注册、初始化、查询设置参数等。Windows NT启动时,相应的实体如nt的服务控制器根据注册库中yhFDDI驱动程序的配置注册信息,初始化NDISwrapper,并装入相应的驱动程序,生成驱动程序管理块结构,申请内存以保存各种信息,向NDISwrapper注册驱动程序。初始化和注册完毕后,再由服务控制器读取注册库中相应的链接信息。在NDISwrapper和yhFDDI
30、驱动程序初始化和注册成功后, NDISwrapper根据系统相应的注册信息,加入和yhFDDI驱动程序所对应的各种参数,了解驱动程序对哪些操作支持,决定对上层驱动程序的支持范围。第三节 FDDI网卡驱动程序的注册 driverentry函数是windows nt DDK规定的核心驱动程序的入口点,wrapper识别到入口后,调入驱动程序,在driverentry函数内完成两个基本注册任务:调用NDISminitiallizewapper函数向NDIS接口报告驱动程序将以miniport类网卡驱动程序注册 。NDIS建立它需要记录的驱动程序状态信息,同时返回NDISwrapperhandle驱动
31、程序保存这个句柄,以利后来调用NDISxxxconfiguration和initialization等函数。填写NDISzz-miniport属性结构,主要记录NDIS版本号和驱动程序支持的miniportzzz函数的入口点,然后调用NDISmregisterminiport函数实现驱动程序的整体注册。以yhFDDI为例所要注册的属性结构的内容大致如下:NDIS-miniport-characteristics yhFDDIchar;(NDIS-miniport-characteristicsp 这上结构将在下介绍)yhfddichar.majorndisversion=yhfddi-ndis
32、-minor-verion;这两个属性决定驱动程序NDIS是的哪个版本所支持,我们所用的是NDIS3.0yhFDDIchar.disableinterrupthandler=yhFDDIdisableinterrupt;yhFDDIchar.enableinterrupthandler=yhFDDIdisableinterrupt;yhFDDIchar.isrhandle=yhFDDIdisableinterrupt; yhFDDIchar.handleinterrupthandler=yhFDDIdisableinterrupt;以上四项属性是中断处理所需要的上边缘服务函数的入口点(句柄)。
33、FDDI网卡驱动程序需要有 站管理功能,而SMT是以中断处理方式进行的,故这四项属性在FDDI网驱动程序中是很重要的。YhFDDIchar.initializehandler=yhFDDIinitialize;此项注册的是驱动程序的初始化函数句柄。YhFDDIchar.setiformationhandler=YhFDDIqueryinformstionYhFDDIchar.setinformationhandler=yhFDDIsetinformation;这两项注册的是参数查询和设置函数的句柄。YhFDDIchar.sendhanler=yhFDDItransferdata;YhFDDIc
34、har.transferdatahandler=yhFDDItransferdata;主要提供数据发送和接收句柄。YhFDDIchar.resethandler=yhFDDIreset;此项注册网驱动程序挂起函数句柄。YhFDDIchar.halthandler=yhFDDIhalt;YhFDDIchar.reconfigurehandler=null;这两个上边缘服务函数是FDDI驱动程序所不提供的,故置为null。填好这些结构以后,调用以下函数实现驱动程序的注册:NDISmregisterminiport(yhFDDIwrapperhandle,yhFDDIchar,sizeof(yhFD
35、DIchar);其中yhFDDIcharhandle是在此之前初始化wrapper调用NDISminitializewrapper所得的句柄。如果调用NDISmregisterminiport不能返回NDIS-status-success,,必须在退出driverrntry之前释放已经分配的资源(如yhFDDIwrapperhandll等),故调用NDISterminatewrapper(yhFDDIwrpperhandle)。这样驱动程序没能正确注册,亦不能正常运行。第四节 网卡驱动程序对象查询与设置如果NDIS的管理实体要查询或设置一个特定的网络对象,它必须提供一个32位的oid.由上可以
36、看到,oid可分为三大类:所有NDIS驱动程序都有的一般对象;特定保持的对象;特殊的与具体实现相关的对象(如多目地址表的长度)。一般的和特定介质的oid被记录在windows nt DDK中,对于这些oid DDK文本指明了相关的对象能否通过miniportqueryinformation查询参数和通过miniportsetinformation设置参数。oid也可被分为操作特性(如多目地址表长度参数)和统计参数(如广播包接收)。最后oid可分为必须的和可选的两种。oid的前三个字节表明oid的不同类别,而最后一个字节确定这一类别内特定的信息管理对象。针对于FDDI网卡被查询的oid的第一个字
37、节为0*03。而NDIS所查询的介质相关参数为:0x03010104 oid_FDDI_long_max_list_size0x03010108 oid_ FDDI _short_max_list_size0x03010102 oid_ FDDI _long_max_current_addr0x03010106 oid_ FDDI _short_max_ current_addr传输驱动程序所要查询的FDDI oid为:0x03010102 oid_ FDDI _long_max_current_addr0x03010103 oid_ FDDI _long_max_multicast_list
38、0x03010107 oid_ FDDI _short_max_ multicast _list通过以上两阶段的查询NDIS和TCP/IP驱动程序就分别了解了网驱动程序对鞭的支持,从而进行相应的捆绑,以便数据传输时正确选择网驱动程序。 第五节 开发环境与调试方法开以环境:FDDI网卡驱动程序的开发环境为NT sever 3.51 ,sdk,DDK for workstation 3.51,vc+4.1, 硬件平台为586。调试平台:主机为 nt sever 3.51,windbg32目标机为 nt workstation3.51 (check 944)调试方法:利用dbgprint把目标机上关
39、键信息通过串口传到主机进行分析,以得出ndis驱支程序的调度机制和运转状况;*利用assert产生异常断点,由主机对异常进行的控制*自定义宏,进行分级控制,以根据不同情况产生不同调试信息。 第四章 与SMT移植相关的问题讨论 在本yhFDDI网卡驱动程序中,SMT的移植是极其关键的一部分,主要承担了驱动程序中硬件初始化和中断延迟处理,但由于SMT是相对独立的软件,这样就有一个NDIS与SMT间参数传递的问题。所以,主要讨论miniport驱动程序与SMT的关系和移植SMT过程中初始化的要求,中断处理的要求,NDIS wrapper与SMT如何传递参数。(一) miniport FDD
40、I网卡驱动程序与SMT的关系。在上一节中已经谈及驱动程序主要实现osi 参考模型中的物理层和MAC层。而对于FDDI网络的物理层又可分为介质相关子层和介质无关子层。在整个iso七层模型中属低两层范畴。即在Windows NT FDDI驱动程序应包含SMT,实现FDDI拓扑环上的站管理,而在驱动程序内部SMT主要是在miniport驱动程序中的中空延迟处理上边缘服务中实现的,也可以说是将SMT嵌入中断延迟处理程序中,实现NDIS接口对SMT的正确调度。yh-FDDI驱动程序的实现可分为硬件无关部分和硬件相关部分。移植SMT过程中初始化的要求。这里的初始化主要是指硬件初始化,包括寄存器的初始化和数
41、据结构的初始化,由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前首先将网卡上寄存器内存空间映射到 的虚存空间上,并将bdd结构正确值。以映射bsi_phy_base
42、为例,具体过程如下:pchar destination;bdd_t*bdd;NDIS_physical_address physicalladress;ulong baseadress;FDDI_status statusbaseadress 0x0d0000+bsi_phy_base;NDISserphysicaladdresslow(physicalladress, baseadress) ;status=NDISmmapiospace(pvoid *)&destination,miniportadapterhandle,physicalladress,bsi_phy_len,);
43、bdd->bsi_vir_base=(pchar) destination;adapter->bdd->bsi_vir_base;/*对adapter结构中的bdd结构值,以便在其它上边缘函数中使用这些虚存基地址*/ 中断处理要求:对于中断处理,在SMT中主要调用cspintrhandandler来实现。我们的FDDI网卡驱动程序是miniport方式的,若在isr中做此处理将占用大量系统资源,使系统崩溃,所以我们采用只在isr中进行中断的排队,而在DPC中调用cspintrhandandler来完成中断处理。在中断处理方面还有一个中断屏和中断使能的问题,这两方面 并不提供,
44、故我们要正确处理。(具体处理方法见第三章中。)NDIS wrapper与SMT 间参数如何传递。minipor方式的网驱动程序中,网上有中断时,系统反映给NDISwrapper,再由wrapper调度中断处理上边缘服务实现中断处理,在我们的yhFDDI网驱动程序的中断具体处理是SMT完成的所以在调用cspintrhandler时应将adapter结构传进SMT以便在以后应用。如在处理接收中断时,处理的最后应调用NDISindicatefddireceive,向NDISwrapper指示以接收到的一个数据包,而NDISindicatefddireceive 的调用需要adapterminipor
45、thandler 作为参数,这就必须一级级从中断延迟处理函数(yhfddi handleinterrupt) 中将adapter结构传递下来,当然,其它方面如发送,也会有类似的问题需要考虑。总之,对于SMT的移植,需要详尽的在程序中做好接口,才能实现与SMT的数据交换。驱动编写可以分多种情况,下面分别讨论: 1、串口通讯: Windows自身带有串口通讯的API,所以一般串口通讯不需要编写单独的驱动程序,只需要调用系统功能就可以了。而VC+可以参考QA000162 "在VC中如何开发串囗",Delphi可以参考QA002595 "在Delphi中怎样控制 Mode
46、m"。绝大多数串口外置的MODEM的驱动程序就是一个.inf文件(这个文件的规范在DDK中有说明),而没有实际的驱动文件。不过软猫不能使用这个办法。如果NDIS设备是通过串口的,也可以仿照MODEM编写这样的串口文件(当然如果要支持CAPI,就编写使用CAPI SDK编写驱动程序)。 2、使用现成的驱动软件包: 如果你的硬件是比较简单的数据采集卡这样的硬件,也可以使用一些现成的驱动软件包,这些软件包提供了一些基本的硬件操作功能,这样你可以免除使用DDK开发的苦恼。而且这些工具多数支持Delphi、VB、C+ Builder这样的软件,这样可以解决这些软件无法调用DDK编写驱动的问题。
47、3、使用DDK编写 : 如果前两种情况都不适用,你就需要使用DDK编写了。每个Windows版本都有对应的DDK。当然你应该根据自己使用的操作系统进行选择。Win9x的主要驱动都是VxD类型的,可以在Win95/98/Me下使用,但不能在WinNT/2000下使用。WinNT的驱动一般都是.sys文件,Win2000可以兼容WinNT驱动,但一般不能在Win9x下使用。所以如果你要支持Win9x和WinNT,需要编写两类驱动程序。USB设备的驱动程序是WDM类型的,扩展名为.sys,但只能在Win98/Me/2000下使用。 Win98 DDK和Windows 2000的DDK安装比较简单,而
48、且和VC+配合的比较好,最好使用这两个DDK包。Win95 DDK和WinNT DDK默认安装需要Win32 SDK,如果没有,需要手工修改环境变量或SETENV.BAT,略微麻烦一些,最好不使用。除了安装DDK,还需要VC+进行编译,最好是VC+ 6.0。其他软件都不是必须的。当然,最好有SoftICE作为调试工具。 此外,也有一些DDK的增强工具。运用所学的软件工程知识组织软件,在此次的系统开发中,我更深刻的理解了原来课堂上所学的计算机网络、软件工程以及一些常用的计算机编程语言的基础理论知识,更重要的是学到了很多课堂上难以掌握的知识。对一个计算机网络管理技术软件,从开发的前期准备,程序的规划到具
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB 23466-2025听力防护装备的选择、使用和维护
- 皂角树特色种植项目可行性研究报告
- 年产550吨灭火器充装剂项目可行性研究报告
- 医疗器械信息咨询公司合同付款管理办法
- 防新型传销知识培训课件
- 2026届高考地理第一轮复习课件:课时23 水循环
- 精细化工行业工艺流程研究
- 浙江省金华2025年九年级上学期数学月考试题附答案
- 百校结百村结对共建协议书8篇
- 拍卖买卖合同模板6篇
- 贵阳市殡仪服务中心招聘考试真题2024
- 中学藏文散文教学课件大纲
- 第4课《乡愁》课件-2025-2026学年统编版语文九年级上册
- 兵役法教学课件
- 第六届山东省无人机技术与应用职业技能竞赛(无人机测绘操控员)题库(含答案)
- 第1章三角形单元测试2025-2026学年苏科版八年级数学上册
- 煤改电工程施工质量监控方案和措施
- 2025-2026学年人教版小学数学四年级上册教学计划及进度表
- 高中语文课本中的作文素材(选必上)
- 2025年中医确有专长考试题库(附答案)
- 2025年秋季学期(统编版)二年级上册语文教学工作计划及教学进度表
评论
0/150
提交评论