我写了个极简单的驱动程序,就是在2410上挂了一个ram,然后想对这个ram进行读写操作,现在不知道如何对这个驱动写测试代码
我的驱动代码如下
哪位高手愿意帮我看看阿
# include
# include
# include
# include
# include
# include "test_drv.h"
static BYTE g_Tmp=0;
static DWORD g_OpenCount=0;
//static DWORD Dll_PROCESS_ATTACH,DLL_PROCESS_DETACH;
bool WINAPI DllEntry(HANDLE hInstDll,DWORD dwReason,LPVOID lpvReserved)
{
switch( dwReason)
{
case DLL_PROCESS_ATTACH:
RETAILMSG(1,(TEXT("SPL: DLL_PROCESS_ATTACH.\r\n")));
DisableThreadLibraryCalls((HMODULE)hInstDll);
break;
case DLL_PROCESS_DETACH:
RETAILMSG(1,(TEXT("SPL: DLL_PROCESS_DETACH.\r\n")));
break;
}
return(true);
}
DWORD SPL_Init(DWORD dwContext)
{
RETAILMSG(1,(TEXT("::: SPL_Init.\r\n")));
g_Tmp=0;
g_OpenCount=0;
return 1;
}
BOOL SPL_Deinit(DWORD dwContext)
{
RETAILMSG(1,(TEXT("::: SPL_Deinit.\r\n")));
g_Tmp=0;
g_OpenCount=0;
return TRUE;
}
DWORD SPL_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD ShareMode)
{
RETAILMSG(1,(TEXT("::: SPL_Open.\r\n")));
//不允许多个应用程序打开本驱动
if(g_OpenCount!=0)
{
RETAILMSG(1,(TEXT("SPL Open failed.\r\n")));
return 0;
}
g_OpenCount ++;
return g_OpenCount;
}
BOOL SOL_Close(DWORD hOpenContext)
{
RETAILMSG(1,(TEXT("::: SPL_Close.\r\n")));
if(g_OpenCount!=0)
g_OpenCount--;
return true;
}
bool SPL_IOControl(DWORD hOpenContext,
DWORD dwCode,
PBYTE pBufIn,
DWORD dwLenIn,
PBYTE pBufOut,
DWORD dwLenOut,
PDWORD pdwActualOut)
{
RETAILMSG(1,(TEXT("::: SPL_IOControl. \r\n")));
return true;
}
void SPL_PowerUp(void)
{
RETAILMSG(1,(TEXT("::: SPL_PowerUp.\r\n")));
}
void SPL_PowerDown(void)
{
RETAILMSG(1,(TEXT("::: SPL_PowerDown.\r\n")));
}
DWORD SPL_Read(DWORD hOpenContext,LPVOID pBuffer,DWORD Count)
{
uchar * pReadBuffer;
RETAILMSG(1,(TEXT(":::SPL_Read.\r\n")));
if((pBuffer==NULL)||(Count<=0))
{
RETAILMSG(1,(TEXT("::: SPL_Read()parameter is error.\r\n")));
return 0;
}
//映射空间地址
pReadBuffer=(uchar *)MapPtrToProcess(pBuffer,GetCallerProcess());
*pReadBuffer=g_Tmp;
return 1;
}
DWORD SPL_Write(DWORD hOpenContext,LPCVOID pBuffer,DWORD Count)
{
uchar *pWriteBuffer;
RETAILMSG(1,(TEXT("::: SPL_Write.\r\n")));
if((pBuffer==NULL)||(Count<=0))
{
RETAILMSG(1,(TEXT("::: SPL_Write()parameter is error.\r\n")));
return 0;
}
//映射空间地址
pWriteBuffer=(uchar *)MapPtrToProcess((LPVOID)pBuffer,GetCallerProcess());
g_Tmp=*pWriteBuffer;
return 1;
}
DWORD SPL_Seek(DWORD hOpenContext,long Amount,DWORD Type)
{
RETAILMSG(1,(TEXT("::: SPL_Seek.\r\n")));
return 0;
}
新手,很菜,希望大虾指点,我用的是流驱动模式,也不知道对不对
哈哈,测试代码好写,
首先h=createfile(xxxx,...)
第二步,ioctrl(h,x,x,)或read(h,),write(h,x,x,
能给段测试代码给我看看么,简单明了的那种,我现在用的开发板上没有这部分的资料,非常郁闷,谢谢了
引用: 引用 7 楼 sofa1231 的回复:
能给段测试代码给我看看么,简单明了的那种,我现在用的开发板上没有这部分的资料,非常郁闷,谢谢了
周立功出了一本书,叫做——ARM&wince实验与实践。里面有很多使用应用和驱动配合的例子。非常有帮助。
建议楼主看看,
引用: 引用 4 楼 xqhrs232 的回复:
用CE TEST KIT!!!
这个东西不懂怎么用哦?到底是怎么用的?
写一个应用程序,该应用程序可以测试你的各个接口,并且可以动态install和uninstall你的驱动程序。反正我一般这么搞。
ce里面drivers下有很多实例代码的。其实写ce的驱动按照以下步骤。
1.在driver下建立自己的驱动文件夹mydriver,并且把文件夹名添加到dir里面
2.在自己的文件夹中建立source文件。一下是示例
TARGETNAME=mydriver
RELEASETYPE=PLATFORM
TARGETTYPE=DYNLINK
DLLENTRY=DllEntry
TARGETLIBS=\
$(_COMMONOAKROOT)\lib\$(_CPUDEPPATH)\coredll.lib
PREPROCESSDEFFILE=1
INCLUDES=
SOURCES= mydriver.c
3.建立mydriver.c源文件,实现mydriver_Init, mydriver_Open,mydriver_close,mydriver_IOControl,mydriver_Read,mydriver_Write,mydriver_Seek,
mydriver_Deinit.当然了,具体是先什么,要根据你的驱动要求来写。
4.添加注册表项
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\mydriver]
"Index"=dword:1
"Prefix"="mydriver"
"Dll"="mydriver.dll"
"Order"=dword:28
通过以上步骤就可以了.
这四步的大概过程我都了解一些,但是第三步里面的函数具体怎么写我有点不太清楚,我找的资料里大概都是像这样介绍的,但是具体到第三步的时候我就不知道该怎么做了。
我要为一个codec写驱动,相当于为一个ram读写数据,具体怎么操作有点糊涂,好像 在wince里不能直接操作物理地址,要通过什么函数来操作镜像地址,不知道我了解的对不对。
现在还有第二个问题是驱动写完并做成镜像文件后,测试代码不知道怎么写,不知道哪位能否指点下,或者能不能给点类似的资料我参考下。
引用: 引用 13 楼 sofa1231 的回复:
ce里面drivers下有很多实例代码的。其实写ce的驱动按照以下步骤。
1.在driver下建立自己的驱动文件夹mydriver,并且把文件夹名添加到dir里面
2.在自己的文件夹中建立source文件。一下是示例
TARGETNAME=mydriver
RELEASETYPE=PLATFORM
TARGETTYPE=DYNLINK
DLLENTRY=DllEntry
TARGETLIBS=\
$(_COMMONOAKROOT)\lib\$(_CPUDEPPATH)\coredll.lib
PREPROCESSDEFFILE=1
INCLUDES=
SOURCES= mydri…
驱动测试 有个很好用的东东,省掉了不少麻烦``
WinCE驱动调试助手
http://www.cnblogs.com/we-hjb/archive/2008/11/03/1280822.html
看看MS提供的文章:
http://msdn.microsoft.com/zh-cn/library/aa446913.aspx