- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《USB设备驱动程序》.doc
USB设备驱动程序 (1) 驱动程序的基本概念 设备驱动程序是一个包含了许多操作系统可调用例程的软件容器,它可以使得应用程序访问硬件设备,这些例程可以使硬件设备执行相应的动作。也就是处理硬件设备连接到 CPU 通信的细节的代码。硬件设备可能是任何连接到计算机的电子电路。一个设备驱动应使得应用程序远离细节,使应用程序不必知道物理连接、信号和与一个设备通信需要的协议等。应用程序是用户运行的程序,包括支持自定义硬件的特殊用途的应用程序。设备驱动可以保证程序代码只通过外设句柄访问外设或者端口。应用程序不需要精确监视和控制外设需要的交换信号 ( 忙、应答等 ) 。设备驱动通过在应用层和硬件专用层专用代码之间的转化来完成它的任务。应用层代码一般使用一套操作系统支持的函数。硬件代码则处理那些访问外设电路的必要协议,包括检测状态信号和在合适的时间切换控制信号。 (2)WDM 设备驱动简介 在 Windows98 下运行的代码以以下两种模式之一运行 : 用户模式和内核模式。在访问内存和其它系统资源时,每种有不同的允许优先级。应用程序必须运行在用户模式下,其它很多驱动运行在内核模式下。 在用户模式下, Windows 限制应用程序访问内存和其他系统资源, Windows 不允许用户访问设定为被保护的内存区域。这使得 PC 机可同时运行多个应用程序,不会互相干扰从理论上讲,即使一个应用程序崩溃了,其它应用程序也不会受到影响。在内核模式下,代码不限制访问系统资源,包括执行内存管理指令和控制访问 I/O 端口。 每个应用程序和驱动使用自己的语言与操作系统通信。应用程序使用 WIN32 API 函数。驱动通信使用称作 U0 请求包 (IRP) 的结构。 Windows 定义了一套驱动可以使用的 IRP 。每个 IRP 请求或执行一个单个的输入或输出动作。 USB 设备的设备驱动使用 IRP 传递总线通信,处理 USB 通信。总线驱动按顺序使用 IRP 传递临近总线的通信。在一系列通信中,最终的总线直接驱动硬件。总线驱动被包括在 Windows 系统里,且不需要我们编程。 当用户模式程序需要读取设备数据时,它就调用 Win32 API 函数, Win32 子系统模块 ( 如 KERNEL32.DLL) 通过调用平台相关的系统服务接口实现该 API, 而平台相关的系统服务将调用内核模式支持例程。调用首先到达系统 DLL 中的一个入口点,然后这个用户模式的函数接着调用系统服务接口,最后由系统服务接口调用内核模式中的服务例程 [39] 。服务例程运行在内核模式中,为应用程序请求提供服务,并以某种方式与设备交互。它们首先检查传递给它们的参数以保护系统安全或防止用户模式程序非法存取数据,然后创建一个 IRP 的数据结构,并把这个数据结构送到某个驱动程序的入口点。用户模式调用者得到一个返回值,表明该 IRP 代表的操作还没有完成。用户模式程序也许会继续其它工作然后等待操作完成,或者立即进入等待状态。不论哪种方式,设备驱动程序对该 IRP 的处理都与应用程序无关。执行 IRP 的设备驱动程序最后可能会访问硬件。驱动程序完成一个 Il0 操作后,通过调用一个特殊的内核模式服务例程来完成该 IRP 。完成操作是处理 IRP 的最后动作,它使等待的应用程序恢复运行。 (3) USB 设备驱动的总线驱动 与传统 PC 总线 ( 如 PCI 总线 ) 设备的驱动程序相比, USB 设备驱动程序从不直接与硬件对话。相反,它仅靠创建 URB(USB request blocks) ,并把 URB 提交到总线驱动程序就可完成硬件操作。 系统中的 USB 总线驱动程序完成许多的工作。实际上对于一些 HID( 人机接口 ) 的 USB 设备,象键盘,鼠标和游戏操纵杆之类的设备可以自动的被系统识别并且支持。而除此之外的设备就需要自己写一个驱动程序来完成硬件和软件之间的联系。在核心模式 (kernel mode) 下,驱动程序用内部 I/O 控制 (IOCTL) 来组织和操作一些由其他部分发过来的要求和命令。而 IOCTL 又是通过 URB 来实现数据的传送的。 可以把 USBD.SYS 看作是接受 URB 的实体,向 USBD 的调用被转化为带有主功能代码为 IRPwe MJee INTERNAL DEVICE_ CONTROL 的 IRP 。然后 USED 再调度总线时间,发出 URB 中指定的操作。 为了创建一个 URB ,首先应该为 URB 分配内存,然后调用初始化例程把 URB 结构中的各个域填入请求要求的内容,例如,当为响应 IRP START DEVICE 请求而配置设备时,首要的任务就是读取该设备的设备描述符。还可以在系统堆上为 URB 动态地分配内存。
文档评论(0)