5520|14

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

ce5的流接口驱动问题 [复制链接]

小弟做的驱动命名为TMRMON,编译也通过了,但是下到2440上运行却出现以下错误:
TMRMON: DLL_PROCESS_ATTACH.
Data Abort: Thread=83d71184 Proc=82026360 'device.exe'
AKY=00000005 PC=01df185c(tmrmon.dll+0x0000185c) RA=01df184c(tmrmon.dll+0x0000184c) BVA=06000000 FSR=00000007
RaiseException: Thread=83d71184 Proc=82026360 'device.exe'
AKY=00000005 PC=03f8dffc(coredll.dll+0x0001dffc) RA=8022bfc0(NK.EXE+0x0002bfc0) BVA=00000001 FSR=00000001
TMRMON: DLL_PROCESS_DETACH.

以前遇到过因为前缀4个字符而出错的情况,但是现在前缀是TMR,是三个字符啊。而且DLL_PROCESS_ATTACH与DLL_PROCESS_DETACH之间在吗出现那么多东西啊?这是什么错误啊?明显看起来只是进入了dllentry函数。

最新回复

你的还不行吗?我按照你的这部分代码写了一个极其简单的流驱动 你看一下.....希望对你有帮助。(怎么就是没有办法上传rar,郁闷。。。。。。) /*************GPItest*****************/ #include "windows.h" bool        WINAPI GIO_DllEntry (HANDLE  hInstDll,DWORD  dwReason,LPVOID  lpvReserved) {     switch( dwReason )                 {     case DLL_PROCESS_ATTACH:         RETAILMSG(1, (TEXT("GPIOSET : DLL_PROCESS_ATTACH\r\n"))); DisableThreadLibraryCalls((HMODULE) hInstDll);         break;     case DLL_PROCESS_DETACH: // should be signaling thread here         RETAILMSG(1, (TEXT("GPIOSET : DLL_PROCESS_DETACH\r\n")));         break;     }     return (TRUE); } DWORD GPO_Init(LPCTSTR pContext, DWORD dwBusContext) {         RETAILMSG(1,(L"GPI_Init\r\n"));         return        true; } DWORD GPO_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode) {         RETAILMSG(1,(L"GIO_Open\r\n"));         return        true;        } BOOL GPO_Close(DWORD hOpenContext) {         RETAILMSG(1,(L"GIO_Close\r\n"));         return        true;        } DWORD GPO_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count) {         RETAILMSG(1,(L"GIO_Read\r\n"));         return        true;        } DWORD GPO_Write(DWORD hOpenContext, LPCVOID pBuffer, DWORD Count) {         RETAILMSG(1,(L"GIO_Write\r\n"));         return        true;        } DWORD GPO_Seek(DWORD hOpenContext, long Amount, WORD Type) {         RETAILMSG(1,(L"GIO_Seek\r\n"));         return        true; } void GPO_PowerUp(DWORD hOpenContext) {         RETAILMSG(1,(L"GIO_PowerUp\r\n"));         return        ;        } void GPO_PowerDown(DWORD hOpenContext) {         RETAILMSG(1,(L"GIO_PowerDown\r\n"));         return        ;        } BOOL GPO_Deinit(DWORD hDeviceContext) {         RETAILMSG(1,(L"GPO_Deinit\r\n"));         return        true;                } BOOL GPO_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut) {         RETAILMSG(1,(L"GIO_IOControl\r\n"));         return        true;        } /**************Sources*********************/ TARGETNAME=GPItest TARGETTYPE=DYNLINK RELEASETYPE=PLATFORM DLLENTRY=GIO_DllEntry TARGETPATH=$(_CSPCOMMONPATH)\LIB\$(_CPUINDPATH) DEFFILE=GPItest.def WINCEREL=1 TARGETLIBS= \     $(_COMMONSDKROOT)\LIB\$(_CPUINDPATH)\coredll.lib \ SOURCELIBS= \ SOURCES= \     GPItest.cpp \ /****************GPItest.def***********************/ LIBRARY     GPItest EXPORTS         GPO_Init         GPO_Deinit         GPO_Open         GPO_Close         GPO_Read         GPO_Write         GPO_Seek         GPO_IOControl         GPO_PowerDown         GPO_PowerUp /********************GPItest.reg***************************/ [HKEY_LOCAL_MACHINE\Drivers\Builtin\GPItest]     "Prefix"="GPO"                                    "Dll"="GPItest.dll"                    "Order"=dword:10                            "Index"=dword:1                                  详情 回复 发表于 2009-6-23 11:30
点赞 关注

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
在线等,急啊!
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
看tmrmon.map文件,
具体方法,这里已经很多人做过了,搜索老帖,就明白了。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 gooogleman 的回复:
看tmrmon.map文件,
具体方法,这里已经很多人做过了,搜索老帖,就明白了。


好像驱动文件夹里面没有tmrmon.map文件啊?gooogleman兄,搜索哪个关键字?
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

5
 
TMR_Init 函数实现了吗?

在 .def 文件中导出了吗?
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 zaodt 的回复:
TMR_Init 函数实现了吗?

在 .def 文件中导出了吗?


TMR_Init 应该还没有进去。.def 文件中肯定导出了
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 3 楼 swaiwwb 的回复:
引用 2 楼 gooogleman 的回复:
看tmrmon.map文件,
具体方法,这里已经很多人做过了,搜索老帖,就明白了。



好像驱动文件夹里面没有tmrmon.map文件啊?gooogleman兄,搜索哪个关键字?


在工程大目录搜索,肯定不在驱动文件夹下了。这招我经常用,放之四海皆准。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 gooogleman 的回复:
引用 3 楼 swaiwwb 的回复:
引用 2 楼 gooogleman 的回复:
看tmrmon.map文件,
具体方法,这里已经很多人做过了,搜索老帖,就明白了。


好像驱动文件夹里面没有tmrmon.map文件啊?gooogleman兄,搜索哪个关键字?



在工程大目录搜索,肯定不在驱动文件夹下了。这招我经常用,放之四海皆准。


tmrmon.map文件是找到了,但是看不到有什么问题啊?我是说搜索老帖搜哪个关键字?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

9
 
TMR_Init 下打印信息看看有没有进去,不行把代码贴出来看看
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 seu_dust 的回复:
TMR_Init 下打印信息看看有没有进去,不行把代码贴出来看看


TMR_Init根本没有进去。上传出现这个问题是因为前缀写了4个字符,这次应该没有这个问题了啊
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

11
 
没有人肯帮忙了吗?急啊
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

12
 
[HKEY_LOCAL_MACHINE\Drivers\Builtin\tmrmon]
    "Prefix"="TMR"                       
    "Dll"="tmrmon.dll"               
    "Order"=dword:3               
    "Index"=dword:1          有这样的注册表信息先导入吗?并不需要过多的在乎DLL_PROCESS_ATTACH与DLL_PROCESS_DETACH,它们下面你就不需要添加什么代码,等待函数结尾的RETURN.
如果你在TMR_Init函数中的第一行输出一个打印语句,看看如果连打印都没有输出,你再看一下sources,*.def两个文件是否还有存在问题。(这是我第一次在eeworld中发帖)
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

13
 
楼主最好能把代码贴出来,这样才好分析问题出在哪里。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

14
 
DllEntry函数只需这样即可:

BOOL
WINAPI GIO_DllEntry (       
        HANDLE  hInstDll,
        DWORD   dwReason,
        LPVOID  lpvReserved
)
{
    switch( dwReason )
        {
    case DLL_PROCESS_ATTACH:
        RETAILMSG(GIO_DBG, (TEXT("GPIOSET : DLL_PROCESS_ATTACH\r\n")));
                DisableThreadLibraryCalls((HMODULE) hInstDll);
        break;

    case DLL_PROCESS_DETACH:
                // should be signaling thread here
        RETAILMSG(GIO_DBG, (TEXT("GPIOSET : DLL_PROCESS_DETACH\r\n")));
        break;
    }

    return (TRUE);
}

platform.bib里面有没有把对应的DLL加进去?
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

15
 
你的还不行吗?我按照你的这部分代码写了一个极其简单的流驱动 你看一下.....希望对你有帮助。(怎么就是没有办法上传rar,郁闷。。。。。。)
/*************GPItest*****************/
#include "windows.h"

bool        WINAPI GIO_DllEntry (HANDLE  hInstDll,DWORD  dwReason,LPVOID  lpvReserved)
{
    switch( dwReason )
                {
    case DLL_PROCESS_ATTACH:
        RETAILMSG(1, (TEXT("GPIOSET : DLL_PROCESS_ATTACH\r\n")));
DisableThreadLibraryCalls((HMODULE) hInstDll);
        break;

    case DLL_PROCESS_DETACH:
// should be signaling thread here
        RETAILMSG(1, (TEXT("GPIOSET : DLL_PROCESS_DETACH\r\n")));
        break;
    }

    return (TRUE);
}

DWORD GPO_Init(LPCTSTR pContext, DWORD dwBusContext)
{
        RETAILMSG(1,(L"GPI_Init\r\n"));
        return        true;
}

DWORD GPO_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode)
{
        RETAILMSG(1,(L"GIO_Open\r\n"));
        return        true;       
}

BOOL GPO_Close(DWORD hOpenContext)
{
        RETAILMSG(1,(L"GIO_Close\r\n"));
        return        true;       
}

DWORD GPO_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)
{
        RETAILMSG(1,(L"GIO_Read\r\n"));
        return        true;       
}

DWORD GPO_Write(DWORD hOpenContext, LPCVOID pBuffer, DWORD Count)
{
        RETAILMSG(1,(L"GIO_Write\r\n"));
        return        true;       
}

DWORD GPO_Seek(DWORD hOpenContext, long Amount, WORD Type)
{
        RETAILMSG(1,(L"GIO_Seek\r\n"));
        return        true;
}

void GPO_PowerUp(DWORD hOpenContext)
{
        RETAILMSG(1,(L"GIO_PowerUp\r\n"));
        return        ;       
}

void GPO_PowerDown(DWORD hOpenContext)
{
        RETAILMSG(1,(L"GIO_PowerDown\r\n"));
        return        ;       
}
BOOL GPO_Deinit(DWORD hDeviceContext)
{
        RETAILMSG(1,(L"GPO_Deinit\r\n"));
        return        true;               
}
BOOL GPO_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut)
{
        RETAILMSG(1,(L"GIO_IOControl\r\n"));
        return        true;       
}

/**************Sources*********************/
TARGETNAME=GPItest
TARGETTYPE=DYNLINK
RELEASETYPE=PLATFORM
DLLENTRY=GIO_DllEntry

TARGETPATH=$(_CSPCOMMONPATH)\LIB\$(_CPUINDPATH)

DEFFILE=GPItest.def

WINCEREL=1

TARGETLIBS= \
    $(_COMMONSDKROOT)\LIB\$(_CPUINDPATH)\coredll.lib \

SOURCELIBS= \

SOURCES= \
    GPItest.cpp \

/****************GPItest.def***********************/
LIBRARY     GPItest
EXPORTS
        GPO_Init
        GPO_Deinit
        GPO_Open
        GPO_Close
        GPO_Read
        GPO_Write
        GPO_Seek
        GPO_IOControl
        GPO_PowerDown
        GPO_PowerUp

/********************GPItest.reg***************************/
[HKEY_LOCAL_MACHINE\Drivers\Builtin\GPItest]
    "Prefix"="GPO"                               
    "Dll"="GPItest.dll"               
    "Order"=dword:10                       
    "Index"=dword:1                               
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表