WinCE5.0提供了一个标准的流驱动格式,大大方便了设备驱动程序的开发工作。但是传统的开发方式往往效率很低。方法如下:
1.在Platform Builder下建立一个流驱动的dll工程。
2.为流驱动增加注册表项。如:
[HKEY_LOCAL_MACHINE\Drivers\Builtin\IRControl]
"Prefix"="IRC"
"Dll"="irc.dll"
"Order"=dword:66
"Index"=dword:1
3.修改platform.bib 文件,将流驱动的dll文件打包到NK.bin.
4.MakeImg,生成包含流驱动的NK.BIN.
整个过程烦琐,而且只要稍加修改,就要重先makeImg,大概要浪费3-5分钟.这种开发效率是很低的.
下面2种介绍在EVC下快速开发WINCE流驱动的方法,是我自己亲身经验,拿出来与大家分享,也希望和各高手相互学习和探讨.
WINCE的驱动,不象桌面windows驱动开发那样烦琐,windows驱动开发分好几种,如wdm啦,VXD啦,等等,开发这些驱动需要专门的开发环境和工具,给开发者带来比较高的技术门槛.所幸的是,WinCE的驱动开发,没有这么多的限制和门槛.而且应用程序可以直接和底层硬件打交道的(注:尽管这样,笔者还是不建议大家直接用应用程序访问底层硬件,这种做法是不安全的),甚至中断初始化,中断线程都可以在用户级的应用程序完成.所以给驱动开发带来了不少的便利.依我自己的经验来看,具体有以下2种方法.
1.利用EVC生成驱动的DLL.
1).新建一个evc的dll工程,将流驱动代码移植到evc代码中。
2).编写导出文件*.def,将流驱动的10个标准函数导出.并在Project--->Setting--->Link--->Project options里面标注,如: /def:"IR.DEF" .(这一步如果不做,生成的驱动将不可用)
3).编译代码,这个时候一般会出现一些错误,如找不到头文件或库文件等错误,请在wince的安装目录下找到相应的头文件和库文件,在Tools--->options--->Directories中指明头文件和库文件的路径。在Project--->Setting--->link中指定相应的*.obj文件(具体文件视源代码调用了哪些驱动和库,到wince的目录下找到这些obj文件链接进来即可)
4).编写一个应用程序来调试驱动.利用RegisterDevice/DeRegisterDevice动态加载/卸载流驱动,模拟WinCE设备管理程序的功能. (笔者写了一个基于MIPS CPU的流驱动调试工具.欢迎下载试用http://files.cnblogs.com/Jade2009/CE_Driver_Assist.exe.rar
以上这种方法,完全脱离了Platform Builder的开发环境,使驱动的开发和调试工作象开发应用程序一样轻松和快捷.可 以在驱动程序中利用RETAILMSG函数从UART口输出调试信息.
下面再介绍一种方法,就是利用EVC将驱动程序写成exe,直接象调试应用程序一样调试驱动.最后将调试好的源代码移植到驱动程序的dll工程中去.具体方法和第一种方法类似,不同之处在于,前者是新建一个纯DLL工程(带导出函数),后者是新建一个MFC的exe工程而已.编译的头文件和库文件方法2者雷同.这种方法的好处是可以直接编译成evc的debug工程,可以在源代码中进行单步跟踪调试和设置断点,大大的提高了驱动程序的调试效率.