欢迎加入Wince技术讨论群QQ#326444254
wince驱动程序流程
在ce中,最简单的驱动莫过于build-in设备的流接口驱动,这类驱动只需要做一下工作:
1.实现一个动态库,而动态库中实现一下接口函数:
DWORD xxx_Init( LPCTSTR pContext, LPCVOID lpvBusContext);
DWORD XXX_Deinit(DWORD hDeviceContext)
DWORD xxx_Open(DWORD hDeviceContext,DWORD dwAccess, DWORD dwShareMode);
DWORD xxx_Close( DWORD hDeviceContext );
void XXX_PowerUp( DWORD hDeviceContext );
void XXX_PowerDown(DWORD hDeviceContext );
DWORD xxx_IOControl( DWORD hDeviceContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut );该接口最为重要,所有的接口读写操作都是以它为基础
2.在注册表中添加(分common.reg,platform.reg,project.reg)一般添加在platform.reg中,直接修改的是bsp包中的注册表项
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SampleDev]
"Prefix"="XXX" "Dll"="MyDev.Dll" "Order"=dword:1
3.在BIB(二进制映像文件)中添加项目,该文件功能是告诉编译器哪些exe,dll及文件被添加到bin映像中
MyDev.dll $(_FLATRELEASEDIR)\MyDev.dll NK SH
SH表示系统隐藏文件
4.在你的wince500的platform中对应的bsp包direction中找到driver文件,在该文件下新建一个文件夹,命名为你的驱动名,将你写好的.cpp和.h文件添加进来,在新建.def和source以及makefile文件
makefile文件是告诉编译器如何进行编译,但是没有实际功能,实际的工作都由.def和source文件做了。
.def主要是定义需要输出的函数,这些函数能够被其他代码动态加载的方法调用
LIBRARY MyDev(这个字符串要和将要生成的动态库的文件名一样)
EXPORTS XXX_Init XXX_Deinit XXX_Open XXX_Close XXX_PowerOff XXX_Power_Down XXX_IOControl
source文件很重要,主要是帮助生成动态库,以及指明动态库的入口函数,动态库名等
TARGETNAME=MyDev(指定要生成的动态库的名称)
TARGETTYPE=DYNLINK(指定要生成的是一个动态库) (下面两项指定需要与哪些动态库链接,一般要第一项就足够了) TARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \ $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib DEFFILE=MyDev.def (指定def文件) DLLENTRY=DllEntry(指定动态库的入口函数) SOURCES=(请在这写上你所有源文件的名字,它们将会被编译) |