第一章 WINDOWS CE 驱动简介
1.1什么是驱动
设备驱动是从操作系统中提取物理或者虚拟设备的软件。
设备驱动程序是操作系统与硬件交互的途径,是连接硬件与
操作系统的桥梁。
分类:
(1) 按是否分层进行分类:单层驱动、分层驱动、混合驱动;
(2) 按加载的时间进行分类:内置驱动、流驱动;
(3) 按加载到的位置进行分类:用户态驱动和内核态驱动。
驱动模型名词解释:
(1) DDI(Device Driver Interface)函数:是操作系统与驱动程序通信的接口协议;
(2) MDD(Model Device Driver)模型设备驱动;
(3) PDD(Platform Dependence Driver):平台相关驱动;
(4) DDSI(Device Driver Service Provider Interface)函数:是MDD与PDD之间通信的接口协议。
分层驱动:(MDD/PDD)
MDD对于不同的平台来讲它的模型驱动程序是通用的,既是源码也是库,它连接PDD层并定义它希望调用的函数,把预先定义好的函数提供给操作系统,处理比如中断处理这样的复杂任务。一般情况下MDD不需要修改
PDD与MDD都有硬件接口,这就要求它们必须适合目标平台的需要,一个PDD由针对具体硬件的函数组成而这些函数与一个MDD相对应,但这种对应不是直接的一一对应。
单层驱动:
单层驱动就是把所有的驱动程序都写在了一起,是一种比较老的驱动编程方法,对程序人员的要求很高。
内置驱动;
内置驱动不是用驱动管理器来管理的,它也没有必要导出和普通驱动一致的API接口。内置驱动程序通常仅仅被GWES(Graphical Windows and Event System)进程使用,由GWES.EXE加载它,此类驱动一般都是与图形界面相关的I/O设备驱动。
流驱动:
流驱动是流接口驱动程序的简称,不管是物理设备还是虚拟设备,只要它们的驱动程序导出流接口函数给系统或应用程序使用,这样的驱动就可以叫做流驱动。
Windows CE 的流驱动程序被当作一个特定的文件系统设备,它提供的流接口函数跟通常的文件系统的API函数紧密联系,如OpenFile()、ReadFile()等,在使用这些API函数的时候,要把指定的文件名改成相应的设备名就可以。
流驱动是通过设备管理器(Device Manager)来加载或管理的
用户模式和内核模式驱动
在WIN CE架构中,驱动既可以在用户模式下运行又可以在内核模式下运行。内核模式驱动运行在内核上下文中,用户模式驱动运行在一个或多个进程上。设备管理器(devmgr.dll)管理着用户模式和内核模式驱动。
内核模式驱动:
设备管理器把所有驱动默认当作内核模式驱动加载到内核空间,除非在注册表中设置了DEVFLAGS_LOAD_AS_USERPROC旗标。内核模式驱动能够调用内核API函数,直接使用内核的coredll调用k.coredll.dll因此执行效率很高,因为它可以直接使用用户存储空间。内核模式驱动对读写内存不做任何限制。
用户模式驱动:
当在注册表中设置DEVFLAGS_LOAD_AS_USERMODE旗标时,加载的驱动才是用户模式驱动。这时这个驱动将引起用户模式驱动主进程调用udevice.exe,它将隔离其他的驱动,就是说这个驱动出现问题也不会影响到别的驱动。
驱动开发的步骤:
开发一个完整的Windows CE驱动通常需要下面六个步骤。
(1)研究所需开发驱动的硬件的工作原理。设备驱动程序的代码是直接与硬件进行交互,因此,开发人员必须对所要开发驱动程序的硬件的工作原理、功能特性以及工作方式等要有充分地认识。这通常需要开发人员耐心地阅读数据手册,这一步比较简单,只需要看懂数据手册就可以了。
(2) 研究Windows CE驱动的工作机制。
主要弄清一下几点.
1) 访问外设的方式。
2)处理中断的方式。
3)处理DMA的方法。
4)内存访问方法。
5)同步与异步操作。
(3)选用合适的驱动模型。根据实际的项目要求选用适当的驱动模型。
(4)编写代码。在微软提供的驱动模板代码的基础上编写自己的驱动程序。
(5)调试。调试也很关键,如果这一步跳过,对驱动的性能没有保证。这一步最坏的情况是可能要从第一步开始重新设计驱动程序。
以上步骤都通过后一个完整的驱动程序开发就结束了。
WINDOWS CE 共享的驱动代码
路径
描述
WINCE600\Platform\%_TGTPLAT%
包含硬件平台相关代码。这个目录主要包含OAL,配置文件以及BSP驱动。可以在以下路径修改依赖硬件平台的相关驱动WINCE600\Platform\%_TGTPLAT%drivers
WINCE600\ Platform \Common\src\soc
SOC驱动程序包含依赖特定处理器的驱动程序。Soc驱动包含了实时时钟、计时器、调试网卡等的微处理器相关的OAL驱动。微处理器相同时,可以使用相同的SOC驱动库
WINCE600\public\common\oak\drivers
通用驱动程序包含平台无关的驱动代码,可以链接与平台相关的代码来创建一个硬件驱动。通用驱动程序不指定硬件平台和处理器类型。任何SDB(标准开发板)板卡都可以使用这些驱动
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/guly699/archive/2009/10/06/4636005.aspx