CE设备驱动程序_第1页
CE设备驱动程序_第2页
CE设备驱动程序_第3页
CE设备驱动程序_第4页
CE设备驱动程序_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、Windows CE设备驱动程序南京大学软件学院2005年6月内容 Windows CE设备管理 设备驱动模型 驱动程序的中断处理 流接口驱动程序 编写流接口驱动程序设备管理体系结构 设备管理的分层模式用户软件设备无关的系统软件硬件抽象层4个部分:I/O管理;PnP管理;电源管理;管理和支撑的例程库设备管理体系结构(续) I/O管理 隔离应用层程序和内核,负责注册和管理流接口驱动程序; 定义Windows CE设备驱动机制和一个设备驱动程序的有序工作框架; 实现I/O资源分配和查询,提供标准API函数加载和卸载驱动程序 PnP管理 自动识别硬件设备并自动加载相应驱动程序; 需要硬件支持; 电源

2、管理 管理系统能源分配策略,决定系统能耗状态变化; 硬件支持 例程库设备管理器 Windows CE设备管理器 设备管理的核心机构,负责跟踪、维护系统设备信息并对设备资源进行调配 Device.exe 用户级程序(不是内核的一部分!) 设备管理器的任务 系统启动或收到用户添加外围设备的信息时初始化驱动程序的加载 向内核注册特定的文件名 通过从外围设备获得即插即用标识符,或激活一个检查子程序来发现可以处理该设备的驱动程序,为外围设备找到合适的驱动程序 通过读写注册表加载、跟踪驱动程序 不需要设备时,卸载驱动程序流接口驱动程序的加载 加载的三种方法 系统启动时加载 注册表项:HKEY_LOCAL_

3、MACHINEdriversRootKey HKEY_LOCAL_MACHINEdriversBuiltIn 设备管理器自动检测外围设备时加载 例:PC卡 使用ActivateDeviceEx加载 设备管理器不能自动检测或加载时使用 例:串口设备ActivateDeviceEx函数 接口HANDLE ActivateDeviceEx( LPCWSTR lpzaDevKey, /字符串指针,指向设备驱动程序的注册键 LPCVOID lpRegEnts, /REGINI结构数组头指针 DWORD cRegEnts, /REGINI结构数组成员个数 LPVOID lpvParam /通常为NULL)

4、; 返回:当前驱动程序注册的句柄 通过内部函数StartOneDriver实现ActivateDeviceEx的使用 一个驱动程序注册表部分的内容HKEY_LOCAL_MACHINEDriversBuiltInPM“Prefix”=“PWR”“Dll”=“pm.dll”“Order”=dword:0“Ioctl”=dword:4“Index”=dword:0“IClass”=multi_sz:”A32942B7-920C-486b-B0E6-92A702A99B35” 加载方法ActivateDeviceEx(“ HKEY_LOCAL_MACHINEDriversBuiltInPM”, );内

5、容 Windows CE设备管理 设备驱动模型 驱动程序的中断处理 流接口驱动程序 编写流接口驱动程序驱动程序模型 驱动程序模型 决定了驱动程序的软件接口 不同的驱动程序模型通过它们支持的软件接口来区别,而不是适用的设备 两种驱动程序模型 本机设备驱动程序 流接口驱动程序 其它分法 整体结构(monolithic)/分层结构(layered)本机设备驱动程序 本机设备驱动程序 适用于集成到WinCE平台的设备,如键盘、显示器、PC卡插槽等; GWES的一部分 启动时加载 驱动程序样本 PlatformBuilder 整体和分层 MDD(Model Device Driver), PDD(Pla

6、tform Dependent Driver)流设备驱动程序 流设备驱动程序 一般类型的设备驱动程序,支持几乎所有可连接在WinCE平台上的外部设备(更常用!) 表现为用户级DLL 实现一组流接口函数,这些函数使得应用程序可以通过文件系统访问驱动程序 不支持外部设备、仅提供服务的流接口驱动程序驱动程序系统结构驱动程序系统结构(续) 术语 DDI: Device Driver Interface DDSI: Device Driver Service Interface MDD的任务: 链接PDD层并定义它希望调用的函数(DDSI) 把不同的函数集提供给操作系统(DDI). 负责与GWES模块和

7、内核通信,包含一些复杂的操作,例如中断处理等。内容 Windows CE设备管理 设备驱动模型 驱动程序的中断处理 流接口驱动程序 编写流接口驱动程序ISR和IST 中断处理分两部分 中断服务例程(Interrupt Service Routine, ISR) 中断服务线程(Interrupt Service Thread, IST) ISR 确定把哪个中断标识返回给核心汇中断处理器 越短、越快越好 IST 执行大多数中断处理任务 IST使用InterruptInitialize函数注册自己,然后使用WaitForSingleObject等待中断请求事件 在驱动程序的XXX_Init里完成IS

8、T中断处理 要实现IST必须实现两个过程: IST的中断必须和一个事件相关联 IST必须通过WaitForSingleObject等待该事件的唤醒 具体实现过程(XXX_Init函数中定义): 创建一个事件(CreateEvent) 得到系统的中断号(KernelIoControl) 创建一个挂起的IST(CreateThread) 设置IST优先级(CeSetThreadPriority) 注册中断(InterruptInitialize) 恢复IST,IST开始服务(ResumeThread) 通过WaitForSingleObject等待事件KernelIoControl函数 接口BOO

9、L KernelControl( DWORD dwIoControlCode, LPVOID lpInBuf, DWORD nInBufSize, LPVOID lpOutBuf, LPWORD nOutBufSize, LPDWORD lpBytesReturned); 功能: 完成kernel同上层应用程序的通信InitializeInterrupt函数 接口BOOL InterruptInitialize( DWORD idInt, HANDLE hEvent, LPVOID pvData, DWORD cbData); 功能: 将一个中断和一个事件相关联内容 Windows CE设备管

10、理 设备驱动模型 驱动程序的中断处理 流接口驱动程序 编写流接口驱动程序流接口驱动程序的工作结构 设备作为文件系统的一个特殊文件相关的注册表项 HKEY_LOCAL_MACHINEDrivers键 设备管理程序使用该键中的注册键管理驱动程序 子键 Active 包含由设备管理程序加载的跟踪当前活动的驱动程序 BuiltIn 包含由WinCE平台制造商提供的驱动程序,系统启动时加载 PCMCIA 包含与PC卡及其流接口驱动程序有关的子键 Resource 记录系统中断和I/O使用情况设备文件名 格式 前缀 + 索引 + 冒号 例:”COM1:”, “FSD1:” 前缀 三个大写字母 存储在驱动程

11、序对应注册表键的”Prefix”子键中 索引 区分同一驱动程序管理的不同设备 缺省: 19; 可通过“index”的值指明起始索引数内容 Windows CE设备管理 设备驱动模型 驱动程序的中断处理 流接口驱动程序 编写流接口驱动程序流接口驱动程序的入口点函数 流接口驱动程序的DLL接口:每个流接口驱动程序必须实现一组标准的函数,用来完成标准的文件I/O和电源管理,提供给WinCE操作系统的内核使用。单访问和多访问 问题: 多个应用程序能否同时访问同一个设备,或者说,驱动程序是否允许设备同时被多次打开处理? 使用hOpenContext参数来实现单访问和多访问。 如果是实现单访问,则第一次对

12、XXX_open的调用返回一个合法值,保持该值的合法性,后来的调用都返回空值; 若是实现多访问,对于XXX_open的调用每次都返回不同的值。流接口驱动程序的实现(1) 选择编写工具 Embedded Visual C Platform Builder 为了方便调试,选择PB,在Windows CE模拟器中实现一个实现简单存储功能的流接口驱动程序流接口驱动程序的实现(2) 创建内核。 打开Platform Builder的“new Platform”的向导,选择下一步的“Emulator :X86”选项,然后选择自定义选项,输入工程名称;在CustomDevice中选择GUI选项;在Appli

13、cation&services development中选择“ATL”、”C Library&runtime”、”MSMQ”、”MFC”、”SDK for wince”;最后,单击完成即可。流接口驱动程序的实现(3) 创建驱动程序的工程。 选择“WCE DynamicLink Library”项流接口驱动程序的实现(4) 创建并编写驱动程序源文件:流接口驱动程序的实现(5) 编写驱动程序代码。 STR_init STR_Deinit STR_Open STR_Close STR_Read STR_Write 导出接口函数 Def文件String.Def流接口驱动程序的实现(6) 编写驱动程序的注册表部分 两种方法 直接修改PB下面的reg文件; 自己写一个注册表文件通过添加组件的方式添加到内核中。流接口驱动程序的实现(7) 添加驱动程序到定制的内核 有了驱动程序和注册表文件,驱动程序还不能够正确运行,必须把它添加到内核中。 方法:

温馨提示

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

评论

0/150

提交评论