Windows_XP_环境下USB_设备驱动程序的开发
设备驱动程序

驱动程序驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备通信的特殊程序。
相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。
因此,驱动程序被比作“硬件的灵魂”、“硬件的主宰”、和“硬件和系统之间的桥梁”等。
中文名驱动程序外文名Device Driver全称设备驱动程序性质可使计算机和设备通信的特殊程序目录1定义2作用3界定▪正式版▪认证版▪第三方▪修改版▪测试版4驱动程序的开发▪微软平台▪Unix平台5安装顺序6inf文件1定义驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。
惠普显卡驱动安装正因为这个原因,驱动程序在系统中的所占的地位十分重要,一般当操作系统安装完毕后,首要的便是安装硬件设备的驱动程序。
不过,大多数情况下,我们并不需要安装所有硬件设备的驱动程序,例如硬盘、显示器、光驱等就不需要安装驱动程序,而显卡、声卡、扫描仪、摄像头、Modem等就需要安装驱动程序。
另外,不同版本的操作系统对硬件设备的支持也是不同的,一般情况下版本越高所支持的硬件设备也越多,例如笔者使用了Windows XP,装好系统后一个驱动程序也不用安装。
设备驱动程序用来将硬件本身的功能告诉操作系统,完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。
当操作系统需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。
所以简单的说,驱动程序提供了硬件到操作系统的一个接口以及协调二者之间的关系,而因为驱动程序有如此重要的作用,所以人们都称“驱动程序是硬件的灵魂”、“硬件的主宰”,同时驱动程序也被形象的称为“硬件和系统之间的桥梁”。
windows下虚拟串口驱动开发

现在介绍在windows XP下开发虚拟串口的方法。
可以开发一个虚拟串口,将读写请求传递给USB驱动,这样就可以利用现成的串口调试工具向USB设备读取了。
1、DDK串口开发框架DDK对串口驱动提供了专门接口。
只要编写的驱动满足这些接口,并按照串口标准的命名方法,不管是真实的串口设备,还是虚拟设备,Windows操作系统都会认为这个设备是一个标准的串口设备。
用标准的串口调试工具都可以与这个设备进行通信。
1、1 串口驱动的入口函数本章的实例程序是在HelloWDM驱动的基础上修改而来,入口函数依然是DriverEntry,在DriverEntry函数中指定各种IRP的派遣函数,以及AddDevice 例程、卸载例程等。
[cpp]view plaincopy1./************************************************************************2.* 函数名称:DriverEntry3.* 功能描述:初始化驱动程序,定位和申请硬件资源,创建内核对象4.* 参数列表:5. pDriverObject:从I/O管理器中传进来的驱动对象6. pRegistryPath:驱动程序在注册表的中的路径7.* 返回值:返回初始化驱动状态8.*************************************************************************/9.#pragma INITCODE10.extern"C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,11. IN PUNICODE_STRING pRegistryPath)12.{13. KdPrint(("Enter DriverEntry\n"));14.15. pDriverObject->DriverExtension->AddDevice = HelloWDMAddDevice;16. pDriverObject->MajorFunction[IRP_MJ_PNP] = HelloWDMPnp;17. pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = HelloWDMDispatchControlp;18. pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloWDMCreate;19. pDriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloWDMClose;20. pDriverObject->MajorFunction[IRP_MJ_READ] = HelloWDMRead;21. pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloWDMWrite;22. pDriverObject->DriverUnload = HelloWDMUnload;23.24. KdPrint(("Leave DriverEntry\n"));25.return STATUS_SUCCESS;26.}其中在AddDevice例程中,需要创建设备对象,这些都是和以前的HelloWDM驱动程序类似。
ADB01_USB 型数据采集器使用说明

AD B01_USB型数据采集器使用说明第一章 概述ADB01_USB型数据采集器是我公司开发的USB总线数据采集产品,可与带USB接口的各种笔记本、台式机连接构成高性能的数据采集测量系统。
该产品采用美国新型 12位A/D转换芯片,设计讲究,测量精度高, 速度快, 应用软件功能强大,操作简便, 且具有USB设备体积小巧, 连接方便, 无需外接电源, 即插即用, 可带电拔插等优点. 可广泛应用于科学实验, 工业测量领域。
ADB01_USB型数据采集器的原理框图如图1-1所示。
图1-1一.主要技术特点·USB接口,笔记本、台式机均可使用,不占用任何扩展槽·16或32路模拟信号和3路隔离程控脉冲信号同步采集·同步时间码记录·数据采集器调节完全实现数字程控,在Windows环境下图形界面操作·通过USB总线可实现多台数据采集器同时工作,软件支持网络远程操作·德国连接件,方便可靠·USB总线供电,无需外接电源·功能强大的DdsXp软件支持二.主要技术指标·USB总线数据传输速率:12MB/s·采样分辩率:12位·精度:0.1%(满量程)·通道间采样间隔:6us·采样速率:采样速率程控设定,每个通道可分别选择高速或低速采样速率最高每通道 1KS/s·量程:±5V 、±2.5V 、±1V 、±0.5V 各通道独立程控设定 ·输入通道数:单端32通道,双端16通道·脉冲部分:光电隔离脉冲输入,多种输入方式选择,程控比较电平调节,32位计数,可用于测量普通转速、频率 输入频率范围:0-50KHz·脉冲标记校对:脉冲输入或脉冲标记动态校对开关接口,可用于测量普通转速、频率 ·激励电压输出:5V ±10% 总的电流:50mA ,可选 4V ±0.2%高精度激励 ·工作温度范围:0℃ -55℃·耐振性:依照GJB150标准10-500Hz(加速度2.4G)三方向振动(加振后动作无异常)第二章 硬件连接说明一.信号输入端的连接ADB01_USB 型盒式数据采集器的信号输入端装有2组或4组10路水平管座(接入模拟信号)、1组4路水平管座(接入脉冲信号), 另一端装有方形USB 插座。
如何通过 WinUSB 功能访问 USB 设备 (Windows Drivers)

本主题包括如何使用 WinUSB 功能与使用 Winusb.sys 作为函数驱动程序的 USB 设备进行通信的详细演练。 如果使用 Microsoft Visual Studio 2013,则可使用 WinUSB 模板创建你的框架应用。在该情况下,跳过本主题中的 第 1 步到第 3 步,从第 4 步继续操作。该模板打开设备的一个文件句柄,获取后续操作所需的 WinUSB 句柄。该句柄 存储在 device.h 中应用定义的 DEVICE_DATA 结构中。 有关该模板的详细信息,请参阅“编写基于 WinUSB 模板的 Windows 桌面应用”。 注意 WinUSB 功能需要 Windows XP 或更高版本。可在 C/C++ 应用程序中使用这些功能与 USB 设备通信。 Microsoft 未为 WinUSB 提供托管的 API。
以下示例代码获取由 WinUSB 接口句柄指定的设备的速度。
C++
BOOL GetUSBDeviceSpeed(WINUSB_INTERFACE_HANDLE hDeviceHandle, UCHAR* pDeviceSpeed) { if (!pDeviceSpeed || hDeviceHandle==INVALID_HANDLE_VALUE) { return FALSE; } BOOL bResult = TRUE; ULONG length = sizeof(UCHAR); bResult = WinUsb_QueryDeviceInformation(hDeviceHandle, DEVICE_SPEED, &length, pDeviceSpeed); if(!bResult) { printf("Error getting device speed: %d.\n", GetLastError()); goto done; } if(*pDeviceSpeed == LowSpeed) { printf("Device speed: %d (Low speed).\n", *pDeviceSpeed); goto done; } if(*pDeviceSpeed == FullSpeed) { printf("Device speed: %d (Full speed).\n", *pDeviceSpeed); goto done; } if(*pDeviceSpeed == HighSpeed) { printf("Device speed: %d (High speed).\n", *pDeviceSpeed); goto done; } done: return bResult; }
Windows XP环境下USB设备驱动程序的开发

[] 石 . 2阎 电子技 术基 础 ( 字 部分 ) . 京: 华大 数 【 北 清 M]
学 出版社 , 0 . 2 0 0
由于采用 C L P D大规 模可 编程 逻辑 器 件 ,整 机功 耗 小 、 干扰 能 力强 、 抗 系统 稳 定 、 作 可 靠 、 工 升级 方 便 。 另外 , 由于 器件 资 源 尚有 较 大 的扩 展 空 间 , 据 实 根 际需要 , 系统 可 方 便 地 增 加 所 需 功 能 , 通 过 器 件 如
理 。结合 数据 采 集 实例 , 绍 了开发 . 具 D ieSu i 介 Y - r rtdo的功 能 , 借助 该 工具 对 U B驱 动程 序 开发 v 并 S
和 安装过 程进 行 了说 明。
关
键
词 : 动程 序 ; M; S 驱 WD U B; D vrtdo i r eSu i
中图分 类号:P 1 T 36
Ab t a t h r h tc u e o W DM n W i d w a d s e i c t n o B a e a ay e ,n h sr c : e a c i t r f T e i n o s XP n p cf a i f US r n l z d a d t e i o o e ai n p i cp e o B i l r e . Ac o d n o a x mp e a o td t - olc in t e f n t n o p r t r i l fUS s c a i d o n i f c r i g t n e a l b u a a c l t , u c i f e o h o
Wid w P具 有运 行可 靠 、 定 且速 度快 的特 n o sX 稳
Windows下设备驱动程序的开发方法

目录一、驱动开发环境的搭建 (1)1.1 关于DDK (1)1.2 关于驱动程序的编译 (1)1.3关于驱动程序的运行 (2)二、驱动程序的结构 (3)2.1 驱动程序的头文件 (3)2.2 驱动程序的入口点 (3)2.3 创建设备例程 (4)2.4 卸载驱动例程 (5)2.5 派遣例程 (6)三、编写驱动程序的基础知识 (6)3.1 内核模式下的字符串操作 (6)3.2 内核模式下各种开头函数的区别 (8)3.3 一个示例程序 (10)3.4 补充说明 (10)四、在驱动中使用链表 (10)4.1 内存的分配与释放 (10)4.2 使用LIST_ENTRY (12)4.3 使用自旋锁 (12)五、在驱动中读写文件 (15)5.1 使用OBJECT_ATTRIBUTES (15)5.2 创建、打开文件 (16)5.3 读写文件操作 (16)5.4 文件的其它相关操作 (18)六、在驱动中操作注册表 (18)6.1 创建、打开注册表 (19)6.2 读写注册表 (20)6.3 枚举注册表 (21)七、在驱动中获取系统时间 (21)7.1 获取启动毫秒数 (21)7.2 获取系统时间 (22)八、在驱动中创建内核线程 (23)8.1 创建内核线程 (23)8.2 关于线程同步 (24)九、初探IRP (25)9.1 IRP的概念 (25)9.2 IRP的处理 (26)9.3 IRP派遣例程示例 (27)十、驱动程序与应用层的通信 (29)10.1 使用WriteFile通信 (29)10.2 使用DeviceIoControl进行通信 (32)十二、驱动程序开发实例 (33)12.1 NT驱动程序 (33)12.2 WDM驱动程序 (35)十三、参考资料 (41)一、驱动开发环境的搭建1.1 关于DDK开发驱动程序必备的一个东西就是DDK(Device Development Kit,设备驱动开发包),它跟我们在ring3常听到的SDK差不多,只不过它们分别支持开发不同的程序而已。
基于Windows的USB驱动程序开发
基于Windows的USB驱动程序开发何丽华;梁杰申;肖楚海【摘要】为了配合USB驱动程序的开发,首先详细阐述了微软所提倡的WDM驱动模型.并以LPC2368为例,阐述了运用DDK和DriverStudio工具包,开发USB设备驱动程序的过程和USB驱动程序的调用过程.利用DriverWorks开发驱动程序快捷方便,必将有着广阔的应用前景.【期刊名称】《微型电脑应用》【年(卷),期】2010(026)002【总页数】3页(P53-54,61)【关键词】WDM驱动模型;DDK;DriverStudio;USB驱动【作者】何丽华;梁杰申;肖楚海【作者单位】华南理工大学自动化学院,广东广州510640;华南理工大学自动化学院,广东广州510640;华南理工大学自动化学院,广东广州510640【正文语种】中文【中图分类】TP3990 引言Windows已经成为PC的主流操作系统,要想实现在Windows操作系统下对硬件设备的操作,必须通过在WDM模型下设计驱动程序这个软接口。
USB,是Universal Serial Bus(通用串行总线)的简称,为个人电脑与其外围设备之间的连接提供了一种标准化、单一化的接口[1]。
它的主要优点体现在:操作简单,即插即用;成本低廉,携带方便;标准统一;可以连接多个设备;通信速率快;可靠性高等。
鉴于USB的这些特点,它已经成为PC的首选接口。
1 WDM驱动程序模型简介USB驱动的设计基于WDM(Windows Driver Module),即Win32驱动模型。
WDM是Microsoft公司力推的新型驱动模型[2],旨在通过一种灵活的方式简化驱动程序的开发,在实现对新硬件支持的基础上,减少并降低必须开发的驱动程序的数量和复杂性。
WDM有两种运行模式,即内核模式和用户模式。
在内核模式下,程序的运行不受操作系统的任何限制,对I/O有完全的访问权;在用户模式下,操作系统提供某种机制,可以限制程序的各种I/O操作。
我在做usb上位机驱动过程中做的笔记VC6+DDK xp+DS3.2
我在做usb上位机驱动过程中做的笔记驱动程序安装成功后,应用程序的设计VC6+DDK xp+DS3.2驱动程序安装好后,应用程序要通过安装的驱动程序与设备的通信,但是应用程序怎么才能找到对应用的驱动程序呢?通过设备的GUID找到设备路径。
在windows操作系统环境下,设备通常被当作特殊文件处理。
要打开设备,就要知道该设备的路径,要找到设备的路径,要使用GUID来查找。
设备在安装时,windows安装器和相应设备的驱动程序负责将相应的设备与对应的GUID联系起来,并将GUID写入注册表,这样通过GUID(接口类GUID)就可以找到对应设备。
对于HID设备,因为它的驱动已经集成在操作系统中,在同一系统中GUID是一样的,但通常这个值在不同的系统下也许会不一样所以一般不直接使用这个GUID,而是使用一个API函数来获取(函数是void _stdcall HidD_GetHidGuid(Out LPGUID HidGuid)). 而我们自己做的嵌入式设备,因为驱动是自己写的,所以GUID肯定不一样,而且这个GUID不会因为设备用在不同的操作系统上而改变,因为这个GUID在生成设备驱动的时候已经生成,就对应这个设备了,这个设备类GUID可以在每个驱动的interface.h文件中看到。
我们就是要用这个文件中的GUID宏定义来查找已连接上设备,把系统中查到的设备列举出来,然后检查它的VID,PID以及设备版本号,看是不是要访问的设备,如果是,就可以对设备进行各种操作了,不是的话就循环下一个设备,直到找到或遍历完为止。
1.下面这个函数用来获取所有与ClassGuid指定的GUID相同的设备,当然对于HID设备在同一个pc机上可能会检测到多个,但是我们自己做的嵌入式设备,一般都是一个,要找到我们要的设备通过VID,PID以及设备版本号。
该函数返回HDEVINFO句柄,这个句柄指向ClassGuid指定的所有设备的一个信息集合。
TenAsys INtime实时操作系统入门(V3.13)
TenAsys实时操作系统入门1 INtime体系结构2 INtime的安装使用3 INtime试用版3.0例程作者:sigwell试用版下载:/Intime1 INtime体系结构1.1 INtime概述目前,人们正在越来越多地选择Microsoft Windows XP 和Windows XP Embedded 操作系统来运行满足某种特定需求的专用应用程序。
Windows XP Embedded 与 Windows XP 桌面软件是基于相同的二进制文件,它们在许多方面都是可供选择的最佳平台。
但是,当应用需要操作系统提供严格的实时接口和功能时, Windows XP Embedded 和 Windows XP 由于自身的原因而无法满足设计者的要求。
针对这方面的需求,人们已经开发出很多面向 Windows XP 平台添加实时扩展的方案,向Windows XP 内核设备驱动程序级提供某种实时功能,但此类解决方案基本上都没有考虑开发环境的易用性和健壮性,也没有考虑和已有的广泛的Windows应用程序资源共享。
INtime软件不仅能在Windows环境中为应用程序添加时间确定性的行为,而且使那些实时应用程序能够达到健壮、可靠和可伸缩性。
TenAsys的设计使INtime能可靠的在Windows系统中运行,且不影响Windows的原来的应用,同时也保证Windows的重大错误不会传递给INtime而导致整个系统崩溃,甚至不影响其他应用程序(它们之间存在显式交互的情形除外)。
TenAsys INtime 软件所采取的方法是在加载 Windows 操作系统的同时加载一个实时操作系统,以便它们共享相同的 CPU 和中断硬件,但在其他方面相互独立。
每个操作系统都被封装为一个虚拟机,各自具有自己的描述符表、内存管理等等。
当实时活动必须发生时,计算机上下文将切换到该实时操作系统。
当这些活动完成后,计算机上下文将切换回Windows 操作系统。
XP系统MTP USB驱动安装失败的完美解决方案
XP系统MTP USB驱动安装失败的完美解决方案最近经常碰到很多朋友说,自己新买的安卓平板(手机)无法使用U盘的方式连接到电脑,没有"大容量USB存储"的选项,其实现在大部分厂家都用更先进的“媒体设备”MTP模式替代了大容量USB存储,非常的方便,因为Windows系统因为就带了MTP模式(电脑默认就安装了Windows Media Player,带了驱动),可遗憾的事,大部分国人使用的盗版XP(Ghost XP)精减了Windows Media Player 的文件,导致怎么下载MTP驱动,按网上的方法怎么试都不会成功,今天我们就请江西华硕电脑代理商-乐安明日科技,教大家解决这个问题。
1、安装XP完整新版的Windows Media Player 11(点击官方直接下载)并安装。
PS:Windows Media Player 11需要正版验证,如果通不过验证,请下载免验证版(点击这里进入百度网盘下载),2、将你的安卓平板用USB数据线连接到电脑;选择媒体设备(MTP)USB连接模式,如下图:3、虽然WP11带了驱动,但默认不会驱动,需要设置一下,右击桌面上的“我的电脑”选择“设备管理器”(或右击“我的电脑”,找到“设备管理器”选项)。
然后在“设备管理器”中,右击未驱动带?号的“MTP”,右击“MTP”,选择“属性”,在“详细信息”中记下VID和PID,如下图:这台华硕ME302C的是VID是0B05,PID是5468。
4、在C盘Windows文件夹下的Inf文件夹下(完整路径:c:\windows\inf\wpdmtp.inf),找到wpdmtp.inf(这个只有安装了完整版的Windows Media Player11才有),并双击打开它,找到如下:[Generic.NTx86]%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP[Generic.NTamd64]%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP改为:[Generic.NTx86]%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP%GenericMTP.DeviceDesc%=MTP, USB\VID_0B05&PID_5468&MI_00 [Generic.NTamd64]%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP%GenericMTP.DeviceDesc%=MTP, USB\VID_0B05&PID_5468&MI_00其中:红色的改为你刚刚获取的VID,蓝色的改为:你获取到的PID。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《国外电子元器件》2007年第7期2007年7月公里数为99.99km)等功能;能够实现起步价、每公里收费、车型及加费里程的参数预置(如:起步价7.00元;3km后,2.40元/km;计费超过20.00元,每公里加收50%的车费等),且预置参数可调范围广。
由于采用CPLD大规模可编程逻辑器件,整机功耗小、抗干扰能力强、系统稳定、工作可靠、升级方便。
另外,由于器件资源尚有较大的扩展空间,根据实际需要,系统可方便地增加所需功能,如通过器件内部编程增加时钟功能,既可为司机和乘客提供方便,又能为夜间行车自动调整收费标准提供参考;还可以通过FPGA的输出引线控制语音器件,对顾客发出问候语,提醒其所要收缴的费用等;也可以通过FPGA的输出引线控制打印机打印发票等。
参考文献:[1]王振红.VHDL数字电路设计与应用实践教程[M].北京:机械工业出版社,2003.[2]阎石.电子技术基础(数字部分)[M].北京:清华大学出版社,2000.[3]张原.可编程逻辑器件设计及应用[M].北京:机械工业出版社,2003.[4]潘松.CPLD/FPGA在电子设计中的应用前景[J].电子技术应用,1999,25(7):6-8.[5]MarkZwolinski.VHDL数字系统设计[M].北京:电子工业出版社,2002.收稿日期:2007-03-12咨询编号:070707●应用与设计WindowsXP环境下USB设备驱动程序的开发陆原,魏杰,孟玮(河北大学电子信息工程学院,河北保定071000)摘要:分析了WindowsXP系统中WDM驱动程序的结构特点,简单介绍了USB的协议以及工作原理。
结合数据采集实例,介绍了开发工具DriverStudio的功能,并借助该工具对USB驱动程序开发和安装过程进行了说明。
关键词:驱动程序;WDM;USB;DriverStudio中图分类号:TP316文献标识码:A文章编号:1006-6977(2007)07-0028-03DevelopmentofUSBdevicedriverprogramunderWindowsXPLUYuan,WEIJie,MENGWei(CollegeofElectronicandInformationEngineering,HeBeiUniversity,Baoding071000China)Abstract:ThearchitectureofWDMinWindowsXPandspecificationofUSBareanalyzed,andtheoperationprincipleofUSBisclarified.Accordingtoanexampleaboutdata-collection,thefunctionofDriverStudioisintroduced.Thismethodofdevelopingdrvierprogramisgenerality,andsimplifiedthedevelopingandinstallingprocess.Keywords:driverprogram;WDM;USB;DriverStudio1引言WindowsXP具有运行可靠、稳定且速度快的特点,操作人性化,且使用比较普及。
USB(UniversalSerialBus,通用串行总线)具有连接单一化、即插即用、支持热插拔等特点,简化了PC和外围设备的连接过程。
在开发采用USB接口与PC连接的外围设备时,大都涉及到开发接口器件驱动程序的问题。
本文以实现数据采集功能为例,借助驱动开发工具DriverStudio3.1开发出USB设备的驱动程序。
2WindowsXP系统及其WDM结构WindowsXP运行平台支持两种模式:用户模式和内核模式。
用户模式下,应用程序接口调用函数"""""""""""""""""""""""""""""""""""""""""""""-28-在一些例程的帮助下可完成向设备读写数据功能。
操作系统创建一个称为I/O请求包(IRP)的数据结构,并将IRP送入设备驱动的一个入口点。
而在内核模式下,设备驱动执行IRP并最终完成与硬件的数据访问。
驱动程序工作于内核模式,既可以直接访问硬件,也可以通过硬件抽象层提供的一些功能实现对硬件的访问。
WDM(WindowsDriverMode,Windows驱动程序模型)是Microsoft推出的一种驱动程序模型,由运行于内核模式的系统级代码组成,在应用程序和设备之间采用分层驱动的方法,其中包含三种类型的驱动程序,其可能的一种结构如图1所示。
总线驱动程序负责驱动I/O总线,处理总线上的全部事务,控制对其总线所有设备的访问。
功能驱动程序用于驱动一个单独的设备,控制并实现该设备的主要功能。
过滤驱动程序用于过滤向设备、设备类或总线I/O发送请求,可服务于多个设备,还可进一步划分,这部分是可选的。
3USB的驱动结构USB设备所采用的驱动程序是一种典型的WDM驱动程序。
在WDM驱动程序中,即插即用(PnP)管理器负责通知操作系统何时添加(或删除)设备,并使用INF文件来查找新设备的驱动程序。
驱动程序基本组成结构如图2所示,包括以下部分:驱动入口程序例程DriverEntry():处理驱动程序的初始化;即插即用例程AddDevice()和IRP_MJ_PNP处理例程:处理PnP设备的添加、删除和停止;分发例程Creat()、Read()、IOCTL()等:处理用户程序发出的各种I/O请求;电源管理例程:处理电源管理请求;卸载例程:处理驱动程序的卸载。
另外,在驱动程序的加载方面,WDM不是通过驱动程序的名称来识别的,而是通过一个符号链接名或一个128bit的GUID(全局惟一标识符)来识别。
USB设备的接口可以有若干个端点(endpiont),端点作为通信管道的终点,有四种类型:批量(Bulk),控制(Control),中断(Interrupt)和同步(Isochronous)。
这些类型都需要在驱动程序中进行描述。
USB设备的端点0默认为控制方式,可以初始化系统,设备并加电并收到一个总线复位命令后,端点0就可以访问。
与端点类型对应的是定义了四种数据传输方式,根据开发系统也对其在驱动程序中进行定义,具体包括:控制方式:用于发送和接收USB定义的结构化信息;批量方式:用于发送或接收小块无结构数据;中断方式:与批量管道相似,但包括一个最大延迟;同步方式:用于发送或接收有周期保证的大块无数据结构。
4利用DriverStudio3.1开发驱动程序4.1开发环境介绍首先,依次安装MicrosoftVisualC++6.0,Win-dowsXPDDK(驱动开发工具包)和NuMegaDriver-Studio3.1。
其中DDK是Microsoft公司提供的一个开发Windows驱动程序的工具包,是开发设备驱动程序所必须的软件组件。
DriverStudio中的DriverWorks工具为开发WDM设备驱动程序提供了一个自动化的方法,其中的类库将常用的操作封装起来,大大减少了编码工作量。
该产品中的DriverWizard引导完成设备驱动程序开发的全过程,并能根据硬件种类自动生成设备驱动程序源代码。
4.2开发过程以完成数据采集为例,介绍USB设备驱动程序的开发。
建立WDM编程环境,利用VisualC++打开DriverStudio中的DDKBuildSettings,设置DDK所在目录,在TargetOS中选择WindowsXP。
图2USB设备驱动程序构成图1WDM驱动程序结构WindowsXP环境下USB设备驱动程序的开发-29-《国外电子元器件》2007年第7期2007年7月在DriverStudio中的DriverWizard引导下,依次完成以下步骤:1)选择驱动类型、功能驱动程序为WDM型。
2)选择硬件所支持的总线类型为USB(WDMonly),并填写供应商ID(VendorID)和产品ID(ProductID),这些数据是由所选器件的供应商提供,如Philips公司的VID为0471。
3)定义所用到的端口,根据数据采集的特性,该设备用到两个Bulk端口,可通过Add按钮添加。
第一个端口定义为IN端口,用于数据输入,类型为Bulk,命名为Endpoint1IN;第二个端口定义为OUT端口,用于数据输出,类型也为Bulk,命名为End-point2OUT。
DriverClass和FileName采用默认值。
4)选择驱动程序响应请求,选择Read、Write、Cleanup,本系统不需要其他接口。
5)定义应用程序调用的DeviceIoControl函数对WDM驱动程序通信的控制命令,选择为布尔类型。
6)选择生成一个Win32Console应用程序。
在生成文件中,USBDrv.cpp包含驱动程序入口例程DriverEntry()和PnP中的例程AddDevice()。
在USBDrvDevice.cpp程序中,数据采集的读端口1程序如下:TSTATUSUSBDrvDevice::Read(KIrpI){…………//如定义传输量大于管道最大传输量,则按管道最大传输量,否则URB传输失败if(dwTotalSize>dwMaxSize){ASSERT(dwMaxSize);dwTotalSize=dwMaxSize;}USB_COMPLETION_INFO*pCompInfo=new(NonPaged-Pool)SB_COMPLETION_INFO;if(pCompInfo==NULL){I.Information()=0;returnI.PnpComplete(this,STATUS_INSUFFICIENT_RESOURCES);}//创建一个URB完成管道的Bulk传输PURBpUrb=m_in1.BuildBulkTransfer(Mem,//WhereisdatacomingfromdwTotalSize,//Howmuchdatatoread?TRUE,//direction(TRUE=IN)NULL,//LinktonextURBTRUE//Allowashorttransfer);if(pUrb==NULL){deletepCompInfo;I.Information()=0;returnI.PnpComplete(this,STATUS_INSUFFICIENT_RESOURCES);}pCompInfo->m_pClass=this;pCompInfo->m_pUrb=pUrb;NTSTATUSstatus;status=m_in1.SubmitUrb(I,pUrb,LinkTo(ReadComplete),pCompInfo,0);returnstatus;}DriverStudio自动生成相应的驱动程序INF(DeviceInformationFile,设备信息文件),其中记录了驱动程序安装的所有操作,包括复制文件的指定路径、添加或修改注册表、加载系统服务等,而实际的驱动程序存放在.sys,.dll,.vxd文件中。