通用串行总线USB的驱动程序设计_第1页
通用串行总线USB的驱动程序设计_第2页
通用串行总线USB的驱动程序设计_第3页
通用串行总线USB的驱动程序设计_第4页
通用串行总线USB的驱动程序设计_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、文章编号: 1009-8119 (2005) 04-0040-03基于WD啲USB驱动程序设计赵 娟 1 仲顺安 1 郭 磊 2( 1北京理工大学信息科学技术学院,北京1000812石家庄陆军参谋指挥学院教育技术专业,石家庄050064 )摘 要 简单介绍了 USB的特性。为了介绍 USB驱动,重点阐述了WDM驱动程序的原理和Windows系统内核管理机制和应用程序的区别。并给出了利用Driverstudio 的C+语言编写的例程。关键词USB设备,WDM操作系统,驱动程序The Implementation of the USB Driver Based on WDMZhao Juan Zh

2、ong Shunan Guo LeiAbstrct 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 t

3、he help of the driverstudio is given. Keyword USB device , WDM, OS, Driver1 引言USB 全称是 Universal Serial Bus(通用串行总线),它是由 Compaq Microsoft 、Intel、IBM等七家公司共同开发的,旨在解决日益增加的 PC外设与有限的主板插槽和端口之间的矛 盾而制定的一种串行通信的标准,自1995年在Comdex上亮相以来已广泛地为各PC厂家支持。现在市场上几乎所有的PC机器都配备了 USB接口,其优点是:?速度快。USB有高速和低速两种方式,主模式为高速模式,速率为12Mbps

4、;另外,为了适应一些不需要很大吞吐量和很高实时性的设备,如鼠标等,USB还提供低速方式,速率为 1.5Mbps。?设备安装和配置容易。安装USB设备不必再打开机箱,加减己安装过的设备完全不用关闭计算机。所有 USB设备支持热插拔,系统对其进行自动配置,彻底抛弃了过去的跳线和 拨码开关设置。?易于扩展。通过使用Hub扩展可连接多达 127个外设。标准 USB电缆长度为3m (5m低速)。通过Hub或中继器可以使外设距离达到30m?能够采用总线供电。USB总线提供最大达5V电压和500mA电流。?使用灵活。USB共有4种传输模式:控制传输(control )、同步传输(synchronizatio

5、n)、中断传输( interrupt )、批量传输( bulk ),以适应不同设备的需要。2 WDM驱动程序的介绍WDM ( Windows Driver Model )是微软提出的一种全新的设备驱动程序模型。它是在Win dows NT内核驱动程序模型(Kernel_model Driver Mode 、的基础上发展起来的,增加了 对即插即用(PnF)、高级电源管理(Power Managemen)、Windows管理接口( WM)的支持。 更重要的是, WDM!种通用的驱动模式,提供了包括USB IEEE1394和HID等在内的一系列驱动程序类。在 Windows 98和Windows 2

6、000中,WDM驱动程序均可正常使用。在大多数操作系统中, 应用程序和操作系统本身是分开的: 操作系统代码运行在特权处 理器模式(也称核心态) ,并有权访问系统数据和硬件; 应用程序运行在非特权处理器模式 (也 称用户态)。当用户态程序调用系统服务时, 处理器捕获该调用, 然后把调用的线程切换到核心态。当系统服务完成后,操作系统将线程描述表切换回用户态,允许调用者继续进行。 为防止用户应用程序访问或更改重要的操作系统数据, Windows NT 使用两种处理器访 问模式,用户态和核心态。用户应用程序代码在用户态下运行,OS代码(如系统服务和驱动程序)在核心态下运行。核心态是处理器的一种执行模式

7、,它允许访问所有的系统内存和所 有的CPU旨令。Windows 2000操作系统中有两种基本的驱动程序:用户模式驱动程序和内核 模式驱动程序。USB设备驱动程序使用内核模式,按照内核模式的分层结构,驱动程序分为 高层驱动、中间层驱动、底层驱动3 个部分。底层的主机控制驱动程序直接作用于硬件,中间层驱动处理包括总线类驱动和根集线器驱动,负责总线列举、电源管理等在内的USB事务以及在根集线器相连的下游设备的初始化等任务。这些驱动程序的特权级别高于应用程序软 件。这样,处理器就为操作系统的设计者提供了一个必要的基础,保证了应用程序的不当行 为不会破坏系统的稳定性。Win dowsNT融合了分层操作系

8、统和客户服务器或称为内核OS的特点。对性能影响很大的OS组件在核心态下运行。在核心态下,组件可以和硬件交互,也可以在组件之间交互,并 且不会引起描述表切换和模式转换。例如,内存管理器、高速缓存管理器、对象及安全管理 器、网络协议、文件系统、所有线程和进程管理,都运行在核心态。当然,所有这些组件都 应该受到保护,以避免被有错误代码的应用程序侵扰,而应用程序不能直接访问 OS特权部分的代码和数据(尽管它们可以快速调用其它的内核服务)。这种保护是使 Win dows NT成为既坚固又稳定的应用程序服务器的原因之一。WDM 驱动程序有一个主要的初始化入口点, 即一个称为 DriverEntry 的例程

9、; 它有一个 标准的函数原型,当 WDM区动程序被装入时,内核调用 DriverE ntry 例程。所有对各种IRP 的处理例程都在此入口函数中做出定义。大多数的 WDM设备对象,都是在即插即用管理器调用AddDevice例程入口点被创建的。插入新设备后,当系统找到由安装信息所旨示的驱动程序时,这个例程调用在此之后,一系 列的即插即用IRP被发送到驱动程序,设备驱动程序可进行相应的功能处理。3 USB设备驱动程序的实现USB 系统主要由主控制器 (Host Controller )、USBHub 和 USB外设(Peripherals Node) 组成系统拓扑结构。在应用程序可以与一个USB设

10、备通信之前,主机需要知道设备支持哪些传输类型和终端,主机也必须分配一个地址给设备,主机通过一个被称为枚举的信息交换来 完成这些工作。枚举过程:集线器的一个任务就是检测设备的连接与断开,每个集线器都有 一个中断流程来通知主机报告这些事情。在系统启动的时候,主机查询它的根集线器来了解 有哪些设备已经连接上了,包括其他集线器和连接到这些集线器的设备。在启动后,主机持 续周期性地查询了解是否有设备连接或断开。一旦发现一个新设备, 主机发送一系列的请求给这个设备的集线器, 使这个集线器在主 机和这个设备之间建立一个通信渠道。然后主机试图枚举这个设备,枚举是使得主机的设备 驱动程序能与这个设备通信的最基本

11、的信息交换。这个过程由如下动作组成:分配一个地址 给设备,从设备读取描述数据,分配和载入一个设备驱动程序以及从接收到的数据中选择一 个配置。然后设备就被配置完毕,并且准备好使用它的配置中支持的任何终端来传输数据。主机的枚举是通过给终端 0发送包含标准USB请求的控制传输。所有的USB设备必须支持控制传输、标准 USB请求和终端0。对一个成功的枚举来说,设备必须对每一个请求响 应并返回请求的信息。从用户的角度看,枚举应该是不可见和自动的,除了一些情况下如申 明发现一个新设备和是否成功配置这个新设备的窗口,有时在第一次使用时,用户需要提供 一个右 INF 文件和设备驱动程序的磁盘。在一个USB的外

12、设中,外设的程序代码包含了主机将请求的信息,并且程序代码必须能识别和响应这些信息的请求。在 Windows 不需要编写枚举的程序,因为 Windows 自动处理枚举过程。Windows将查找一个被称为INF文件的特殊文本文件,这个文件会告诉Windows哪个驱动程序适合这个设备。4 USB 驱动实例开发WD驱动程序有两种方法,一种利用微软提供的 98DDK和2000DDK驱区动程序开发包, 另外一种是专用驱动程序开发工具,女口 CompuwareNumega公司的 Driverstudio , KRF,Tech公司的 Win Driver。后者给出驱动程序的框架,并对DDK中操作进行封装,因此

13、减少了开发时问,提高了效率。DriverWorks其实是对DDK函数进行了类的封装。因此用C+语言开发WDM相对来说更加方便。笔者是自主开发USB IP核,例子中主要测试批传输的读入写出。用 Driverworks 生成的驱动程序框架主要包含两个类,本设备驱动程序名为Usbtran ,所以这两个类分别为 Usbtran 和 UsbtranDevice 。为了使读者对 Driverworks 生成的驱动程 序框架有更加清楚的了解,结合驱动程序原理和DDK的做法,先对其做一个剖析。SPec 类继承 Kdriver ,在所有的驱动程序中, 都有一个初始化的函数入口 DriverEntry,该函数完成

14、驱动程序处理例程的登记, 如读写、 退出等。 所有驱动程序的这一工作几乎雷同, 因此 DriverWorks 将其封装成一个类 -Kdriver ,当然其中有设备的添加和管道的初始化。 本 驱动程序有三个管道,其中控制端点 0无须初始化,因为它总能使用。 Bulk 管道的初始化如 下:m_Endpoint1IN.Initialize(m_Lower,0x81,64);m_Endpoint1OUT. Initialize(m_Lower,0x1,64);UsbtranDevice类继承 KpnpDevice,而 KpnpDevice 是从 Kdevice 继承而来。Kdevice主要是以设备为对

15、象,对设备栈进行管理以及 Irp 经过该设备栈时进行一些相应的动作。而 UsbtranDevice 是在KDevice的基础上,处理一些来自于 Pnp管理器的消息以及10管理器的 消息等。其主要处理的消息如下:virtual NTSTATUS 0nStartDevice(KIrp I);virtual NTSTATUS 0nStopDevice(KIrp I);virtual NTSTATUS 0nRemoveDevice(KIrp I);virtual NTSTATUS DefaultPnp(KIrp I);virtual NTSTATUS DefaultPower(KIrp I);virt

16、ual NTSTATUS 0nDevicePowerUp(KIrp I);virtual NTSTATUS 0nDeviceSleep(KIrp I);每一个消息函数, Driverworks 都已经做好了框架,如果需要特别的处理,编程者 可以在其中加入代码。UsbtranDevice有几个特别的成员函数:KUsbLowerDevice m_Lower;KUsbInterface m_Interface;KUsbPipem_Endpoint1In;KUsbPipem_Endpoint10ut;在本例的框架都由 driverstudio 自动添加,需要改动的 bulk 的读写部分的代码如下t E

17、ntering SampleDevice:SerialRead, I E0L;NTSTATUS status = STATUS_SUCCESS;PUCHAR pBuffer= (PUCHAR)I.BufferedReadDest(); 取得返回数据 BUFF 的指针UL0NG dwTotalSize = I.ReadSize(CURRENT); / Requested read size char buff512;int n =512, j = (n % 26);for (int i=0; in; i+, j=(j + 1)%26) buffi = a + j; buffdwTotalSize

18、=0; / 指定串尾 strcpy(char *)pBuffer,buff); / 把给应用程序的数据拷贝给返回 BUFF t The string you where read is buff EOL; /输出调试信息ULONG dwBytesRead = strlen(buff); / Count of bytes readI.Information() = dwBytesRead; / 返回给应用程序的信息的字节 个数I.Status() = status;m_DriverManagedQueue.PnpNextIrp(I);这样,这个驱动程序的代码就完成了,用VC+ 60 进行编译就可到所需的驱动程序。当然,相应的安装程序的 inf 文件需要自己写。该文件如果只装在 Windows98 下还比较简 单,但若在 Windows 2000 下,则要仔细看 DDK 的例子,而且 Windows2000 似乎有一个 Bug, 就是明明已经找到了驱动程序,安装向导却说没找到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论