wince下流式驱动的编写
2010-12-28 16:07
176 查看
WinCE的设备驱动程序都是简单的DLL,然后导出特定的入口函数。驱动程序不是由与驱动打交道的应用程序直接载入而是由设备管理器在载入的(在Wince
5.0由Device.exe加载的,在Wince6.0是由uDevice.exe加载的)。
在Wince下的驱动大多数是流式设备驱动,一个流式驱动会暴露12个外部入口函数。设备管理器会调用它们与驱动程序交互。
列举一下每种入口函数的作用:
XXX_Init
初始化设备,在设备被加载时调用
XXX_PreDeinit
通知程序把设备句柄设置无效,在设备即将卸载时调用。
XXX_Deinit
释放设备,在设备被卸载时调用
XXX_Open
打开设备进行读、写,应用程序调用CreateFile打开设备时调用
XXX_Close
关闭设备,应用程序调用CloseHandle关闭设备时调用
XXX_PreClose
通知驱动程序把打开的句柄设置无效
XXX_Read
从设备中读取数据,应用程序调用ReadFile时调用
XXX_Write
向设备中写入数据,应用程序调用WriteFile时调用
XXX_Seek
移动设备中的数据,应用程序调用SetFilePointer时调用
XXX_IOControl
对设备发送控制命令,应用程序调用DeviceIOControl时调用
XXX_PowerUp
在系统恢复挂起前被调用
XXX_PowerDown
在系统挂起前调用
我们了解了流式驱动所有外部入口函数作用,现在就可以开始尝试着写一个我们自己的驱动。
1、
在VS2005定制一个WINCE系统的工程中建立一个Subprojects工程,
选择中“Subprojects”点击右键->“Add New Subproject…”弹出对话框如图:
选择“WCE Dynamic – Link Library”在Subproject
name中输入工程名,点击“Finish”就好了。
2、Subproject工程建立后,编译器自动帮你生成一些配置文件如图:
3、新建一个CPP文件,编写驱动代码。
下面我自己写的一个驱动代码:
注意:我们还需要修改一下.bib文件,将
MODULES
XXX.dll
$(_FLATRELEASEDIR)/MyDrv.dll
NK
改为:
MODULES
XXX.dll
$(_FLATRELEASEDIR)/MyDrv.dll
NK K
至于为什么,请查阅http://blog.csdn.net/norains/archive/2010/11/10/6000519.aspx
5.0由Device.exe加载的,在Wince6.0是由uDevice.exe加载的)。
在Wince下的驱动大多数是流式设备驱动,一个流式驱动会暴露12个外部入口函数。设备管理器会调用它们与驱动程序交互。
列举一下每种入口函数的作用:
XXX_Init
初始化设备,在设备被加载时调用
XXX_PreDeinit
通知程序把设备句柄设置无效,在设备即将卸载时调用。
XXX_Deinit
释放设备,在设备被卸载时调用
XXX_Open
打开设备进行读、写,应用程序调用CreateFile打开设备时调用
XXX_Close
关闭设备,应用程序调用CloseHandle关闭设备时调用
XXX_PreClose
通知驱动程序把打开的句柄设置无效
XXX_Read
从设备中读取数据,应用程序调用ReadFile时调用
XXX_Write
向设备中写入数据,应用程序调用WriteFile时调用
XXX_Seek
移动设备中的数据,应用程序调用SetFilePointer时调用
XXX_IOControl
对设备发送控制命令,应用程序调用DeviceIOControl时调用
XXX_PowerUp
在系统恢复挂起前被调用
XXX_PowerDown
在系统挂起前调用
我们了解了流式驱动所有外部入口函数作用,现在就可以开始尝试着写一个我们自己的驱动。
1、
在VS2005定制一个WINCE系统的工程中建立一个Subprojects工程,
选择中“Subprojects”点击右键->“Add New Subproject…”弹出对话框如图:
选择“WCE Dynamic – Link Library”在Subproject
name中输入工程名,点击“Finish”就好了。
2、Subproject工程建立后,编译器自动帮你生成一些配置文件如图:
3、新建一个CPP文件,编写驱动代码。
下面我自己写的一个驱动代码:
MyDriver.defLIBRARY MYDRIVE EXPORTS DRV_Init DRV_PreDeinit DRV_Deinit DRV_Open DRV_Close DRV_PreClose DRV_Read DRV_Write DRV_Seek DRV_IOControl DRV_PowerUp DRV_PowerDown
现在我们可以测试一下驱动程序,测试代码如下:
// fff.cpp : Defines the entry point for the console application.
//
#include <windows.h>
#include<tchar.h>
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR ReadBuf[MAX_PATH] ={0};
TCHAR WriteBuf[MAX_PATH ]={TEXT("Write new data!")};
DWORD dwNumber = 0;
HANDLE hDevice = CreateFile(TEXT("DRV1:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hDevice)
{
ReadFile(hDevice,ReadBuf,MAX_PATH,&dwNumber,NULL);
//ReadBuf中的内容为:“MyDrv”
WriteFile(hDevice,WriteBuf,MAX_PATH - 1,&dwNumber,NULL);
ReadFile(hDevice,ReadBuf,MAX_PATH,&dwNumber,NULL);
//ReadBuf中的内容为:“Write new data!”
CloseHandle(hDevice);
}
return 0;
}
注意:我们还需要修改一下.bib文件,将
MODULES
XXX.dll
$(_FLATRELEASEDIR)/MyDrv.dll
NK
改为:
MODULES
XXX.dll
$(_FLATRELEASEDIR)/MyDrv.dll
NK K
至于为什么,请查阅http://blog.csdn.net/norains/archive/2010/11/10/6000519.aspx
相关文章推荐
- wince下流式驱动的编写 .
- WinCE7.0的驱动编写和加载
- WinCE下编写USB client驱动时会用到的一些API
- Wince 5.0驱动中断的编写总结
- WinCE驱动编写小结
- WinCE驱动编写小结
- wince 驱动编写的八部曲
- WinCE驱动编写小结
- WINCE驱动编写
- WinCE 流驱动接口编写一步一步来
- 关于WinCE驱动编写时的IO地址映射
- WINCE 按键驱动编写
- WINCE驱动编写
- wince 驱动编写的八部曲
- WinCE驱动编写小结
- wince 的GPIO口的简单流驱动的编写规范
- WINCE驱动编写小结
- WinCE下编写USB client驱动时…
- WinCE下编写USB client驱动时会用到的一些API
- WinCE驱动编写小结(转载)