通用串行总线USB的驱动程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文章编号:1009-8119(2005)04-0040-03
基于WDM的USB驱动程序设计
赵娟1 仲顺安1 郭磊2
(1.北京理工大学信息科学技术学院,北京 100081
2.石家庄陆军参谋指挥学院教育技术专业,石家庄 050064)
摘要简单介绍了USB的特性。为了介绍USB驱动,重点阐述了WDM驱动程序的原理和Windows系统内核管理机制和应用程序的区别。并给出了利用Driverstudio的C++语言编写的例程。
关键词 USB设备,WDM,操作系统,驱动程序
The Implementation of the USB Driver Based on WDM
Zhao Juan Zhong Shun'an Guo Lei
Abstrct The attribute of the USB is descripted in the paper. For developing usb driver, the mechanism of kenerl management and the privilege level of applications in window2000 are introduced in the paper. An example of the driver handling USB transfer programmed by using C++ with the help of the driverstudio is given. Keyword USB device,WDM,OS,Driver
1 引言
USB,全称是Universal Serial Bus(通用串行总线),它是由Compaq、Microsoft、Intel、IBM等七家公司共同开发的,旨在解决日益增加的PC外设与有限的主板插槽和端口之间的矛盾而制定的一种串行通信的标准,自1995年在Comdex上亮相以来已广泛地为各PC厂家支持。现在市场上几乎所有的PC机器都配备了USB接口,其优点是:
? 速度快。USB有高速和低速两种方式,主模式为高速模式,速率为12Mbps;另外,为了适应一些不需要很大吞吐量和很高实时性的设备,如鼠标等,USB还提供低速方式,速率为1.5Mbps。
? 设备安装和配置容易。安装USB设备不必再打开机箱,加减己安装过的设备完全不用关闭计算机。所有USB设备支持热插拔,系统对其进行自动配置,彻底抛弃了过去的跳线和拨码开关设置。
? 易于扩展。通过使用Hub扩展可连接多达127个外设。标准USB电缆长度为3m(5m 低速)。通过Hub或中继器可以使外设距离达到30m。
? 能够采用总线供电。USB总线提供最大达5V电压和500mA电流。
? 使用灵活。USB共有4种传输模式:控制传输(control)、同步传输(synchronization)、中断传输(interrupt)、批量传输(bulk),以适应不同设备的需要。
2 WDM驱动程序的介绍
WDM(Windows Driver Model)是微软提出的一种全新的设备驱动程序模型。它是在Windows NT内核驱动程序模型(Kernel_model Driver Mode)的基础上发展起来的,增加了对即插即用(PnP)、高级电源管理(Power Management)、Windows管理接口(WMI)的支持。更重要的是,WDM是一种通用的驱动模式,提供了包括USB、IEEE1394和HID等在内的一系列驱动程序类。在 Windows 98和 Windows 2000中, WDM驱动程序均可正常使用。
在大多数操作系统中,应用程序和操作系统本身是分开的:操作系统代码运行在特权处理器模式(也称核心态),并有权访问系统数据和硬件;应用程序运行在非特权处理器模式(也称用户态)。当用户态程序调用系统服务时,处理器捕获该调用,然后把调用的线程切换到核
心态。当系统服务完成后,操作系统将线程描述表切换回用户态,允许调用者继续进行。
为防止用户应用程序访问或更改重要的操作系统数据,Windows NT使用两种处理器访问模式,用户态和核心态。用户应用程序代码在用户态下运行,OS代码(如系统服务和驱动程序)在核心态下运行。核心态是处理器的一种执行模式,它允许访问所有的系统内存和所有的CPU指令。Windows 2000操作系统中有两种基本的驱动程序:用户模式驱动程序和内核模式驱动程序。USB设备驱动程序使用内核模式,按照内核模式的分层结构,驱动程序分为高层驱动、中间层驱动、底层驱动3个部分。底层的主机控制驱动程序直接作用于硬件,中间层驱动处理包括总线类驱动和根集线器驱动,负责总线列举、电源管理等在内的USB事务以及在根集线器相连的下游设备的初始化等任务。这些驱动程序的特权级别高于应用程序软件。这样,处理器就为操作系统的设计者提供了一个必要的基础,保证了应用程序的不当行为不会破坏系统的稳定性。
Windows NT融合了分层操作系统和客户服务器或称为内核OS的特点。对性能影响很大的OS组件在核心态下运行。在核心态下,组件可以和硬件交互,也可以在组件之间交互,并且不会引起描述表切换和模式转换。例如,内存管理器、高速缓存管理器、对象及安全管理器、网络协议、文件系统、所有线程和进程管理,都运行在核心态。当然,所有这些组件都应该受到保护,以避免被有错误代码的应用程序侵扰,而应用程序不能直接访问OS特权部分的代码和数据(尽管它们可以快速调用其它的内核服务)。这种保护是使Windows NT成为既坚固又稳定的应用程序服务器的原因之一。
WDM驱动程序有一个主要的初始化入口点,即一个称为DriverEntry的例程;它有一个标准的函数原型,当WDM驱动程序被装入时,内核调用DriverEntry例程。所有对各种IRP 的处理例程都在此入口函数中做出定义。
大多数的WDM设备对象,都是在即插即用管理器调用AddDevice例程入口点被创建的。插入新设备后,当系统找到由安装信息所指示的驱动程序时,这个例程调用在此之后,一系列的即插即用IRP被发送到驱动程序,设备驱动程序可进行相应的功能处理。
3 USB设备驱动程序的实现
USB系统主要由主控制器(Host Controller)、USB Hub和USB外设(Peripherals Node)组成系统拓扑结构。在应用程序可以与一个USB设备通信之前,主机需要知道设备支持哪些传输类型和终端,主机也必须分配一个地址给设备,主机通过一个被称为枚举的信息交换来完成这些工作。枚举过程:集线器的一个任务就是检测设备的连接与断开,每个集线器都有一个中断流程来通知主机报告这些事情。在系统启动的时候,主机查询它的根集线器来了解有哪些设备已经连接上了,包括其他集线器和连接到这些集线器的设备。在启动后,主机持续周期性地查询了解是否有设备连接或断开。
一旦发现一个新设备,主机发送一系列的请求给这个设备的集线器,使这个集线器在主机和这个设备之间建立一个通信渠道。然后主机试图枚举这个设备,枚举是使得主机的设备驱动程序能与这个设备通信的最基本的信息交换。这个过程由如下动作组成:分配一个地址给设备,从设备读取描述数据,分配和载入一个设备驱动程序以及从接收到的数据中选择一个配置。然后设备就被配置完毕,并且准备好使用它的配置中支持的任何终端来传输数据。
主机的枚举是通过给终端0发送包含标准USB请求的控制传输。所有的 USB设备必须支持控制传输、标准USB请求和终端0。对一个成功的枚举来说,设备必须对每一个请求响应并返回请求的信息。从用户的角度看,枚举应该是不可见和自动的,除了一些情况下如申明发现一个新设备和是否成功配置这个新设备的窗口,有时在第一次使用时,用户需要提供一个右INF文件和设备驱动程序的磁盘。
在一个USB的外设中,外设的程序代码包含了主机将请求的信息,并且程序代码必须能