wince系统开发实验三_第1页
wince系统开发实验三_第2页
wince系统开发实验三_第3页
wince系统开发实验三_第4页
wince系统开发实验三_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、wince系统开发实验三Document number AA80KGB-AA98YT-AAT8CB-2A6UT-A18GG 实验三、 Windows C E 驱动开发一、实验目的1、学会使用WinCE操作系统开发工具2、熟悉开发环境3、了解嵌入式系统驱动开发的基本思想和开发过程二、实验内容学习使用Platform Builder 4.2集成开发环境,建立流驱动程序。了解WinCE基本系统体系架构了解WINDOWS CE系统设备驱动基础知识和方法学习使用Platform Builder 4.2集成开发环境,建立流驱动程序三、预备知识C语言基本知识,设备驱动基础知识和方法,WinCE基本系统体系架

2、构。四、实验设备及工具硬件:PC 一台P3以上(内存不小于384MB,安装完工具硬盘空间不得小于 600M) 、 ARM9实验箱(包含NETARM2410-S实验板、JTAG仿真器、各种串口线、并口线、网 线、光盘等) 一台。软件:PC操作系统Win2000以上、ADS1. 2集成开发环境、Platform Builder 4.2版本、Source Insight3. 0。五、实验原理及说明1、WinCE驱动程序架构II前WinCE拥有两种驱动架构模型,一种是本机设备驱动,另一种是流接口设 备驱动。其中本机设备驱动已经被Microsoft开发并山系统直接支持,山GWES (图形窗口及事件子系统

3、)统一管理和加载;流驱动则是山WinCE设备管理器 来管理的。这种组织形式相对于UNIX体系来说是比较复杂的。本机设备驱动适合于集成到CE平台的设备。例如电源驱动,它们已经成为了 GWES的一部分,不表现为单个的DLL使用。这些驱动程序通常和系统有着较为 紧密的联系,所以通常是和系统一起加载的。流设备驱动山于具有较好的可移植性和可扩展性,被设备管理器独立岀来管理 统筹。在本实验中,将以一个示例的流驱动演示程序来讲述简单驱动的工作。下面的图3-1中较为清楚的显示了单片形式存在的驱动和分层方式的驱动在 WinCE中的组织情况。图3-1驱动在WmCE中的组织情况2、流驱动程序流驱动程序通过流驱动接口

4、函数和设备管理器进行数据交互,并通过文件的形 式来组织,这一点和Unix平台是很类似的。它以动态链接库形式存在,具有同一组接 口并调用同一个函数集的。流驱动面向的是各种各样的外设,主要的任务是把外设的使用 传递给应用程序来使用。在WinCE中设备文件通常是保存在固定的路径Windows U录下,通 过注册表机制来完成特殊的命名惯例。虽然流借口驱动程序具有普遍的特性, 但是我们仍旧可以使用不同的方法来实现它们。例如有些内部设备的驱动程序 就是使用的流接口。另外尽管流接口程序通常是山设备管理器程序加载和卸载 的,但是有时候应用程序也执行加载和卸载的任务。应用程序通过文件系统的 API来调用流接口函

5、数,然后山流接口驱动程序调用本机驱动或者通过设备管 理器与系统内核外圉设备通讯交互,最后直接驱动相关硬件执行动作。3、流接口驱动程序的一般标准入口流接口驱动程序通常都具有如下的函数,具有一个统一的操作标准如表3-1所 示:表3-1流接口驱动程序的函数函数名称描述XXX.Close驱动程序关闭时候调用XXX.Open打开一个设备驱动时调用XXX.Demit设备管理器或者应用程序卸载驱动时调用XXX.Init设备管理濡初始化设备时调用XXX.IOContro 1上层软件进行10控制调用XXX.PowerDown系统挂起前调用XXX.PowerUp系统重新启动时调用XXX.Read打开设备时候进行的

6、读操作XXX.Wnte打开设备时候进行的写操作XXX.Seek对设备抬针进行操作时凋用XXX.Remit设备重复打开时调用其中XXX代表驱动文件名,由驱动类型的3个大写字母缩写而成,规则由系统 约定。详细规则请参考帮助文档和MSDN的说明。了解了这些函数的功用,就可以开始着手建立起来一个最简单的流驱动程序。 它的功能是向缓冲区中读写字符。六、实验步骤1、建立模拟器工程运行Platform Builder,建立一个基于X86体系的模拟器。下面的驱动程序建 立都可以在仿真器中模拟实现。注意需要在Applications & Services Development 选项中选择Active Temp

7、le Library(ATL), C libraries &Runtimes, Message Queuing(MSMQ), Microsoft Foundation Classes(MFC), Standard SDK for Windows CE. net这儿个选项,这样可以确保将来调 试的驱动和调用的应用程序具有足够的库和服务可以享用。详细的建立过程和方法可以仿照实验二里面的步骤来做,这里不再赘述。2、创建驱动程序工程在PB中新建一个工程,单击菜单中的File选择建立New Project or F订e Name弹出如下图3-2的对话框。图3-2新建工程在这里选择Project标签选择W

8、CE Dynamic-Link Library即WinCE DLL并在右 侧输入工程名和存放位置(会默认)。点击“0K”确认。图3-3生成DLL的类型在对话框中选择生成DLL的类型,可以选择An empty project来创建一个空的 dll,也可以选择A simple Windows CE DLL project,创建一个简单的WinCE动态链接 库工程,这个工程只带有简单的DLL入门函数。A DLL that exports some symbols用来生成简单的输岀函数。点“Finish”完成创建。如图3-3。创建完PB的主界面上会切换到该工程,如图3-4所示。图3-4工程根目录再次点

9、击File,选择New Project or F订e Name”,在向导对话框中选择 Files 标签,如下图3-5所示。如图3-5选择File选择建立C+ Source F订e,同时添加文件名,存储路径并将文件添加到DLL工 程中。加入“windows, h”,“tchar.h”头文件和动态链接库的入口函数(标准函 数)DllEntryPoint (),建立好一个简单的动态链接库的架子,添加相应的处理。详见各种 说明文档。3、编写驱动程序的代码DWORD STR.Init(DWORD dwContext)DWORD dwReturn = 0;RETAILMSG (1,TEXT( wMYSTR

10、INGS:STR.Inittnv );memset (achBuffer, 0, BUFSI2E * sizeof (WCHAR);dwReturn = 1;return dwReturn;BOOL STR.Deimt (DWORD hDeviceContext)BOOL bReturn = TRUE;RETAILMSG(1, (TEXT(MYSTRINGS:STR_Deimttnn );return bReturn;DWORD STR_0pen (DWORD hDeviceContext,DWORD AccessCode,DWORD ShareMode)DWORD dwReturn = 0;

11、RETAILMSG (1,TEXT( “MYSTRIGS:STR_Opent);dwReturn = 1:return dwReturn;BOOL STR.Close(DWORD hOpenContext)BOOL bReturn = TRUE;RETAILMSG(1, CTEXT(MYSTRrGS:STR_Closetrr );return dwReturn;BOOL STR_IOControl(DWORD hOpenContext,DWORD dwfode,PBYTE pBufln,DWORD dwLenln,PBYTE pBufOut,DWORD dwLenOut,PDWORD pdwA

12、ctualOut)BOOL bReturn = TRUE;RETAILMSG(1, (TEXT(MYSTRINGS:STR_IOControltrT );return bReturn;void STR_PowerDown (DWORD hDeviceContext)RETAILMSG(1, (TEXT(MYSTRINGS:STR_PowerDown);void STRPowerUp(DWORD hDeviceContext)RETAILMSG(1, (TEXT(MSTRINGS:STR.PowerUptn );DWORD STR.Read(DWORD hOpenContext,LPVOID p

13、Buffer,DWORD Count)DWORD darter = 0;RETAILMSG (1,TEXT( “MYSTRINGS:STR_Readtd );DWORD cbBuffer = wcslen ( achBuffer);dwReturn = min(cbBuffer, Count);wcsncpy(LPWSTR)pBuffer, achBuffer, dwReturn); return dwReturn;DWORD STR.Seek(DWORD hOpenContext,Long Amount,DWORD Type)DWORD dwReturn =0;RETAILMSG(1, (T

14、EXT(MYSTRINGS:STR_Seektnw ):Return dwReturn;DWORD STR.Write(DWORD hOpenContext,LPCVOID pSourcdBytes,DWORD NumberOfBytes)DWORD dwReturn =0;RETAILMSG(1, (TEXT(MYSTRINGS:STR_Writetnv );dwReturn = min(BUFSIZE, NumberOfBytes);wcsncpy (achBuffer, (LPWSTR) pSourceBytes, dwReturn);Return dwReturn;确定编写完毕保存。如

15、果不想编写,也可以直接拷贝光盘中的MyDriver. cpp文 件到工作目录下。4、准备配置文件Def文件。复制光盘中的String. Def文件到工作目录下。Reg文件。复制光盘中的StringReg. reg文件到工作口录下。Cec文件。复制光盘中的MyDriver. cec文件到工作目录下。Makefile文件和Sources文件。复制makefile和sources文件到工作U 录下。这些文件是DLL工程编译必须具备的配置文件,它们说明了关于驱动如何链 接,编译路径,和系统注册等等重要的匸作,在编写新的DLL时一般都需要进行改动其至 重写。这里直接拷贝光盘中的文件来实现。有兴趣的也可以

16、使用文本查看软件(如UltraEdit32,WinHEX等)来打开这些文件,看看文件内部是如何配置的。拷贝完毕后,在PB下导入CEC文件。将MyDriver. cec拷贝到PB当前工程口录 下(模拟器口录下),打开File菜单,选择Manage Catalog Features弹出一 个属性对话框,如图3-6。图3-6属性对话框在右侧按钮中点击Import,选中MyDriver. cec导入当前工程LI录,然后单击 “0K” 确认完成。导入方法和导入平台BSP的方法是相同的。可以发现驱动被添加到工程组件窗口中,在组件上点击右键,选择Add to Platform, 完成系统的驱动添加。5、编译内核和实验一的编译方法一样,点击埜来实现编译。特别注意现在是在使用模拟器,所以在编译选项中应该选中“EMULAT0R:X86 WIN32。编译之前,在Build Option选项标签中确保Enable CE Target Control System , uEnable Kernel DebuggernEnable KITL” 被选定,这些选项允许内核向PB传送调试信息。单击“0K”确定。如图3-7所示:图3-7编译6、加载驱动内核编译完毕后开始在模拟器下加载。单击Target下面选择Configue

温馨提示

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

评论

0/150

提交评论