WINCE流驱动的动态加载调试与用EVC快速开发WINCE的流驱动

这种驱动程序主要呈现流式函数接口,主要输出XXX_Init,XXX_Deinit,XXX_Open,XXX_Close,XXX_Read,XXX_Write,XXX_Seek,XXX_IOControl,XXX_PowerUp,XXX_PowerDown等流式接口,注意上述的几个接口一定都要输出,另外XXX必须为三个字符,否则会出错。可以手工的调用RegisterDevice()和DeregisterDevice()函数来加载和卸载驱动程序。用户可以将此类的设备作为标准的文件来操作,只要调用相应的文件操作就可以和驱动程序打交道。

1.在EVC下编译驱动源文件,生成驱动的DLL.

注意:在编译时请注意project setting,要加入驱动的导出文件,即在project options 中加入 /def:"bsp_ir.def" ,这一步很重要,否则驱动无法被应用程序调用,当然也可以用__declspec(dllexport) ,它就是为了省掉在DEF文件中手工定义导出哪些函数的一个方法。

2.用EVC编写一个动态加载驱动的程序,例如:

//动态加载流驱动;

HANDLE m_hIR;
m_hIR = RegisterDevice(TEXT("IRD"),1,TEXT("bsp_ir.dll"),1);  //这里是你的流驱动的文件名
if(m_hIR == NULL){
  ::MessageBox(NULL,NULL,_T("load driver fail!"),MB_OK);
         }
 else
  ::MessageBox(NULL,NULL,_T("load driver sucess"),MB_OK);

//卸载流驱动;
 ::MessageBox(NULL,NULL,_T("unload driver"),MB_OK);
 DeregisterDevice(m_hIR);

3.将生成的DLL文件复制到目标平台的windows目录下,即可运用应用程序进行驱动的动态加载了。
  我没有在注册表里添加驱动的注册信息,也可以用应用程序访问到。看来不一定是必须的。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wincemobile/archive/2009/05/06/4154981.aspx

 

利用EVC快速开发WINCE5.0的流驱动
原创地址http://www.cnblogs.com/jade2009/archive/2009/01/04/wince.html
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工程,可以在源代码中进行单步跟踪调试和设置断点,大大的提高了驱动程序的调试效率.

你可能感兴趣的:(windows,null,dll,mfc,exe,WinCE)