慕晓蕾
(1.河北工业大学计算机科学与软件学院,天津 300130; 2.石家庄开发区冀科双实科技有限公司,河北石家庄 050081)
W indows CE下USB设备流驱动开发与设计
慕晓蕾1,2
(1.河北工业大学计算机科学与软件学院,天津 300130; 2.石家庄开发区冀科双实科技有限公司,河北石家庄 050081)
本文针对Window s CE下USB设备流驱动的广泛应用,介绍了该系统下流驱动的开发环境和驱动分类,并重点对USB设备流驱动进行分析。
Window s CE;USB;流接口驱动
Window s CE是微软公司开发的一种嵌入式操作系统,它是一种模块化的、易剪裁、定制移植方便的、实时抢占式多任务嵌入式操作系统;它能支持多种硬件平台(包括X86、ARM、M IPS、SuperH等)[1]。S3C2440是一款 Sam sung公司推出的基于ARM 920T内核的16/32位RISC嵌入式微处理器,它专为手持设备和一般类型应用而设计,能够满足嵌入式系统中的高性能、低功耗、小体积的要求。ARM SYS2440是立宇泰公司提供的一个二次开发平台,提供了完整的BSP源码资源,设备驱动工程师可以在此基础上进一步进行设备驱动的添加修改、内核的重定制等。本文介绍通过ARM SYS2440平台来开发 Window s CE系统下USB流驱动的基本流程。
搭建Window s CE流驱动所需要的开发环境需要以下几个软件:
(1)Platfo rm Builder 5.0:此软件是用来定制Window s CE操作系统的集成开发环境。开发人员可以利用这个集成开发环境完成Window s CE操作系统的定制、编译和调试工作,而且也可以在这个集成开发环境中开发应用软件、驱动程序等。
(2)Visual Studio 2008:此软件用来编写调试流驱动时所用到的应用程序,虽然应用程序也可以用 Platform Builder 5.0来编写,但 Visual Studio 2008更通用,更方便。
(3)ActiveSync 4.5:此软件是用来同步 PC机与ARM SYS2440实验板的,可以在微软中国官方网站下载。
(4)DNW:串口调试工具,在上电时用来显示B IOS发往串口的相关信息,可以输入相关参数进行设置。
驱动程序介于设备和操作系统之间,用来为操作系统提供接口,达到实现操作不同硬件的目的。Window s CE系统驱动有很多种,下面介绍两种不同的分类方式。
(1)Device.dll加载的驱动:由Device.dll加载的驱动实现了流驱动的接口。以流驱动方式来实现的驱动没有设备类型的限制。流设备驱动程序也被称为可安装的驱动程序(Installable D river),它为操作系统提供了流接口函数,如XXX_ Init()、XXX_Open()、XXX_Read()、XXX_W rite ()、XXX_Close()等等。
(2)GW ES.dll加载的驱动:由 GW ES加载的驱动主要是系统使用,称为本机驱动。本机驱动提供给操作系统的不是标准的流接口,而是事先约定好的特定接口。不同的设备,接口也不一样。WinCE中,常见的本机驱动有LCD显示驱动、触摸屏驱动、鼠标和键盘驱动及打印机驱动等。本机设备驱动程序是由 GEWES统一管理和加载的。
(3)FileSys.dll加载的驱动:文件系统驱动以dll的方式实现,它预先实现了一组函数和IO控制的函数。这些函数被标准的文件系统 API调用。
(1)分层驱动:分层驱动由MDD(Model Device Driver)层和PDD(Platform Dependent D river)层两层驱动组成。MDD层驱动主要为应用层提供接口(DD I),而 PDD层驱动主要负责为MDD层提供接口(DDSI),具体结构图如图1所示,PDD层驱动为MDD层驱动隐藏了具体的硬件实现,方便代码维护和移植。
(2)单层驱动:单层驱动不仅直接为系统提供接口,也直接操作硬件。比分层驱动效率更高。
图1 分层驱动结构图
Window s CE平台为了支持不同类型的外围设备,提供了能定制接口的流接口驱动程序模型。由于流接口驱动程序是为连接到目标平台上的外围设备而设计的,对大多数USB外围设备来说,适用于采用流接口驱动程序模型来开发驱动程序[2]。
在W INCE500/PUBL IC/COMMON/OA K/ DRIVERS/USB文件夹里有COMMON、INC、CLASS、HCD、USBD几个文件夹,其中INC和COMMON里面有一个lock.c的程序,这个程序是将要被其他USB有关的驱动程序所使用的一个锁,是一个类似临界区的封装体,可以保护多线程对同一内存区域的读写访问。HCD和USBD是底层驱动,HCD模块给USBD模块提供最底层的支持,USBD实现高层的接口函数[2]。
而 W INCE500/PUBL IC/COMMON/DDK/ INC文件夹里提供的是与设备驱动有关的头文件,与USB设备相关的文件有USB100.H、USB-TYPES.H、USBD I.H。USB100.H、USBTYPES.H里面关于 USB的定义是完全符合USB规范的,是不能随便定义的;USBD I.H文件里的内容就是USBD总线驱动程序向USB设备驱动程序提供的接口描述,开发USB设备驱动时必须要包含此头文件才可以得到USBD接口的原型。
通过对Window s CE下USB文件夹结构的分析可知,所有的USB设备驱动程序都必须在它们的DLL库里面设置一定的入口点来与USBD模块进行适当的交互。
下面简单介绍一下相关函数的作用:
USBDeviceA ttach()是在USB设备连接到计算机时运行,USBD模块通过调用这个函数初始化USB设备,得到USB设备信息并配置USB设备,同时申请必需的资源[2]。
USB InstallD rive()是在系统第一次加载USB设备驱动程序时被调用的,通过它驱动程序能创建所需要的注册键,并将驱动程序需要的注册表信息写到 H KEY_LOCAL_MACH INE/ D rivers/USB/ClientD rivers下。USB设备驱动程序使用 RegisterClientDriver ID()和 Register-ClientSettings()函数来注册相应的设备信息[3]。
USBUninstallDriver()负责卸载USB设备驱动程序,通过调用UnRegisterClientSettings()函数和UnRegisterClientDriver ID()函数来删除注册键并释放其它相关资源。
因此,我们的驱动程序中就一定要按照这三个函数的原型来实现,否则就不能为设备管理器所识别。需要指出的是,*LPDEV ICE_ NO TIFY_ROU TINE指针所指向的函数是用来接收通知消息的,因为任何USB设备都必须实现USB_CLOSE_DEV ICE消息的响应,这个指针所指向的函数也是必须要实现的。
(1)打开PB5.0,新建一个动态链接库(DLL)工程,在工程中添加源文件,选择代表设备的文件名前缀(这是非常重要的,因为设备管理器在注册表中是通过前缀来识别设备的,并且在流接口命名时也是将这个前缀作为入口点函数的前缀)。PB5.0在创建工程的时候已经自动编写好了source和M akefile文件,.reg文件和.def文件也已经存在,只需要添加相应的内容就可以。
(2) 在 C:/W INCE500/PLA TFORM/ SMDK2440A/DRIV ERS目录下(注:其中C盘是我的安装目录,SMDK2440A是立宇泰的2440实验板提供的BSP)新建一个文件夹,并用记事本打开该目录下的dir按其格式添加“/新建文件夹的名字”打开刚刚新建的文件夹,依次新建.reg文件,.def文件,source文件和Makefile文件。
这两种方式都能实现流驱动,生成dll文件,第一种方式是平台自动创建 source,Makefile等文件,第二种方式则都要手动添加。流驱动是嵌入式系统中最常见的设备驱动,操作接口和文件系统操作相似,通过CreateFile,ReadFile,W rite-File,IOControl函数等来操作应用程序和流驱动交互[4]。
随着USB设备的普及,开发人员的驱动开发任务也是越来越繁重了,特别是对于一些嵌入式开发来讲,由于设备所采用的操作系统不同,相应的硬件接口也是不一样的,开发相关的USB驱动程序更是难上加难。通过本文,能了解W indow s CE下USB流驱动开发的大致步骤,为今后更复杂的开发应用奠定基础。
[1] 何宗健.Window s CE嵌入式系统 [M].北京:北京航空航天大学出版社,2006.
[3] 刘彦峰,李峥,马智.基于Window s CE的USB Key驱动程序设计[J].微计算机信息,2008-12-03.
[4] 计涛.浅谈W INCE驱动程序设计[J].2010,(2).
The design of USB stream interface driver for W indows CE
MU Xiao-lei1,2
(1.College of Com puter Science and Softw are,Hebei University of Technology,TianJin300130,China;2.Shijiazhuang Development Zone JiKe ShuangShi Technology Co.,L TD,Shijiazhuang Hebei050081,China)
Aiming at the extensive app lication about USB Stream Interface Driver for Window s CE.The development environment and the classification of Stream Interface D river fo r Window s CE were introduled,and USB Stream Interface Driver were analyzed emphatically.
Window s CE;USB;Stream Interface Driver
TP311.52
:A
1001-9383(2010)04-0015-03
2010-10-30
慕晓蕾(1980-),女,辽宁朝阳人,主要从事嵌入式系统开发设计等工作.
10.3969/j.issn.16712 1041. 2010.01.035.