您当前的位置:首页 > 计算机论文>计算机应用论文

浅谈WINCE驱动程序设计

2015-12-15 14:28 来源:学术参考网 作者:未知

摘 要:伴随着计算机技术的飞速发展,尤其是嵌入式计算机的发展,嵌入式操作系统也得到了飞速的发展。Wince就是其中之一,本文主要介绍了嵌入式实时操作系统wince下驱动程序的开发过程。

关键词:wince 驱动程序;开发;设计
1 引言
  WINCE和Windows 98或Windows 2000不同,它可以工作在12种不同的处理器体系结构、180余种CPU上;同时,WINCE是一个实时操作系统(实时系统的意义就是输入的指令不必进入队列就可以马上处理,过去我们使用的DDS就是实时系统),可以满足应用程序所需要的实时性要求。
  Windows CE的模块化设计使得它能够在大量的平台上定制使用,从客户电子设备到专用的工业控制器。由于它是模块化的,因而我们可以使用满足平台系统需求的最小软件模块和组件集合来设计嵌入式系统平台,从而使内存用量最小,但最大可能地提高操作系统的性能。因此外围扩展设备就必须要有硬件驱动才能正常工作。
  和其它的操作系统一样,Windows CE也提供设备驱动软件,这些软件的目的是驱动内部和外围的硬件设备,或为它们提供接口。设备驱动程序将操作系统和设备链接起来,使得操作系统能够识别设备或者为应用程序提供设备服务。
  Windows CE支持广泛的基于各种CE平台的设备驱动程序。也提供一些用于驱动程序开发的模型(model) ,其中包括来自其它操作系统的驱动程序模型(model),因为这些丰富多变的驱动程序模型, Windows CE适应大部分的内部和外围设备口Microsoft Windows CE设备驱动程序工具包配备了文档资料,这些文档资料使得你能够为Windows CE创建设备驱动程序。目前,Windows CE提供了四种设备模型,其中两种是专用于Windows CE的模型,另外两种外部模型来自其它操作系统。
2 驱动程序开发简介
2.1 开发工具
  Windows CE驱动可以使用Platform Builder或者Visual Studio开发,但是开发人员一般都使用Platform Builder开发设备驱动程序,对于部分驱动也会使用Visual Studio开发,应用程序开发人员更多的使用Visual Studio开发驱驱动程序。作为BSP(Board Support Package)的一部分进行整体编译开发。
2.2 驱动分类
2.2.1 按加载方式和接口类型分类
1) 本机驱动程序(Built-In Drivers)
  通常由GWES加载,驱动接口一般都是定制的(Custom Purpose)。
2) 流驱动程序(Stream Drivers)
  通常由Device Manager加载,驱动接口是标准的流式接口。
3) 混和型驱动程序
  同时有定制式和流驱动两套驱动接口,但是和系统交互只使用流式驱动接口,比如PC卡槽驱动。
2.2.2 按驱动层次分类
1) 层次型驱动程序(Layered Driver)
> MDD(Model Device Driver),与硬件无关,面向上层应用程序,一般由微软建立统一框架;
> PDD(Platform Dependent Driver),针对具体硬件平台的操作代码,一般由驱动开发商实现MDD和PDD之间通过标准的设备驱动服务供应商接口DDSI连接。
2) 独立型驱动程序(Monolithic Driver)
> 独立驱动程序包含了MDD面向上层应用和PDD面向硬件平台两方面的代码;
> 适用于操作不复杂的驱动;
> 减少了MDD和PDD传递之间传递信息的开销,实时性更强;
3 流驱动程序的实现
    流驱动程序必须实现一套标准接口,流驱动程序适用于IO操作,这也是嵌入式系统中最常见的设备驱动,操作接口和文件系统操作相似,通过CreateFile,ReadFile,WriteFile,IOControl函数等来操作应用程序和流驱动交互,可以把设备当作文件操作。
3.1 文件前缀名确定
    根据文件前缀名在系统中必须唯一这一特点,在定义文件前缀名必须是三个字母,若有多个同类设备,由后缀一个阿拉伯数字区分,例如COM1,LPT3等等。文件前缀名将会在驱动的标准接口函数中体现,比如XXX_Init,XXX_Close等。
3.2 通用函数
    根据设备的不同,所需函数不同,通用函数如下所示:
1) XXX_Init:通知设备管理器为设备初始化分配资源;
2) XXX_Deinit:通知设备管理器回收设备初始化时分配的资源;
3) XXX_Open:打开设备。应用程序调用CreateFile时,通过文件系统映射为XXX_Open;
4) XXX_Close:关闭设备。应用程序调用CloseFile时,通过文件系统映射为XXX_Close;
5) XXX_PowerUp:设备上电时,操作系统调用该函数完成必要的上电操作;
6) XXX_PowerDown:设备掉电时,操作系统调用该函数完成必要的关机操作
7) XXX_Read:从打开的设备文件中读取数据,可以通过ReadFile映射;
8) XXX_Write:向打开的设备文件写数据,可以通过WriteFile映射;
9) XXX_Seek:文件定位,根据设备情况决定是否支持;
10) XXX_IOControl:IO操作扩展,可以根据设备情况来决定支持何种特殊的操作模式。
3.3 DEF文件建立
    流驱动一般以DLL形式存在,DEF文件定义了DLL需要导出的接口集,因此DEF文件的名称与设备驱动名称相同。
3.4 写注册表
    在wince中任何设备的识别都是通过注册表来实现的,因此必须在注册表中添加具体的设备驱动项,以便系统识别。具体方法如下:
  在注册表中增加驱动程序入口点,找到注册表项,注册项位于注册表的Root Key下,一般为[HKEY_LOCAL_MACHINEDriversBuiltInSampleDrv],建立必要的子键和键值,“Prefix”和“DLL”是两个重要,而且是必须的键,分别描述了设备前缀名和驱动程序的动态连接库名,然后根据具体设备的需要建立驱动程序需要的其子他键。
4 调试驱动程序
  驱动程序编写完毕后,就应该进行硬件的调试。具体方法如下:
4.1 调试区信息(Debug Zone)
  调试区一般和WinCE的控制台调试工具Cesh.exe配合调试,在不打断OS运行情况下,进行驱动的实时调试,利用宏开关,可以选择需要输出的调试区信息,可以得到进程,线程和调试状态信息。并且可以利用IDE环境,动态选择开关调试区信息,但是打印驱动程序输出调试信。必须借助于至少一种外设显示调试信息,比如串口或者网卡或者其他通过调用RETAILMSG或者DEBUGMSG完成,不影响OS的运行,保证驱动程序运行的真实性,动态输出设备的状态信息,调试相对简单,也是最广泛使用的一种调试方法。
4.2 核心调试工具(Kernel Debugger)
  核心调试工具将会禁止所有硬件中断,挂起操作系统,因此可以单步调试OS或者核心代码,可以访问堆栈信息,但是必须在Platform的环境下,利用至少一种外设进行通信。
4.3 硬件辅助调试方法
   利用硬件调试工具可以观察物理设备的真实状态,一般常用的方法可以利用JTAG工具实时查看CPU内部寄存器,利用逻辑分析仪或者示波器实时查看物理外设的输入输出状态。利用指示LED来显示驱动程序实时状态信息。
4.4 Visual Studio调试
  可以利用VS内置的调试工具进行单步跟踪,状态调试等。
5 测试驱动程序
  驱动程序经过调试以后就需要对驱动的功能进行测试。其常用的方法如下:
1) 写一个应用程序来测试驱动程序的正确性
2) 模拟各种可能发生的硬件输入状态来测试驱动程序的正确性
3) 利用Windows CE自带的测试工具CETK来测试驱动程序的性能和完备性
6 驱动程序的集合和发布
6.1 驱动程序集成
  驱动程序经过调试和测试确定其正确性后,就可以对驱动程序进行集成了。具体过程如下:
1) 在BSP的Driver目录下建立新的驱动文件夹MyDrv
2) 实现MyDrv驱动以及相关的DEF文件
3) 如果需要用到硬件中断资源,修改原BSP中的相关中断处理函数OEMInterruptEnable,OEMInterruptDisable,OEMInterruptDone,OEMInterruptHandler
4) 在Platform.reg中,增加驱动程序相关项
5) 在Platform.bib中,增加驱动程序的相关注册表项MyDrv.Dll$(_FLATRELEASEDIR)MyDrv.dll NK SH
6.2 驱动程序发布
  驱动程序进过集成以后就可以发布使用了,具体的发布过程如下所示:
1) 利用CAB Wizard生成.cab驱动包
2) 直接提供驱动程序文件夹以及相关注册表项和修改说明
7 总结
  本为详细的介绍了,wince下驱动开发的流程,介绍了驱动程序开发到发布的详细过程,并详细说明了各个部分的实现和操作方法,使是初学者对wince下驱动程序的开发流程和一般的开发工具有了初步的了解。

参考文献:
. 电子测量技术, 2007, (08) .

相关文章
学术参考网 · 手机版
https://m.lw881.com/
首页