wince下如何测试驱动程序阿

iaiwork21   2008-11-26 11:27 楼主
我写了个极简单的驱动程序,就是在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;
}


回复评论 (17)

新手,很菜,希望大虾指点,我用的是流驱动模式,也不知道对不对
点赞  2008-11-26 11:29
我也是新手..对于驱动..我很是伤心.,....
点赞  2008-11-26 11:32
大哥你比我强啊,你都有一分技术分了
点赞  2008-11-26 11:44
用CE TEST KIT!!!
点赞  2008-11-26 13:17
怎么使用阿大哥
点赞  2008-11-26 13:51
哈哈,测试代码好写,
首先h=createfile(xxxx,...)
第二步,ioctrl(h,x,x,)或read(h,),write(h,x,x,
点赞  2008-11-26 22:49
能给段测试代码给我看看么,简单明了的那种,我现在用的开发板上没有这部分的资料,非常郁闷,谢谢了
点赞  2008-11-27 10:23
学习中
点赞  2008-11-27 14:50
引用: 引用 7 楼 sofa1231 的回复:
能给段测试代码给我看看么,简单明了的那种,我现在用的开发板上没有这部分的资料,非常郁闷,谢谢了


周立功出了一本书,叫做——ARM&wince实验与实践。里面有很多使用应用和驱动配合的例子。非常有帮助。
建议楼主看看,
点赞  2008-11-27 16:55
引用: 引用 4 楼 xqhrs232 的回复:
用CE TEST KIT!!!


这个东西不懂怎么用哦?到底是怎么用的?
点赞  2008-11-27 16:56
写一个应用程序,该应用程序可以测试你的各个接口,并且可以动态install和uninstall你的驱动程序。反正我一般这么搞。
点赞  2008-11-27 17:07
傻瓜的方法:MessageBox
点赞  2008-11-28 09:41
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
通过以上步骤就可以了.
点赞  2008-11-28 15:24
这四步的大概过程我都了解一些,但是第三步里面的函数具体怎么写我有点不太清楚,我找的资料里大概都是像这样介绍的,但是具体到第三步的时候我就不知道该怎么做了。
    我要为一个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…
点赞  2008-11-28 15:25
驱动测试 有个很好用的东东,省掉了不少麻烦``
WinCE驱动调试助手
http://www.cnblogs.com/we-hjb/archive/2008/11/03/1280822.html
点赞  2008-11-28 20:00
驱动驱动
真的很麻烦
点赞  2008-12-4 10:00
看看MS提供的文章:
http://msdn.microsoft.com/zh-cn/library/aa446913.aspx
点赞  2008-12-4 13:08
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复