W indows CE下USB设备流驱动开发与设计

2010-12-27 01:05:02慕晓蕾
河北省科学院学报 2010年4期
关键词:驱动程序文件夹嵌入式

慕晓蕾

(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流驱动的基本流程。

1 Window s CE流驱动的开发环境

搭建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发往串口的相关信息,可以输入相关参数进行设置。

2 Window s CE驱动分类

驱动程序介于设备和操作系统之间,用来为操作系统提供接口,达到实现操作不同硬件的目的。Window s CE系统驱动有很多种,下面介绍两种不同的分类方式。

2.1 按装入的模块不同分类

(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调用。

2.2 按驱动实现的结构分类

(1)分层驱动:分层驱动由MDD(Model Device Driver)层和PDD(Platform Dependent D river)层两层驱动组成。MDD层驱动主要为应用层提供接口(DD I),而 PDD层驱动主要负责为MDD层提供接口(DDSI),具体结构图如图1所示,PDD层驱动为MDD层驱动隐藏了具体的硬件实现,方便代码维护和移植。

(2)单层驱动:单层驱动不仅直接为系统提供接口,也直接操作硬件。比分层驱动效率更高。

图1 分层驱动结构图

3 Window s CE下U sb流驱动分析

Window s CE平台为了支持不同类型的外围设备,提供了能定制接口的流接口驱动程序模型。由于流接口驱动程序是为连接到目标平台上的外围设备而设计的,对大多数USB外围设备来说,适用于采用流接口驱动程序模型来开发驱动程序[2]。

3.1 Window s CE下USB文件夹的结构

在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接口的原型。

3.2 USB设备驱动程序的入口点函数

通过对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消息的响应,这个指针所指向的函数也是必须要实现的。

3.3 USB设备流驱动的实现的两种方式

(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]。

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.

猜你喜欢
驱动程序文件夹嵌入式
磁力文件夹
搭建基于Qt的嵌入式开发平台
调动右键 解决文件夹管理三大难题
嵌入式软PLC在电镀生产流程控制系统中的应用
电镀与环保(2016年3期)2017-01-20 08:15:32
TC一键直达常用文件夹
电脑迷(2015年1期)2015-04-29 21:24:13
Altera加入嵌入式视觉联盟
倍福 CX8091嵌入式控制器
自动化博览(2014年4期)2014-02-28 22:31:15
驱动程序更新与推荐
驱动程序更新与推荐
驱动程序更新与推荐