windows nt环境下fddi网卡驱动程序设计

点击数:750 | 发布时间:2025-03-01 | 来源:www.hbzf9.com

    前言
    windows nt是一个功能全方位的操作系统,具备完全集成式的连网能力,它的互联网模型开始于mac子层,互联网接口卡(network interface card将来简称网卡或nic)驱动程序驻留在其中。通过有关的网卡把windows nt与互联网连接起来,但一直到80年代后期,很多传输协议的达成受限于mac层接口的独特达成,由于mac层概念了协议与网卡之间的转换机制。
    1989年,microsoft和3com两公司提出了一个概念mac层与osi模型高层协议驱动程序之间的互联网设施接口规范(network device interface specification : nps),nps给数据交换提出了一个灵活的环境,它规范了软件接口──称为nps接口,传输协议可用它与网卡驱动程序进行通信。因此在windows nt环境下开发核心态网卡驱动程序应遵循nps规范。
    对于高速互联网fdp(fiber pstributed data interface)网卡驱动程序还需要smt(station management)站管理功能的达成,不然将不可以作为一个fdp站连入环结构中,只能达成点到点间的数据通信。故有必要将smt软件移植到网卡驱动程序中,这将又致使对miniport nic驱动程序编程框架的破坏,于是有必要形成fdp网卡驱动程序(包括smt)与windows nt操作系统的好接口──由逻辑网卡的注册和mac层驱动程序的初始化来完成。
    所以,本课题旨在深入研究应用microsoft企业的ddk(device driver kit)将smt移植于windows nt的fdp网卡驱动程序过程中怎么样注册miniport nic驱动程序。即如何正确注册逻辑网卡和mac驱动程序的初始化。着重讨论与初始化有关的上边缘函数的用法和调用关系与初始化过程中遇见的各种问题的具体解决。
    第一章windows nt环境下fdp网卡驱动程序
    总体结构介绍
    第一节windows nt互联网结构
    §1.1.1 windows nt互联网体系结构
    windows nt的互联网体系结构是基于国际标准化(iso)拟定的规范模型──开放式系统互连(open system interconnection:osi)参考模型分层打造的,这种方法有益于随时扩展其它功能和服务。
    windows nt互联网模型开始于mac子层,网卡驱动程序就驻留在其中。它通过有关的网卡把windows nt与互联网连接起来,图中的多个网卡表明在一台运行windows nt的计算机上能用多种网卡。
    这一互联网体系结构包含两个要紧接口──nps接口与传输驱动
    程序接口(tp)。这两个接口把两个层隔离开来,方法是相邻的部件只允许按单一的规范来写,不允很多重标准。比如一个网卡驱动程序(在nps接口的下面)就无需特地按每一个传输协议来写它的代码块,恰恰相反,该驱动程序是写给nps接口的,它通过符合nps的相应传输协议来请求服务。这类接口包括在windows nt的互联网体系结构中,以容纳可移植、可互换的模块。
    在两个接口之间,是传输协议。它在互联网中起着组织者有哪些用途。一个传输协议规定了数据以何种方法呈递给下一个接收层,与怎么样对数据相应地进行打包。它通过nps把数据传给网卡驱动程序,并通过tp把数据传给转发程序(reprector)
    tp之上是转发程序,它把当地的互联网资源申请转送给互联网。
    为了能和其他厂家的互联网互连,windows nt允许有多个转发程序。对于每个转发程序windows nt计算机需要也有一个相应的提供者(provider)。多提供者路由选择程序决定适合的提供者,然后借用于提供者,对应用请求到相应的转发程序做出选择。
    §1.1.2 windows nt互联网驱动程序
    windows nt支持两类型型的互联网驱动程序
    传输驱动程序
    达成数据链路层中的逻辑链路控制子层协议和传输层协议。向 下与nps接口,向上与tp接口。
    网卡驱动程序
    达成对物理层的管理和数据链路层中介质访问控制子层协议,通过nps向下管理物理网卡,向上与传输驱动程序通信。
    §1.1.3 windows nt网卡驱动程序
    windows nt环境下的网卡驱动程序也分为两种:
    miniport网卡驱动程序:miniport驱动程序只须达成与互联网硬件有关的操作(包含发送和接收)。而所有底层网卡驱动程序的通用操作(好似步),一般由nps接口程序来达成。
    full网卡驱动程序:full网卡驱动程序需要达成所有硬件有关和同步、排队等操作。比如full网卡驱动程序为了响应数据接收,需要维持本身的捆绑信息,而miniport就能由nps接口库来达成。
    在windows nt的早期版本中,full网卡驱动程序需要开发者达成很多底层操作,来处置多处置器的核心问题与处置器、线程的同步,如此不一样的开发者在很多重复着很多相同的工作。
    而miniport网卡驱动程序允许开发者仅仅写一些与互联网硬件有关的代码即可,而那些通用的函数由nps接口库来达成,如此开发出来的驱动程序降低了非必须的工作。
    第二节miniport驱动程序的结构
    nps接口规范了网卡驱动程序的达成,同时也对tp驱动程序的达成提出了肯定的需要,在nt中,nps约束下的网卡驱动程序、tp驱动程序和系统的关系如下图所示:
    图2.0 nps约束下的网卡驱动程序、tp驱动程序和系统的关系
    miniport驱动程序包含驱动程序对象、驱动程序源码和nps接口库代码。windows nt ddk提供nps.h作为miniport驱动程序的主要头文件,概念了miniport驱动程序的入口点、nps接口库函数和通用数据结构。
    上边缘函数有哪些用途是网卡驱动与nps接口库进行通信,而下边缘函数是tp协议驱动程序与nps通信的方法。
    §1.2.1 miniport网卡对象
    nps用一个叫做逻辑网卡的软件对象来描述系统中的每块网卡,而逻辑网卡与windows nt设施对象的通信由i/o子系统来管理,描述网卡的设施对象包含有关的互联网信息如名字、互联网地址和网卡内存基地址等,它还包括与硬件有关的驱动程序状况数据(捆绑数目,捆绑句柄,包过滤数据库等)。nps分配一个句柄到miniportinitialize这个上边缘函数的一个结构中,然后miniport网卡驱动程序将在将来提供这个句柄来给nps调用,这个结构一直被nps维持,并且对miniport驱动程序不透明。

    当miniport网卡驱动程序初始化一块网卡时,它创立我们的内部数据结构来描述网卡,记录需要它管理的与设施有关的状况信息。当miniport网卡驱动程序调用npsmsetatttibutes或npsmsetattributesex两nps库函数时,它传递一个句柄给这数据结构。如此,当调用miniport驱动程序入口点时,它就传递这个句柄来验证驱动程序所对应的网卡的正确性。这个数据结构为miniport网卡驱动程序所拥有并维护。
    §1.2.2互联网对象标识符
    miniport nic驱动程序还需要维护一组对象,这类对象是系统概念的对象标识符(object idetifier:oid)来标识,以描述驱动程序的性能和目前状况信息。为查看这类信息,上层驱动程序调用npsrequest向nps接口库指示oid。oid表示了调用所需的信息种类,如miniport驱动程序所支持的lookahead缓冲区大小等。nps接到上层驱动程序的查看请求,将oid传递给上边缘函数miniportqueryinformation达成对oid的查看,假如上层驱动程序请求改变状况信息则调用miniportsetinformation达成对oid的设置。
    §1.2.3 miniport网卡驱动程序代码
    典型的miniport nic驱动程序需要有一些函数来通过nps接口达成上层驱动程序与硬件的通信。这类函数称为上边缘服务函数。
    这类上边缘服务函数由驱动程序的开发者依据驱动程序面向的特定低层互联网种类和硬件与相应环境,可以有选择地达成,但需要保证驱动程序最基本的功能,这类基本功能包含初始化、发送、中断处置、重置、参数查看与设置和报文接收。
    miniportinitialize:操作系统依据系统配置信息,测试出网卡已安装时,由nps接口在初始化时调用,主要完成低层互联网种类确定,对应于物理网卡的逻辑网卡初始化,中断信息注册,网卡与主机通讯方法的确认。i/o端口的申请与注册,内存映像,mib的初始化,物理网卡的验证与初始化等。
    miniportreconfigure:支持网卡参数动态变化,和miniportinitilize一样由nps接口以初始化级别调度实行(不可以屏蔽中断,需要由驱动程序承认并清除在此期间产生的中断),支持即插即用和软配置的网卡在动态改变参数时,需要提供此函数。
    miniportqueryinformation:查看网卡的状况与网卡驱动程序的操作或统计参数,如是不是支持组通讯、网卡的物理速率是不是支持回环、是不是支持直接拷贝等,这类参数以oid方法统一管理。
    miniportsetinformation:nps接口或协议驱动程序通过调用此接口改变驱动程序维护的oid库,一些操作参数的改变也将同时改变驱动程序状况,比如组地址的设置。
    miniportreset:包含网卡硬件重置和驱动程序软件重置,软件重置包含驱动程序状况重置,与一些有关的参数重置,还需考虑有的参数的恢复,重置时不必完成所有正在活跃的外部请求,但需要释放已占用的外部资源。
    miniporthalt:挂起网卡并释放该网卡驱动程序占用的所有资源,在此期间不屏蔽中断。
    miniportisr:高优先级的中断处置程序,进行的工作包含初始中断处置种类,决定是不是进行中断转交,对卡上中断进行处置 等,该服务种类只在以下状况被调用:
    nps接口调用miniportinitialize和miniporthalt两函数时。
    .中断处置种类设为每此中断处置过程都调用时。
    为使系统能准时响应所有硬件中断,高优先级的硬件中断处置程序应尽量的降低运行时间,预防长期的屏蔽低优先级中断,防止造程中断丢失。
    miniporthandleinterrupt:由中断延时处置程序在中断延时处置时进行调用。nps排队所有些延时处置,该服务主要处置发送完成、报文接收、描述符用尽、溢出、网卡异常等中断。
    miniportsend:nps收到上层发送请求时经过若干协议处置再向下调用此服务过程,发送的packet已含有llc和mac头,该服务过程进行边界对齐、packet约束重整、描述符映射和报文发送、与发送资源和packet缓冲队列管理。
    miniporttransferdata:多个已和网卡捆绑的协议驱动程序在接收到报文到达指示后,向网卡驱动程序发出传送请求以拷贝各自所需的报文数据部分,网卡驱动程序依据各协议驱动程序对单个packet是不是进行多次拷贝,以决定是不是暂存只允许单次拷贝的packet等。
    miniportcheckhandle:nps每秒调用此服务函数一次,驱动程序发现网卡异常时报告给nps由nps调用miniportreset进行硬件重恢复。

    miniportenableintrrupt:中断使能。
    miniportpsableinterrupt:中断屏蔽。
    另外,每一个网卡驱动程序需要有一个初始化入口点,由driver entry函数达成,它和系统有关,由操作系统在装入驱动程序时调用,主要完成初始化nps wrapper,再由wrapper初始生成驱动程序管理块并完成相应各种初始化工作,登录网卡驱动程序所有上边缘服务入口点,同时写入nps版本信息。
    §1.2.4 nps接口库
    nps接口库包含在nps.sys中,它是一个核态函数库,有一套抽象的函数,无论协议驱动程序还是nic驱动程序都连接到这个库中,以达成上下层之间的操作。
    第二章fdp网卡驱动程序的加载和运行
    第一节 网卡驱动程序的安装
    windows nt网卡驱动程序安装的目的是达成网卡相应硬件信息和驱动程序在windows nt注册库中的注册,使windows nt可以正确辨别网卡,知道所必需的软硬件信息并能在windows nt启动时加载相应驱动程序。
    网卡驱动程序安装时,第一在主群组的控制面板中选择“互联网”,然后添加网卡,指定相应信息文件──oemsetup.inf的路径,以完成以下两个必要的操作:
    复制驱动程序到相应的系统目录(windows nt根目录system32drivers)中;
    在windows nt注册库中存入相应软硬件信息。
    下面主要以fdp网卡为例介绍安装驱动程序所必需的工作:
    §2.1.1网卡一般硬件参数
    对于fdp网卡,需要在撰写其oemsetup.inf文件时确定以下硬件参数:
    总线种类:pci……括号中的数字5表示pci总线在nps中的总线种类代码;
    厂家代号:0x5588……系统加载时确定网卡的标记,也是编程时确定pci槽号的标识;
    cfid: 0x01;
    介质种类:光纤 ……括号中的数字表示光纤在nps中的介质种类代码;
    是不是支持全双工:支持。
    对于其它的硬件信息在此inf配置信息文件中可有可无,如若配置,则可在驱动程序的撰写时借助这类信息,便捷编程,同时有益于其它应用对其参数的确定和用。
    §2.1.2 fdp网卡加载时需在注册库登录表里做的互联网配置
    网卡驱动程序的安装一般将创建登录表中的四个不同子键:
    software registrion键,对应于驱动程序,存在于hkey_local_machinesoftwarecompany productnameversion中。大家的fdp网卡驱动程序所对应的是hkey_local_machinesoftwarenet612yhfdpyhfdp1.0;
    网卡的软件登录键,存在于hkey_local_machinesoftwaremicrosoft windows ntnt3.51networkcardsyhfdp1;
    驱动程序的服务登录键,存在于hkey_local_machinesystemcurrentcontrolsetservices
    网卡的服务登录键,存在于hkey_local_machinesystemcurrentcontrolsetservices
    对于每个互联网部件,一个名为netrules的特殊子键在邻近的驱动程序或网卡登录子键里创建,netrules标识互联网部件为互联网整体的一部分。
    fdp网卡驱动程序对应的规范软件登录表项将出目前以下路径:
    hkey_local_machinesoftwarenet612yhfdpyhfdp1.0;
    驱动程序对应的规范项的值为:
    description =yhfdp/pci adapter controller
    install date =……
    ……
    refcount =0x01
    servicename =yhfdp
    softwaretype =driver
    title =yhfdp/pci adapter controller
    而且在yhfdp驱动程序有关的netrules子键下,这类值项为:
    bindable =yhfdp driver yhfdp adapter non exclusiver
    bindform =“yhfdpsys”yes no container
    class = reg_multi_sz “yhfdp driver basic”
    infname =oemnad1.inf
    type =yhfdpsys npsdriver yhfdpdriver
    use =driver
    yhfdp网卡在如下路径的networkcards子键里介绍:
    hkey_local_machinesoftwaremicrosoft
    windows ntnt3.51networkcardsyhfdp1;
    网卡的规范项包含以下这类值:
    description =yhfdp/pci adapter controller
    install date =……
    manufacturer =net612
    productname =yhfdp
    servicename =yhfdp01
    title =[01]yhfdp/pci adapter controller
    §2.1.3撰写inf信息配置文件
    gui inf描述语言被windows nt用以书写系统所有部件的配置文件,当然也可以用以书写互联网系统各部件的配置文件,该配置文件描述了互联网部件安装、配置、删除的实行过程。当互联网部件进行初始安装或二次安装(一般通过ncpa进行)时,安装程序读取部件对应的配置文件,进行讲解实行。gui inf描述语言由节、命令、逻辑操作、变量规范、步骤控制与一套调用dll或外部程序的机制组成,其中,节是配置文件的主体,节可分为install节(像函数),shell节(也像函数,但可调用insall和shell节),detect节(不包括命令),一个配置文件一般由若干不相同种类型的节组成。驱动程序的开发者依据需要可以在配置文件中撰写相应代码,使得用户和系统之间能进行交互,并且由用户决定一些配置参数。
    nt网卡配置文件有其一套规范,驱动程序开发者需要按规范撰写配置文件,通常来讲,一个配置文件至少应该提供下面三个节:
    安装入口点:[identify]shell节。该节主要功能是给出安装部件的种类名,系统通过它辨别该部件是哪一大类(psplay,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内核;
    第三阶段:获得注册库中各种控制信息,如用户概念的非页内存大小;第四阶段:初始化注册库 registrymachine下system和hardware并创建currentcontrolset,为装入有关硬件设施驱动程序作筹备;
    第五阶段:装入基本核心驱动程序;
    第六阶段:释放一些已经完成使命的装入初始数据块;
    第七阶段:进一步初始化注册库,以便有的依靠于基本核心驱动程序的上层驱动程序能顺利装入;
    第八阶段:服务控制器装入应该由该服务控制器装入的各种驱动程序。

    §2.2.2 fdp网卡驱动程序的加载过程
    在windows nt启动的第五个阶段,将加载核心驱动程序。而对于nps网卡驱动程序是在nps接口(nps.sys)加载后调入运行,向nps wrapper注册、初始化、查看设置参数等。
    windows nt启动时,相应的实体如nt的服务控制器依据注册库中yhfdp驱动程序的配置注册信息,初始化nps wrapper,并装入相应的驱动程序,生成驱动程序管理块结构,申请内存以保存各种信息,向nps wrapper注册驱动程序。初始化和注册完毕后,再由服务控制器读取注册库中相应的链接信息。
    在nps wrapper和yhfdp驱动程序初始化和注册成功后,nps wrapper依据系统相应的注册信息,加入和yhfdp驱动程序所对应的fdp网卡,同时读入网卡的注册信息,并进行网卡注册和网卡初始化。
    在以上过程成功后,wrapper将查看和设置驱动程序的各种参数,知道驱动程序对什么操作支持,决定对上层驱动程序的支持范围。
    第三节fdp网卡驱动程序的注册
    driverentry函数是windows nt ddk规定的核心驱动程序的入口点,wrapper辨别到入口点后,调入驱动程序,在driverentry函数内完成两个基本注册任务:
    调用npsminitializewapper函数向nps接口报告驱动程序将以miniport类网卡驱动程序注册。nps打造它需要记录的驱动程序状况信息,同时返回npswrapperhandle,驱动程序保存这个句柄,以利后来调用npsxxxconfiguration和initialization等函数。
    填写npsxx_miniport_characteristics属性结构,主要记录nps版本号和驱动程序支持的miniportxxx函数的入口点,然后调用npsmregisterminiport函数达成驱动程序的整体注册。
    以yhfdp为例所要注册的属性结构的内容大致如下:
    nps_miniport_characteristics yhfdpchar;

    yhfdpchar.majornpsversion=yhfdp_nps_major_version;
    yhfdpchar.minornpsversion=yhfdp_nps_minor_version;
    这两个属性决定驱动程序是nps的什么版本所支持,大家所用的是nps3.0
    yhfdpchar.psableinterrupthandler=yhfdppsableinterrupt;
    yhfdpchar.enableinterrupthandler=yhfdpenableinterrupt;
    yhfdpchar.isrhandle=yhfdpinterruptservice;
    yhfdpchar.handleinterrupthandler=yhfdphandleinterrupt;
    以上四项属性是中断处置所需的上边缘服务函数的入口点(句柄)。fdp网卡驱动程序需要有smt站管理功能,而smt是以中断处置方法进行的,故这四项属性在fdp网卡驱动程序中是非常重要的。
    yhfdpchar.initializehandler=yhfdpinitialize;
    此项注册的是驱动程序的初始化函数句柄。
    yhfdpchar.queryinformationhandler= yhfdpqueryinformation;
    yhfdpchar.setinformationhandler=yhfdpsetinformation;
    这两项注册的是参数查看和设置函数的句柄。
    yhfdpchar.sendhanler= yhfdpsend;
    yhfdpchar.transferdatahandler= yhfdptransferdata;
    主要提供数据发送和接收函数句柄。
    yhfdpchar.resethandler=yhfdpreset;
    此项注册网卡软硬件重置函数句柄。
    yhfdpchar.halthandler= yhfdphalt;
    此项注册网卡驱动程序挂起函数句柄。
    yhfdpchar.checkforhandler=null;
    yhfdpchar.reconfigurehandler=null;
    这两个上边缘服务函数是fdp网卡驱动程序所不提供的,故置为null。
    填好这类结构将来,调用以下函数达成驱动程序的注册:
    npsmregisterminiport);
    其中yhfdpwrapperhandle是在此之前初始化wrapper调用npsminitializewrapper所得的句柄。
    假如调用npsmregisterminiport不可以返回nps_status_success,需要在退出driverentry之前释放已经分配的资源(如yhfdpwrapperhandle等),故调用
    npsterminatewrapper。
    如此驱动程序没能正确注册,亦不可以正常运行。
    第四节 网卡驱动程序对象查看与设置
    假如nps的管理实体要查看或设置一个特定的互联网对象,它需要提供一个32位的oid。oid的结构如下: 图2.3.0 oid结构图
    由上可以看到,oid可分为三大类:
    所有nps驱动程序都有些一般对象;
    特定介质的对象;
    特殊的与具体达成有关的对象(如多目地址表的长度)。
    普通的和特定介质的oid被记录在windows nt ddk中,对于这类oid ddk文本指明了有关的对象能否通过miniportqueryinformation查看参数和通过miniportsetinformation设置参数。
    oid也可被分为操作特质(如多目地址表长度参数)和统计参数(如广播包接收)。最后oid可分为需要的和可选的两种。
    oid的前三个字节表明oid的不相同种类别,而最后一个字节确定这些别内特定的信息管理对象。
    针对于fdp网卡,被查看的oid的第一个字节为0x03。而nps所查看的介质有关参数为:
    0x03010104 oid_fdp_long_max_list_size
    0x03010108 oid_fdp_short_max_list_size
    0x03010102 oid_fdp_long_current_addr
    0x03010106 oid_fdp_short_current_addr
    tcp/ip传输驱动程序所要查看的fdp oid为:
    0x03010102 oid_fdp_long_current_addr
    0x03010103 oid_fdp_long_multicast_list
    0x03010107 oid_fdp_short_multicast_list
    通过以上两阶段的查看,nps和tcp/ip驱动程序就分别知道了网卡驱动程序对其的支持,从而进行相应的捆绑,以便数据传输时正确选择网卡驱动程序。

    第五节 开发环境与调试办法
    开发环境:
    fdp网卡驱动程序的开发环境为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把目的机上重点信息通过串口传到主机进行剖析,以得出nps驱动程序的调度机制和运转情况;
    ※借助assert产生异常断点,由主机对异常进行控制
    ※自概念宏,进行分级控制,以依据不同状况产生不同调试信息
    第四章 与smt移植有关的问题讨论
    在本yhfdp网卡驱动程序中,smt的移植是极其重点的一部分,主要承担了驱动程序中硬件初始化和中断延迟处置。但因为smt是相对独立的软件,如此就有一个nps wrapper与smt间参数传递的问题。所以本章主要讨论miniport驱动程序与smt的关系和移植smt过程中初始化的需要、中断处置的需要,nps wrapper与smt怎么样传递参数。
    (一)miniport fdp网卡驱动程序与smt的关系。
    在第一章已经说到网卡驱动程序主要达成osi参考模型中的物理层和mac层。而对于fdp互联网的物理层又可分为介质有关子层和介质无关子层。
    对于大家的fdp/pci是基于x.3.19、x3.148、x3.166和x3.229而达成的。

    smt在整个iso七层模型中属低两层范畴。下图是iso模型与fdp层次的对应关系,从而可知fdp miniport驱动程序在nt互联网结构中的地方。
    即在windows nt fdp网卡驱动程序应包括smt,达成fdp拓扑环上的站管理。
    而在驱动程序内部smt主如果在miniport驱动程序中的中断延迟处置上边缘服务中达成的,也可以说是将smt嵌入中断延迟处置程序中,达成nps接口对smt的正确调度。
    yh-fdp驱动程序的达成可分为硬件无关部分和硬件有关部分。
    移植smt过程中初始化的需要.
    这里的初始化主如果指硬件初始化,包含寄存器的初始化和数据结构的初始化,由smt共用的硬件有关例程库中硬件初始化部分来完成. 大家在开发过程序是调用fdp_main这个函数来调用smt共用的硬件有关例程库的.可见用fdp_main时,需要传递bdd这个参量,而bdd_t这个数据结构的概念如下:
    它包括了各类硬件寄存器的基址,所以要对其进行正确赋值就需要第一在nt的内存中映射一块虚存与网卡内存相对应,也就达成了bdd_t结构的赋值,对fdp_main的正确调用.
    因此,大家在调用fdp_main前第一将网卡上寄存器内存空间映射到nt的虚存空间上,并将bdd结构正确赋值.以映射bsi_phy_base为例,具体过程如下:
    pchar destination;
    bdd_t *bdd;
    nps_physical_address physicaladdress;
    ulong baseaddress;
    nps_status status;
    baseadress =0x0d0000+bsi_phy_base;
    npssetphysicaladdresshigh;
    npssetphysicaladdresslow;
    status=npsmmapiospace&destination,
    miniportadapterhandle,
    physicaladdress,
    bsi_phy_len
    );
    bdd->bsi_vir_base= destination;
    adapter-> bdd->bsi_vir_base= bsi_vir_base;

    中断处置需要.
    对于中断处置,在smt中主要调用cspintrhandandler来达成.大家的fdp网卡驱动程序是miniport方法的,若在isr中做此处置将占用很多系统资源,使系统崩溃,所以大家使用只在isr中进行中断的排队,而在dpc中调用cspintrhandler来完成中断处置.
    在中断处置方面还有一个中断屏蔽和中断使能的问题,这两方面smt并不提供,故大家要正确处置.
    具体处置办法见第三章.
    nps wrapper与smt间参数怎么样传递.
    miniport方法的网卡驱动程序中,网卡上有中断时,系统反映给npswrapper,再由wrapper调度中断处置上边缘服务达成中断处置,在大家的yhfdp网卡驱动程序的中断具体处置是smt完成的所以在调用cspintrhandler时应将adapter结构传进smt以便在将来应用.
    如在处置接收中断时,处置的最后应调用npsinpcatefdpreceive,向npswrapper指示以接收到一个数据包,而npsinpcaterfdpreceive的调用需要adapterminiporthandle作为参数,这就需要一级级从中断延迟处置函数中将adapter结构传递下来. 当然,其它方面如发送,也会有类似的问题需要考虑.
    总之,对于smt的移植,需要详尽的在程序中做好接口,才能达成与
    smt的数据交换.
    结束语

    nps规范在互联网两层间提供了一个统一界面,nps对互联网本身而言,是一个带有协议功能的规范接口,对达成者而言,它应该是一个环境,这种环境不只带有协议功能,更要紧的是带有和软、硬平台无关的核心功能支持,它不会受软、硬平台的变化严重干扰,无疑,它是软件的移植和兼容的靠谱保证,nps把互联网的一部分共性抽象出来,并依据具体的操作系统达成系统和平台有关的基础库以保证nps的规范性和对开发者提供最大的功能支持,这也将加速和规范开发过程,但,在操作系统之上提供nps基础库获得标准同时也失去直接用途于操作系统带来的灵活性与更强的功能支持,同时,nps处于互联网中层和低层之间,低层互联网的飞速发展和nps对互联网部分共性的抽象势必致使nps对达成者的滞后,比如ddk3.51提供的nps开发环境只支持10m以太网、fdp、令牌网(802.5)、localtalk、arcnet等,而对新出现的迅速以太网及atm不提供支持,这对大家怎么样在nps环境下达成诸如atm的lan emulation,ip over atm、迅速以太网带来非常大问题。
    smt是达成fdp网卡驱动程序的重点,然而因为应用ddk开发miniport驱动程序时要遵循其结构框架,所以要想完整地按其结构移植smt,就需要分解smt适应之,即需要对smt有一个非常不错的理解。但smt是庞大的给开发带来了肯定的困难。
    参考文献
    《device driver kit用户手册》
    《device driver kit核心驱动程序设计》
    《device driver kit互联网驱动程序设计》
    《windows nt核心内幕》
    《windows nt资源》之三《性能测评》


  • THE END

    声明:本站部分内容均来自互联网,如不慎侵害的您的权益,请告知,我们将尽快删除。

专业院校

返回顶部

Copyright©2018-2024 中国考试人事网(https://www.bzgdwl.com/)
All Rights Reserverd ICP备18037099号-1

  • 中国考试人事网微博

  • 中国考试人事网

首页

财经

建筑

医疗