欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:26180120       资源大小:85.38KB        全文页数:4页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    用 DriverStudio 开发 WDM 型的 USB 设备驱动程序鲜征征 杨皓 (成都电子科技大学 610054) 摘要 文章介绍了USB 和 WDM 驱动程序的基本概念和结构,结合实例阐述了用NuMega 公司的 DriverStudio 工具包开发 Windows 2000 环境下 WDM USB 设备驱动程序的方法,并给出关键例程主要代码。 关键词 :USBWDM 设备驱动程序 DriverStudio1 引言 随着微机技术水平的日益提高,传统的计算接口已经不能满足当前计算机高速发展的需求,计算机业界迫切需要新的通用型、高速总线接口。通用外设接口标准USB 应运而生。 USB,全称为通用串行总线(Universal Serial Bus ) ,它是 Compaq、IBM 等 PC 大厂商联合开发的一种新型的、基于令牌的、高速的串行总线标准。开发者要设计USB设备接口,就必须首先了解 USB 协议,在此基础上有针对性的开发USB 设备驱动程序。2 USB 简介 在众多的PC 机总线中, USB 以其突出的优点独树一帜:使用方便。支持热拔插,不涉及中断请求(IRQ)冲突等问题,能真正做到“即插即用”。传输速率高。目前的USB 2.0协议速度高达480M bps 。易于扩展。通过使用Hub 扩展可连接多达127个外设。使用灵活。 USB 共有种传输模式:控制(control )、同步( Synchronization)、中断(interrupt )、批量(bulk),以适应不同设备的需要。独立供电。正由于上述优点,开发USB 接口的设备已成为一种发展趋势。一个完整的 USB系统包括主机系统和USB 设备。所有的传输事务都是由主机发起的。一个主机系统又可以分为以下几个层次结构,如图1 所示: 主机应用软件USB 系统USB 总线接口接口功能USB 逻辑设备USB 总线接口USB 设备物理信息流虚拟(逻辑)信息流数据管道控制管道USB 接口电缆端点 图 1 USB 互连通信模型 USB 总线接口包括USB主控制器和根集线器,其中USB 主控制器负责处理主机与设备之间电气和协议层的互连,根集线器提供 USB 设备连接点。USB 系统使用 USB 主控制器来管理主机和USB 设备之间的数据传输, 另外它也负责管理USB资源,如带宽等。应用 软件不能直接访问USB 设备硬件,而通过USB 系统和 USB 总线接口与USB 设备进行交互。 USB 设备包含一些向主机软件提供一系列USB 设备的特征和能力的信息的设备描述符,用来配置设备和定位USB 设备驱动程序。这些信息确保了主机以正确的方式访问设备。通常,一个设备有一个或多个配置(Configuration )来控制其行为。配置是接口( Interface)的集合,接口指出软件应该如何访问硬件。接口又是端点(endpoint)的集合,每一个与USB交换数据的硬件就为端点, 它是作为通信管道的一个终点。图 1 显示了一个多层次结构的通信模型,它表明了端点和管道所扮演的角色。 3 WDM 驱动程序和USB 驱动程序的分层结构 设备驱动程序实际上是指一系列控制硬件设备的函数,是操作系统中控制和连接硬件的关键模块。它提供连接到计算机的硬件设备的软件接口。 3.1 WDM 驱动程序介绍WDM(Win32 Driver Model)是 Microsoft 公司力推的一种符合Windows2k/XP 下的内核模式驱动程序的分层体系结构的驱动程序模式。 它源于 Windows NT 的分层 32 位设备驱动程序模型, 它支持更多的特性, 如即插即用( 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 对应一个真实的硬件。一个硬件只允许有一个PDO,却可以拥有多个FDO,在驱动程序中直接操作的不是硬件而是相应的PDO 和 FDO。 WDM 是通过一个128 位的全局唯一标识符(GUID)实现驱动程序的识别。应用程序与WDM 驱动程序通信时,应用程序将每用户请求形成I/O 请求包(IRP)发送到驱动程序。驱动程序识别出IRP 请求后指挥硬件执行相应操作。 3.2 开发 WDM 驱动程序的方法名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - 目前开发 WDM 驱动程序的方法有三种: 使用 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 请求包( IRP)软件硬件图 2 WDM型的 USB 驱动程序体系结构 USB 底层驱动程序由操作系统提供,负责与实际的硬件打交道,实现烦琐的底层通信。USB 功能驱动程序由设备开发者编写,不对实际的硬件进行操作,而是通过向USB 底层驱动程序发送包含URB(USB Request Block ,请求块)的IRP,来实现对 USB 设备信息的发送和接收。采用这种分层驱动程序的设计方法有两个优点:(1) 多个 USB 设备可以通过USB 底层驱动程序来协调它们的工作。(2) 编写分层驱动程序较之编写单一驱动程序相对简单,且可以节省内存和资源,不易出错。USB 驱动程序工作简述如下:当应用程序想对USB 设备进行 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 操作结果传回给应用程序,至此应用程序对设备的一次I/O 操作完成。 4 用 Driver Studio 工具包开发WDM 型的 USB 设备驱动程序 前文所提及的WDM 驱动程序开发方法,笔者都曾尝试过。个人认为用DriverStudio 开发工具包来开发USB 驱动程序行之有效。其中的Driver Wizard 是创建 WDM 驱动程序框架的一个很好的工具,后文将介绍用它来创建USB 设备驱动程序的基本框架。 4.1 搭建开发平台 由于利用 DriverStudio 开发 WDM 驱动程序在搭建开发平台的过程中对软件的安装顺序要求颇高,在开发过程中我也曾因为安装顺序的颠倒而失败。在实践中总结了以下的安装步骤,有必要在此作以介绍。 在已装了 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 设备驱动程序框架 驱动程序开发平台搭建成功后,我们可利用驱动程序生成向导Driver Wizard ,根据硬件设置较为容易的生成USB 设备驱动程序的大体框架。本人的设置如下:选择WDM 的驱动程序类型和Windows 2000 运行平台。选择USB 总线类型,系统选择的 USB 芯片是 Philip 公司的 ISP1581,填写它的 VID (供应商 ID )和 PID(设备 ID) ,这些信息由芯片的供应商提供。增加端点1 和端点 2,它们分别具有IN 和 OUT 属性。 根据需要选择对设备的操作有:Read、Write 、Device Control和 CleanUp。选择给端点2 产生 BULK Read和 Write 的代码, 向导会自动产生一套对端点2 进行读、写的代码。设置驱动程序的属性,采用WDM 接口;在选取读写方式时应遵循一条原则:需要快速传送大量数据时,用 Direct I/O ,反之用 Buffer I/O ,这里选择 BufferI/O ; 由于无特殊的电源需求, 故选用系统默认的Manage Power For This Device 。 增加 IOCTL接口,在其生成的代码框架中加入自己的操作,以实现一个完整的USB 设备驱动程序。最后就生成了一个WDM 型的 USB设备驱动程序框架和一个测试该驱动程序的测试程序大体框架。然后在其中添加需要的功能代码。 4.3 USB 设备驱动程序中的关键例程代码实现 下面以我们的驱动程序为例,介绍 USB 驱动程序开发中的几个关键例程的实现。本驱动程序的主要功能是控制USB 设备上 LED 灯通断并且对设备进行读写。 4.3.1 初始化例程 DriverEntry () 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 4 页 - - - - - - - - - 设备驱动程序与应用程序不同,它没有main()或 WinMain ()函数,而是有一个名为DriverEntry ()的入口函数,它通常完成一些初始化工作。当设备驱动程序被加载时,操作系统调用这个入口。在使用DriverWizard 创建的驱动程序基本框架中, DriverEntry ()函数已经写好了,无需添写代码。在该例程中,驱动程序要向操作系统登记并注册一些消息处理器,通过 RegistryPath 来找到位于注册表中的驱动程序参数,当驱动程序正确安装后,在注册表KEY_LOCAL_MACHINE SYSTEM CurrentControlSet Service 下可以找到MyUSB 项。而用 DDK 编写该入口函数还需初始化Dispatch(分派) 例程入口。 4.3.2 创建设备例程 AddDevice () 大多数的 PDO 都是在 PnP 管理器调用该程序入口点时被创建的。插入新设备后,系统启动时,总线枚举器会发现总线上的所有设备,会自动寻找并安装设备的驱动程序,并由驱动程序中的处理 PnP 功能模块自动处理 AddDevice() 例程及其他 PnP消息。此例程使用IoCreateDevice() 函数创建设备对象,再使用 IoRegisterDeviceInterface() 函数将设备组成为一个特定的设备接口,然后使用IoAttachDeviceToDeviceStack() 函数关联设备栈。 NTSTATUS MyUSBDevice:AddDevice( PDEVICE_OBJECT Pdo ) / 产生一个 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_RESOURCES ; 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()该例程是实现本驱动程序功能的关键例程,它是用来控制设备上的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() | !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, NULL, 5000L); / 若请求在此处理,设置I.Information指示多少数据拷贝回用户 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - - - I.Information () 0;I.Status() status ;return status; 4.3.4 访问硬件例程 DeviceControl() 上层应用软件程序就是通过此例程来将IRP 传到下层。 NTSTATUS MyUSBDevice:DeviceControl(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 调试器调试该驱动程序,并且修改编译DriverStudio 产生的该驱动程序的测试程序,就通过命令行来测试我们的驱动程序。最后对于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 页 - - - - - - - - -

    注意事项

    本文(2022年用DriverStudio开发WDM型的USB设备驱动程序 .pdf)为本站会员(Q****o)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档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  

    收起
    展开