wince驱动开发入门

原创 2013年12月02日 09:12:08
因为课题前期调研没做好,用的CPU板卡和数据采集卡来自两个部门。加上买的是裸板,自己定制的OS,技术支持不爱搭理。所以给的AI板卡的驱动一直装不上,自己在郁闷中寻找答案,就扎进了wince驱动的知识库里了。不管驱动装不上是不是这个原因,学点东西总没有坏处。做点记录备查:)
         首先是wince驱动的分类问题。按照书上讲的说CE下驱动分成单体驱动和分层驱动,而看到另一种说法是本机驱动和流式驱动。经过microsun大哥的指点,把这两种分类法分开了。在这里引用一下:
“单体与分层只是从代码的形式上做的分类.分层驱动代码上分为PDD与MDD,一般的微软已经实现了MDD,可能也实现了PDD,我们只需要对PDD做些修改就能使用,比如音频的驱动,显示的驱动。单层驱动是把PDD与MDD写在一起,没有做严格的区分,通常这种驱动比较简单,比如:ATADISK。
至于本地驱动和流式驱动是从驱动与系统其它模块(调用者)的接口形式上做的分类.其实,本地驱动这个名称不大恰当,可能叫专用驱动或其它名字更为合适.它是指调用它的模块给它有特定的接口,比如电源驱动和通用LED驱动。而串口,网卡等就是流接口驱动程序.
所以,一个驱动程序可以是单体的流式驱动,例如:ATADISK.也可以是分层的流式: 如OHCI 
        按照我的理解,单体和分层是驱动实现方式上的分类,而本地和流式则是驱动模型上的分类,所谓本地驱动就是操作系统有保留专门的接口,所谓流式是指编写的DLL文件里可以导出各种流式接口函数。
         第二点:驱动的功能属性。设备驱动程序是操作系统内核和硬件的接口,操作系统定义了一组标准的接口,编写驱动的过程也就是实现这些接口。从应用程序到具体硬件间有如下这些环节起作用:应用程序-调用OS函数-操作系统-驱动接口-驱动程序-硬件操作函数-硬件。在wince里驱动都以用户态的DLL存在,需要通过进程加载到slot里。共有三类系统进程用来加载:Device.exe,GWES.exe,FileSys.exe.绝大多数设备驱动都是通过Device.exe加载的。需要注意的是,不同的OS保留的设备驱动接口是不一样的,如桌面windows和wince就不同。
     第三点:wince下设备的初始化分为两个阶段:Device.exe的初始化;外设的枚举和加载。其流程是:上电-启动bootloader-启动NK-启动注册表init键(Device.exe启动)-初始化数据结构,I/O,电源管理等-加载BusEnum.dll(总线枚举器)-枚举注册表下Driver/buildin的所有子键。这里的枚举过程就是循环调用ActivateDeviceEx()函数加载驱动的过程。在OS启动完毕后,我们可以用PB的Remote Registry Tool查看H_L_M/drivers/active包含的子键,看哪些驱动随启动而加载 。
     第四点:流接口驱动的概念。暴露流式接口函数的驱动即是流驱动,它把外设抽象成一个文件。过程是:应用程序使用文件API对设备进行访问,OS接受API调用FileSys.exe,转到device.exe,调用流接口,与硬件交互。所谓流接口函数有十个,包括XXX_InitXXX_DeinitXXX_OpenXXX_CloseXXX_ReadXXX_WriteXXX_PowerUpXXX_PowerDownXXX_SeekXXX_IOControl,在wince5.0中增加le了XXX_PreClose,XXX_PreDeinit.而我们在应用程序里对应的文件API有CreateFileDeviceIoControl ReadFile WriteFile,CloseHandle,SetFilePointer.  
     第五点:编写流驱动的步骤。有两种实现途径:1。写DLL,做成Project,加入到OS里。2。改BSP,把驱动写在BSP里,再选择那个BSP做OS。第一种方法步骤是在PB中新建一个DLL项目,编写一些输入函数,寄存器,外设的声明,写DLLENTRY函数;实现流接口函数;编写DLL的导出函数文件.DEF;为驱动程序写入注册表项,还需要修改bib文件。 第二种方法就是在platform/BSP/drivers下新建一个目录,然后在drivers目录中的dirs文件中加入新建的目录名。在新建的目录下,新建你的源代码文件,在其中实现DLL函数。新建名称分别为sources, makefile, ***.def的文件;修改platform.regplatform.bib文件
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Wince 流驱动的实现原理及过程

1 Windows CE驱动介绍     驱动程序是介于操作系统和设备之间的一个代码层,它的主要作用是为操作系统提供一个接口,以操作不同的硬件,包括物理的和虚拟的设备。虽然驱动程序有很多种,但从编程...

WinCE下驱动开发入门记录(一)

       这两天时间完全泡在CE的驱动开发中,学习学习,感觉就是资料不好找,难入门难上手,象我这样仅仅只有eVc4的更是没法调试没法跟踪,困难还是挺多的。学习了两天,现在感觉有那么点意思了,记录...
  • Riklin
  • Riklin
  • 2008年11月27日 18:11
  • 3385

WinCE 流驱动接口编写一步一步来

在WinCE.net中,最简单的一个驱动程序莫过于一个内置(Built-in)设备的流接口驱动。对于一个不支持热拔插的设备,最快捷的方法就是为其实现一个内置的流接口的驱动。对于这样一类驱动程序,我们只...

Sqlite和SQLCE在Windows Mobile 6上的性能对比

最近公司需要将桌面系统部署到PDA上面去,选择了WM6作为部署平台。在选择数据库方面出现了一点顾虑,因为对于PDA而言,性能是首要考虑的因素。      在开源的数据库Sqlite和SQLCE之间徘...
  • educast
  • educast
  • 2012年12月06日 10:26
  • 704

C# 中的泛型与重载

C#中如泛型与重载有相同类型(类型等价),普通函数会优先调用,而且在决议过程中,泛型函数中的where条件未计入考虑。测试程序如下: class A { public overrid...

WinCE5.0入门全程导学!(开发环境建立+流驱动开发)

WinCE5.0入门全程导学!(开发环境建立+流驱动开发)    文章来源:csdn jbb0523  地址:http://blog.csdn.net/jbb0523/article/deta...

详解WinCE下USB Host驱动开发

作者:我想说wince离我远点 转自:http://blog.csdn.net/lqxandroid2012/article/details/8649271 WinCE下所有的驱动都是以DLL...
  • whw8007
  • whw8007
  • 2014年01月22日 12:36
  • 417

利用WinCE6.0的新特性CellCore快速进行GSM驱动开发

本文为御风独舞原创,转载请注明出处:hi.baidu.com/roooy,谢谢:)CE 6.0有许多新特征被整合到了Visual Studio2005当中,包括最新的MFC, ATL, STL, WT...

浅谈WinCE平台USB摄像头驱动开发流程

作者:FLandY1982 转自:http://blog.csdn.net/flandy1982/article/details/5254812 作者:IT168 潘少红   2009...
  • whw8007
  • whw8007
  • 2013年05月07日 14:40
  • 617

wince流驱动开发流程(转载)

转载地址:http://www.cnblogs.com/gmh915/archive/2009/01/08/1945443.html 首先是wince驱动的分类问题。按照书上讲的说CE下驱动...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:wince驱动开发入门
举报原因:
原因补充:

(最多只允许输入30个字)