WinCE驱动综述

 驱动分类
按加载方式和接口类型分
 本机驱动程序(Build-in Driver)
  通常邮GWES加载,驱动接口一般是定制的
 
 流驱动(Stream Driver)
  通常是由Device Manager加载,驱动接口是标准的流式接口
  
 混合型驱动程序
  同时有定制和流驱动两套驱动接口,但是和系统的交互只使用流式驱动接口,比如PC卡槽驱动
  
按驱动层次分类
 层次型驱动程序(Layered Driver)
  MDD(Model Device Driver),与硬件无关,面向上层的应用程序,一般由微软建立统一框架
  PDD(Platform Dependent Driver),针对具体的硬件平台的操作代码,一般由驱动开发商实现
  MDD和PDD之间通过标准的设备驱动服务高提供的接口DDSI连接
  
 独立型驱动程序(Monolithic Driver)
  独立的驱动程序包含了MDD面向上层应用和PDD面向硬件平台两方面的代码
  适用于操作不复杂的驱动
  减少了MDD和PDD传递之间信息的开销,实时性更强
  
  
流驱动的特点
 实现一种标准的接口
 尤其适用于IO的操作,是嵌入式中最常见的驱动
 操作接口和文件系统的操作类似,通过,CreatFile,ReadFile,WriteFile,IOControl函数来操作
 应用程序和流驱动交互时,可以把设备当作文件来操作,呵呵,类似于Linux呀
 
 
流驱动的实现步骤
 选择代表设备的文件各前缀
 实现驱动的各个标准接口函数
 建立.DEF文件
 在注册表中为驱动建立表项
 
  选择代表设备的文件各前缀
   文件前缀名在系统中必须唯一
   文件前缀名必须是三个字母,若有多个同类设备,由后缀一个数字区分,如COM1,COM2,LPT3
   文件前缀名将会在驱动的标准接口的函数体现,比如XXX_Init,XXX_Close等
   
  标准接口函数
   XXX_Init 通知设备管理器为设备分配初始代资源
   XXX_Deinit 通知设备管理器回收设备初始化时分配的资源
   XXX_open 打开设备,应用程序调用CreatFile时,通过文件系统映射为XXX_Open
   XXX_Close 关闭设备,应用程序调用CloseFile时,通过文件系统映射为XXX_Close
   XXX_PowerUp 设备上电时,操作系统调用该函数完成必要的上电操作
   XXX_PowerDown 设备掉电时,操作系统调用该函数完成必要的关机操作
   XXX_Read 从打开的设备文件中读取数据,可能通过ReadFile映射
   XXX_Write 向打开的设备文件写数据,可以通过WriteFile映射
   XXX_Seek 文件定位,根据设备的情况决写是否支持
   XXX_IOControl IO扩展操作,可以根据设备的情况来决定支持何种操作模式
  
  建立.DEF文件
  流驱动一般以DLL的形式存在
  DEF文件定义了DLL需要导出的接口集
  DEF文件的名称与设备驱动的名称相同
  
  DEF示例
   SampleDrv.DEF
   LIBRARY SampleDrv
   EXPORTS
   SDV_Init
   SDV_Deinit
   SDV_Open
   SDV_Close
   SDV_Read
   SDV_Write
   SDV_Seek
   SDV_IOControl
   SDV_PowerUp
   SDV_PowerDown
   SDV_DLLEntry
   
  在注册表中添加驱动项
   在注册表中添加驱动程序的入口点
   注册表位于Root Key下,一般为[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/SampleDrv]
   建立必要的子键和键值,“Prefix"和”DLL"是两个重要的而且必须的键,分别描述了设备的前缀
   和驱动程序的动态链接库名
   建立驱动程序的其他子键
   
  注册表示例
   [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/SampleDrv]
   “Prefix”=”SDV”
   “Dll”=SampleDrv.dll
   “Order”=dword:2
   “Ioctl”=dword:4
   
  函数原型分析
   DWORD XXX_Init(DWORD dwContext)
    参数dwContext指向一个描述设备接口的字符串
    函数的返回设备的上下文句柄
    
   BOOL XXX_Deinit(DWORD hDeviceContext)
    参数的hDeviceContext上下文句柄
    返回为是否成功卸载
    
   DWORD XXX_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD ShareMode)
    hDeviceContext是设备上下文句柄
    AccessCode是打开设备的权限描述符
    ShareMode是设备的文件共享模式
    函数返回设备打开后的上下文句柄
    
   DWORD XXX_Close(DWORD hOpenContext)
    hOpenContexe是要关闭设备的上下文句柄
    非0返回代表函数关闭失败
    
   DWORD XXX_Read(DWORD hOpenContext,LpVOID pBuffer,DWORD count)
    hOpenContext是打开上下文的句柄
    pBuffer指向应用程序用于存放读取数据的缓冲区
    Count是指定从设备中读取多少个字节的数据
    函数返回值是实际读取的数据数量
    
   DWORD XXX_Write(DWORD hOpenContext,LPVOID lpBuffer,DWORD count) 
    类似于XXX_Read,方向相反
    返回是实际写入的数据数量
    
   DWORD XXX_Seek(DWORD hOpenContext,long Amount,WORD type)
    hOpencontext打开设备的上下文句柄
    Amount是指定指针要移动多少字节,正值是向文件尾移动,负值是向文件头移动
    type描述了设备文件起始点位置
    函数返回设备文件的当前指针

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值