- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于WDMNDIS体系USB网卡驱动程序设计
基于WDMNDIS体系USB网卡驱动程序设计
摘要:为了在Windows下实现USB网卡驱动程序,本文根据NDIS_WDM驱动模型,分析了NDIS_WDM模型的内在运行机制,提出了一个USB网卡驱动的设计方案,并重点讨论了NDIS和USB设备栈的交互过程,围绕这个过程,使用Windows DDK 2003开发包及VC开发工具,写出了USB网卡驱动程序的初始化和发送接收过程的关键代码。实现了对CY3681评估板的发送接收操作。
关键词:WDM;NDIS;WDM-NDIS;usb类驱动;网卡驱动
1 引言
USB(Universal Serial Bus)即通用串行总线,正在成为各种新型设备的标准总线,USB的传输速度已由USB1.0的12Mbps提高到了USB2.0的480Mbps,同时USB设备具有即插即用的特点,所以它越来越受到业界的重视。
基于PCI总线的网卡一般符合NDIS体系结构,在台式机上应用广泛。随着计算机的微型化发展,要求设备具即插即用的特点,这种传统PCI的网卡已不能适应新的需要,因此开发一种基于USB的网卡便有重大的意义。这种网卡驱动程序遵循NDIS_WDMW体系结构。它结合了NDIS(Network Driver Interface Specification)和WDM(Win32 Driver Model)两种体系结构的特点。本文将探讨NDIS_WDM驱动程序体系结构特点,及USB网卡驱动实现的有关问题。
2 基于WDM-NDIS体系的USB网卡的设计原理
2.1 系统结构
NDIS体系结构独立于硬件,用户可以将不同的协议和不同的网卡绑定进而完成不同的功能。使网络协议更具有通用性[3]。
NDIS支持三种类型的驱动程序,从下往上向看,他们分别是微端口驱动程序、中间层驱动程序和协议驱动程序。传统的PCI网卡驱动程序位于NDIS的第三层,属于微端口驱动程序(Miniport Driver) ,它有两个基本功能:
管理一个网络接口卡NIC(Network Interface Card),包括通过NIC发送和接收数据。与高层驱动程序相接[1]。
但是基于USB的网卡驱动程序和传统PCI网卡驱动最大的差别是NDIS下层的基础不同。PCI网卡驱动的下层是硬件抽象层HAL,USB网卡驱动的下层是USB设备栈。如图1所示:
基于USB的网卡驱动向上要和NDIS体系结构交互,本身属于NDIS的一部分,也要完成微端口驱动程序的收发数据功能。但是它不通过HAL而通过符合WDM模型的USB类驱动程序的接口完成,为此,基于USB网卡驱动必须自己构造USB请求包URB(Usb Requet Block)请求下层USB设备栈完成数据收发功能。这种驱动程序和传统的NDIS的微端口驱动程序有异有同,和WDM下的USB栈中的客户驱动程序也有异同。
2.2 收发数据过程
每当NDIS上层协议或中间驱动请求发送数据时,NDIS_WDM微端口驱动程序的收发函数将被调用,因为它下层是USB设备栈,所以不能直接调用NDIS库里的中断或DMA操作硬件。而是重新在内核的不分页内存中重建一个请求包URB,把上层的请求包转化为URB, 下传给USB设备栈,然后把包标志为pending,等待下层USB设备完成相关的操作后返回,此时,NDIS_WDM驱动程序收到下层的结果后再把原来标志为Pending 的包重新处理,回收在内存中分配的URB空间[3]。返回上层程序。如图2所示:
3 基于WDM-NDIS体系的USB网卡设计的实现
3.1 网卡初始化过程
NDIS_WDM驱动程序完成对驱动程序对象的注册后,系统探测到硬件设备后,将对网卡进行初始化。通常初始化主要完成网卡的注册及发送和接收资源的分配,NDIS_WDM还要探索USB设备及配置USB设备。
3.1.1 注册自定义网卡对象
由于NDIS_WDM Miniport Driver要将上层的协议驱动程序或是中间驱动程序的请求包转交给下层的USB设备栈完成,因此,在自定义的网卡对象中除了有通常网卡对象中的接收链表,发送链表,网卡地址信息,和状态统计信息外,还必须有如下关键结构:
PIRP StatusIndicationIrpNDIS_WDM Miniport Driver在不分页内存中分配的URB请求包,表示当前驱动程序正要处理或正在处理的请求。
DEVICE_OBJECT TargetDeviceObject表示在整个设备栈体系中NDIS_WDM Miniport 设备对象的下层第一个设备对象。当NDIS_WDM 驱动要要完成收
文档评论(0)