2022年用DriverStudio开发WDM型的USB设备驱动程序 .pdf

上传人:Q****o 文档编号:26180120 上传时间:2022-07-16 格式:PDF 页数:4 大小:85.38KB
返回 下载 相关 举报
2022年用DriverStudio开发WDM型的USB设备驱动程序 .pdf_第1页
第1页 / 共4页
2022年用DriverStudio开发WDM型的USB设备驱动程序 .pdf_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《2022年用DriverStudio开发WDM型的USB设备驱动程序 .pdf》由会员分享,可在线阅读,更多相关《2022年用DriverStudio开发WDM型的USB设备驱动程序 .pdf(4页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、用 DriverStudio 开发 WDM 型的 USB 设备驱动程序鲜征征 杨皓 (成都电子科技大学 610054) 摘要 文章介绍了USB 和 WDM 驱动程序的基本概念和结构,结合实例阐述了用NuMega 公司的 DriverStudio 工具包开发 Windows 2000 环境下 WDM USB 设备驱动程序的方法,并给出关键例程主要代码。 关键词 :USBWDM 设备驱动程序 DriverStudio1 引言 随着微机技术水平的日益提高,传统的计算接口已经不能满足当前计算机高速发展的需求,计算机业界迫切需要新的通用型、高速总线接口。通用外设接口标准USB 应运而生。 USB,全称为

2、通用串行总线(Universal Serial Bus ) ,它是 Compaq、IBM 等 PC 大厂商联合开发的一种新型的、基于令牌的、高速的串行总线标准。开发者要设计USB设备接口,就必须首先了解 USB 协议,在此基础上有针对性的开发USB 设备驱动程序。2 USB 简介 在众多的PC 机总线中, USB 以其突出的优点独树一帜:使用方便。支持热拔插,不涉及中断请求(IRQ)冲突等问题,能真正做到“即插即用”。传输速率高。目前的USB 2.0协议速度高达480M bps 。易于扩展。通过使用Hub 扩展可连接多达127个外设。使用灵活。 USB 共有种传输模式:控制(control )

3、、同步( Synchronization)、中断(interrupt )、批量(bulk),以适应不同设备的需要。独立供电。正由于上述优点,开发USB 接口的设备已成为一种发展趋势。一个完整的 USB系统包括主机系统和USB 设备。所有的传输事务都是由主机发起的。一个主机系统又可以分为以下几个层次结构,如图1 所示: 主机应用软件USB 系统USB 总线接口接口功能USB 逻辑设备USB 总线接口USB 设备物理信息流虚拟(逻辑)信息流数据管道控制管道USB 接口电缆端点 图 1 USB 互连通信模型 USB 总线接口包括USB主控制器和根集线器,其中USB 主控制器负责处理主机与设备之间电气

4、和协议层的互连,根集线器提供 USB 设备连接点。USB 系统使用 USB 主控制器来管理主机和USB 设备之间的数据传输, 另外它也负责管理USB资源,如带宽等。应用 软件不能直接访问USB 设备硬件,而通过USB 系统和 USB 总线接口与USB 设备进行交互。 USB 设备包含一些向主机软件提供一系列USB 设备的特征和能力的信息的设备描述符,用来配置设备和定位USB 设备驱动程序。这些信息确保了主机以正确的方式访问设备。通常,一个设备有一个或多个配置(Configuration )来控制其行为。配置是接口( Interface)的集合,接口指出软件应该如何访问硬件。接口又是端点(end

5、point)的集合,每一个与USB交换数据的硬件就为端点, 它是作为通信管道的一个终点。图 1 显示了一个多层次结构的通信模型,它表明了端点和管道所扮演的角色。 3 WDM 驱动程序和USB 驱动程序的分层结构 设备驱动程序实际上是指一系列控制硬件设备的函数,是操作系统中控制和连接硬件的关键模块。它提供连接到计算机的硬件设备的软件接口。 3.1 WDM 驱动程序介绍WDM(Win32 Driver Model)是 Microsoft 公司力推的一种符合Windows2k/XP 下的内核模式驱动程序的分层体系结构的驱动程序模式。 它源于 Windows NT 的分层 32 位设备驱动程序模型,

6、它支持更多的特性, 如即插即用( PnP , Plug and Play ) 、电源管理( PM ,Power Management ) 、Windows 管理诊断( WMI ,Windows Management Instrumentation )和 NT 事件。它为 Windows 操作系统的设备驱动程序提供了统一的框架,在Windows 平台上, WDM 将成为主流的驱动模式。WDM 引入了功能设备对象FDO(Function Device Object) 与物理设备对象PDO(Physical Device Object) 两个新类来描述硬件,一个 PDO 对应一个真实的硬件。一个硬件

7、只允许有一个PDO,却可以拥有多个FDO,在驱动程序中直接操作的不是硬件而是相应的PDO 和 FDO。 WDM 是通过一个128 位的全局唯一标识符(GUID)实现驱动程序的识别。应用程序与WDM 驱动程序通信时,应用程序将每用户请求形成I/O 请求包(IRP)发送到驱动程序。驱动程序识别出IRP 请求后指挥硬件执行相应操作。 3.2 开发 WDM 驱动程序的方法名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - 目前开发 WDM

8、驱动程序的方法有三种: 使用 Microsoft 的 Windows2000 DDK工具开发。使用 KRFTech 公司的 WinDriver 。使用 NuMega 公司的 DriverStudio 。 3.3 WDM 型的 USB 驱动程序结构 对于 USB 设备来说,其WDM 驱动程序分为USB 底层(总线)驱动程序和USB 功能(设备)驱动程序。 USB 驱动程序符合 Windows 2000 下的内核模式驱动程序的分层体系结构,如图2 所示: Win32应用程序USB 设备驱动程序USB 主机控制器USB 总线驱动程序USB 硬件设备I/O 管理器用户模式内核模式I/O 请求包( IR

9、P)软件硬件图 2 WDM型的 USB 驱动程序体系结构 USB 底层驱动程序由操作系统提供,负责与实际的硬件打交道,实现烦琐的底层通信。USB 功能驱动程序由设备开发者编写,不对实际的硬件进行操作,而是通过向USB 底层驱动程序发送包含URB(USB Request Block ,请求块)的IRP,来实现对 USB 设备信息的发送和接收。采用这种分层驱动程序的设计方法有两个优点:(1) 多个 USB 设备可以通过USB 底层驱动程序来协调它们的工作。(2) 编写分层驱动程序较之编写单一驱动程序相对简单,且可以节省内存和资源,不易出错。USB 驱动程序工作简述如下:当应用程序想对USB 设备进

10、行 I/O 操作,它需调用Windows API函数, I/O 管理器将此请求构造成一个合适的I/O 请求包( IRP)并把它传递给USB 功能驱动程序。USB 功能驱动程序接收到这个IRP 后,根据IPR 中包含的具体操作代码构造相应USB请求块( URB) ,并把此 URB 放到一个新的IRP 中,然后把它传递给USB 底层驱动程序。USB底层驱动程序根据IRP 中所含的 URB 执行相应的操作, 并把操作的结果返回给USB 功能驱动程序。 USB 功能驱动程序接收到此返回的IRP 后,将操作结果通过IRP 返还给 I/O 管理器, 最后 I/O 管理器将此IRP 操作结果传回给应用程序,

11、至此应用程序对设备的一次I/O 操作完成。 4 用 Driver Studio 工具包开发WDM 型的 USB 设备驱动程序 前文所提及的WDM 驱动程序开发方法,笔者都曾尝试过。个人认为用DriverStudio 开发工具包来开发USB 驱动程序行之有效。其中的Driver Wizard 是创建 WDM 驱动程序框架的一个很好的工具,后文将介绍用它来创建USB 设备驱动程序的基本框架。 4.1 搭建开发平台 由于利用 DriverStudio 开发 WDM 驱动程序在搭建开发平台的过程中对软件的安装顺序要求颇高,在开发过程中我也曾因为安装顺序的颠倒而失败。在实践中总结了以下的安装步骤,有必要

12、在此作以介绍。 在已装了 Windows 2000 操作系统的机子上安装 Microsoft Visual C+6.0 。 安装 Win2000 DDK 。 安装 NuMega DriverStudio 2.0 ( or 2.6 ) 驱动程序开发工具包。它包含DriverWorks( 用于开发内核模式WDM 驱动程序 ) 、SoftICE( 用于调试 WDM 驱动程序 )等开发工具。由于DriverWorks 所用的类库是对 DDK 函数的封装,必须在 VC 中编译,创建自己的库文件。设置 DDK 路径。 4.2 利用 DriverStudio 的 DriverWorks 生成 USB 设备驱

13、动程序框架 驱动程序开发平台搭建成功后,我们可利用驱动程序生成向导Driver Wizard ,根据硬件设置较为容易的生成USB 设备驱动程序的大体框架。本人的设置如下:选择WDM 的驱动程序类型和Windows 2000 运行平台。选择USB 总线类型,系统选择的 USB 芯片是 Philip 公司的 ISP1581,填写它的 VID (供应商 ID )和 PID(设备 ID) ,这些信息由芯片的供应商提供。增加端点1 和端点 2,它们分别具有IN 和 OUT 属性。 根据需要选择对设备的操作有:Read、Write 、Device Control和 CleanUp。选择给端点2 产生 BU

14、LK Read和 Write 的代码, 向导会自动产生一套对端点2 进行读、写的代码。设置驱动程序的属性,采用WDM 接口;在选取读写方式时应遵循一条原则:需要快速传送大量数据时,用 Direct I/O ,反之用 Buffer I/O ,这里选择 BufferI/O ; 由于无特殊的电源需求, 故选用系统默认的Manage Power For This Device 。 增加 IOCTL接口,在其生成的代码框架中加入自己的操作,以实现一个完整的USB 设备驱动程序。最后就生成了一个WDM 型的 USB设备驱动程序框架和一个测试该驱动程序的测试程序大体框架。然后在其中添加需要的功能代码。 4.

15、3 USB 设备驱动程序中的关键例程代码实现 下面以我们的驱动程序为例,介绍 USB 驱动程序开发中的几个关键例程的实现。本驱动程序的主要功能是控制USB 设备上 LED 灯通断并且对设备进行读写。 4.3.1 初始化例程 DriverEntry () 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 4 页 - - - - - - - - - 设备驱动程序与应用程序不同,它没有main()或 WinMain ()函数,而是有一个名为DriverEntry ()的入口函数,

16、它通常完成一些初始化工作。当设备驱动程序被加载时,操作系统调用这个入口。在使用DriverWizard 创建的驱动程序基本框架中, DriverEntry ()函数已经写好了,无需添写代码。在该例程中,驱动程序要向操作系统登记并注册一些消息处理器,通过 RegistryPath 来找到位于注册表中的驱动程序参数,当驱动程序正确安装后,在注册表KEY_LOCAL_MACHINE SYSTEM CurrentControlSet Service 下可以找到MyUSB 项。而用 DDK 编写该入口函数还需初始化Dispatch(分派) 例程入口。 4.3.2 创建设备例程 AddDevice ()

17、大多数的 PDO 都是在 PnP 管理器调用该程序入口点时被创建的。插入新设备后,系统启动时,总线枚举器会发现总线上的所有设备,会自动寻找并安装设备的驱动程序,并由驱动程序中的处理 PnP 功能模块自动处理 AddDevice() 例程及其他 PnP消息。此例程使用IoCreateDevice() 函数创建设备对象,再使用 IoRegisterDeviceInterface() 函数将设备组成为一个特定的设备接口,然后使用IoAttachDeviceToDeviceStack() 函数关联设备栈。 NTSTATUS MyUSBDevice:AddDevice( PDEVICE_OBJECT P

18、do ) / 产生一个 DDK 中 KDevice 类新的设备对象MyUSBDevice *pDevice = new ( static cast( KUnitizedName(L “MyUSBDevice ” ,m_Unit) ), / 设备名 FILE_DEVICE_UNKNOWN, / 设备类型 NULL,/ 指针链接名0, / 设备特征标志位 DO_BUFFERED_IO| DO_POWER_PAGABLE) ;/ I/O传输方式MyUSBDevice(Pdo, m_Unit) ;if ( pDevice = NULL ) return STATUS_INSUFFICIENT_RESO

19、URCES ; NTSTATUS status = devices - ConstructorStatus();if ( !NT_SUCCESS(status) ) / 不成功,返回错误状态并删除指针 delete pDevice; else / 如果成功,向系统报考设备的电源状态变化为PowerDeviceD0 m_Unit+ ;pDevice - ReportNewDevicePowerState( PowerDeviceD0 ) ; return status; 4.3.3 LED 控制处理例程 MyUSB_IOCTL_LED_Handler()该例程是实现本驱动程序功能的关键例程,它是

20、用来控制设备上的LED 灯通断,主要利用USB Vendor Request 来向设备传送。其中, request=1 的时候表示让LED亮, request=0 的时候让 LED 灭。它是通过DeviceControl 由上层应用程序传下来。实现代码如下: NTSTATUS MyUSBDevice:MyUSB_IOCTL_LED_Handler(KIrp I) NTSTATUS status = STATUS_INV ALID_PARAMETER; / 检查输入参数是否正确,如果不正确,返回STATUS_INVALID_PARAMETER if(I.IoctlOutputBufferSize

21、() | !I.IoctlBuffer() |(I.IoctlInputBufferSize() != sizeof(UCHAR) return status; / 处理 MyUSB_IOCTL_LED_ON请求PURB pUrb = m_Lower.BuildVendorRequest( NULL, / 传输缓冲区 0, / 传输缓冲区大小 0, / 请求保留位 (UCHAR)(*(PUCHAR)I.IoctlBuffer(), / 请求 1LED_ON ,0=LED_OFF 0 ); / 值 / 向下传送 URB status = m_Lower.SubmitUrb(pUrb, NULL,

22、 NULL, 5000L); / 若请求在此处理,设置I.Information指示多少数据拷贝回用户 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - - - I.Information () 0;I.Status() status ;return status; 4.3.4 访问硬件例程 DeviceControl() 上层应用软件程序就是通过此例程来将IRP 传到下层。 NTSTATUS MyUSBDevice:DeviceCont

23、rol(KIrp I) NTSTATUS status; switch (I.IoctlCode() case MyUSB_IOCTL_LED: status = MyUSB_IOCTL_LED_Handler(I); break; default: / 未被声明的I/O 控制请求 status = STATUS_INV ALID_PARAMETER; break; 限于篇幅,这里仅介绍本驱动程序中的部分例程实现代码。编写完驱动程序后,首先在Visual C+ 中编译通过,然后连接硬件,用DriverStudio 工具包中的SoftICE 调试器调试该驱动程序,并且修改编译DriverStud

24、io 产生的该驱动程序的测试程序,就通过命令行来测试我们的驱动程序。最后对于LED 的控制,我们可以直观的在设备上看到。 5 结束语 USB 技术的不断发展和完善,已经使其逐渐成为先进总线接口技术的标志和方向,如今USB OTG 标准已经发布,那么 USB 的应用领域也将越发的广泛。开发一些特定功能的USB 接口并设计其设备驱动程序也将成为应用USB 技术的关键。通过对 USB 的学习和 Windows 2000 下的 WDM 驱动程序的研究,本文已经给出了编写WDM 型 USB 设备驱动程序的一般方法,读者可以在实际应用中逐步提高对USB 和驱动程序的认识,取得事半功倍的效果。 参 考 文 献1 周立功 等编著, PDIUSBD12 USB 固件编程与驱动开发 ,北京航空航天大学出版社,2003,2 2武安河 邰銘 于洪涛 编著, Windows2000/XP WDM设备驱动程序开发 ,电子工业出版社, 2003,4 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com