2994|5

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教老师们:自已写的winCE驱动程序被加载后,马上又被卸载了? [复制链接]

我在Platform   Builder下编写了一个很简单的LED驱动程序,就包含了DllMain,LED_Init,LED_Open,LED_DeInit,LED_close,LED_Powerup,LED_Powerdown等等函数的操作。然后在release目录下的Platform.reg的\drivers\builtIn当中添加了该驱动程序。启动WINCE后,在终端调试窗口提示
"LedDrv - DLL_PROCESS_ATTACH"-------被加载
"LedDrv - DLL_PROCESS_DETACH"-------被卸载
........
"LedDrv - DLL_PROCESS_ATTACH"-------被加载
"LedDrv - DLL_PROCESS_DETACH"-------被卸载
而且反复好几次.这是为什么啊?为什么被加载后,立马又被卸载了?
我的代码如下:
///LedDrv.cpp
#include "stdafx.h"
#include
#include
#include

#pragma comment(lib,"ceddk.lib")

volatile IOPreg *v_pIOPRegs;

BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                                         )
{
    switch(ul_reason_for_call) {
        case DLL_PROCESS_ATTACH:
            OutputDebugString(L"LedDrv - DLL_PROCESS_ATTACH\n");
        break;
        case DLL_PROCESS_DETACH:
            OutputDebugString(L"LedDrv - DLL_PROCESS_DETACH\n");
        break;
        case DLL_THREAD_ATTACH:
            OutputDebugString(L"LedDrv - DLL_THREAD_ATTACH\n");
        break;
        case DLL_THREAD_DETACH:
            OutputDebugString(L"LedDrv - DLL_THREAD_DETACH\n");
        break;
        default:
        break;
    }
        return TRUE;
}
/**********************LED_Init******************************/
DWORD LED_Init( LPCTSTR pContext, LPCVOID lpvBusContext)
{
   RETAILMSG(1, (TEXT("***************LED_Init******************\n")));
   v_pIOPRegs = (volatile IOPreg*)VirtualAlloc(0, sizeof(IOPreg), MEM_RESERVE, PAGE_NOACCESS);//申请

   if(v_pIOPRegs)
   {  
     if (VirtualCopy((PVOID)v_pIOPRegs, (PVOID)IOP_BASE, sizeof(IOPreg), PAGE_READWRITE|PAGE_NOCACHE)) //映射
     {
      RETAILMSG (1,(TEXT("v_pIOPRegs is mapped to %x\n\r"), v_pIOPRegs));
      OutputDebugString(L"v_pIOPRegs is mapped\n");
      return 7;//不返回0
     }
     else
     {
      RETAILMSG (1,(TEXT("v_pIOPRegs is not mapped\n\r")));
      OutputDebugString(L"v_pIOPRegs is not mapped\n");
      return -1;
     }
   }
   else
   {
     RETAILMSG (1,(TEXT("v_pIOPRegs is not allocated\n\r")));
     OutputDebugString(L"v_pIOPRegs is not allocated\n");
     return -2;
   }
}
/***********************************LED_Deinit***********************/
BOOL LED_Deinit( DWORD hDeviceContext )
{
  RETAILMSG(1, (TEXT("*****************LED_Deinit*****************\n")));
  return TRUE;
}
/******************************LED_Open******************************/
DWORD LED_Open( DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode )
{
  RETAILMSG(1, (TEXT("******************LED_Open*********************\n")));
  return 1;
}
/******************************LED_Close******************************/
BOOL LED_Close( DWORD hOpenContext )
{
  RETAILMSG(1, (TEXT("*****************LED_Close*********************\n")));
  return TRUE;
}
/******************************LED_Read******************************/
DWORD LED_Read( DWORD hOpenContext, LPVOID pBuffer, DWORD Count )
{
  RETAILMSG(1, (TEXT("*********************LED_Read********************\n")));
  return 0;
}
/******************************LED_Write******************************/
DWORD LED_Write( DWORD hOpenContext, LPCVOID pBuffer, DWORD Count )//Beep!!!!!
{
   BYTE Butter_Temp;
   
   RETAILMSG(1, (TEXT("******************LED_Write*******************\n")));
   // 获取应用程序地址空间数据指针
   pWriteBuffer = MapPtrToProcess((LPVOID)pBuffer, GetCallerProcess());
   Butter_Temp=*pWriteBuffer;
   //Beep!!!!!
   v_pIOPRegs->rGPBCON |= (1<<0);
   v_pIOPRegs->rGPBCON &= (0<<1);//GPB10 OutPut
   v_pIOPRegs->rGPBDAT |= (1<<10);//GPB10 =1   
   return 1;
}
////sources
WINCEREL=1
RELEASETYPE=PLATFORM
_ISVINCPATH=$(_WINCEROOT)\public\common\sdk\inc;
_OEMINCPATH=$(_WINCEROOT)\public\common\oak\inc;$(_WINCEROOT)\public\common\sdk\inc;
TARGETNAME=LedDrv
FILE_VIEW_ROOT_FOLDER= \
  ReadMe.txt \
  StdAfx.cpp \
  prelink.bat \
  postlink.bat \

FILE_VIEW_RESOURCE_FOLDER= \

FILE_VIEW_INCLUDES_FOLDER= \
  StdAfx.h \

INCLUDES= \
  $(_WINCEROOT)\PUBLIC\COMMON\DDK\INC;$(_WINCEROOT)\PUBLIC\COMMON\OAK\INC; \

SOURCES= \
  LedDrv.cpp \

TARGETTYPE=DYNLINK
PRECOMPILED_CXX=1
PRECOMPILED_PCH=StdAfx.pch
TARGETLIBS= \
//Platform.reg
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\LedDrv]
"Index"=dword:0
"prefix"="LED"
"Dll"="LedDrv.dll"
"Order"=dword:0
//Platform.bib
LedDrv.dll      $(_FLATRELEASEDIR)\LedDrv.dll     NK SH


最新回复

你的注册表的那一块那个 "Index"=dword:0 "Order"=dword:0 别用 0  了。换成别的都换成10看看,还有你的  ***。def呢? 我看你压根就没有用这个,也就是说你没有输出? 不知道理解对不对?还有你的souce这一块好乱好乱,看的都找了个半天,才看到你是要生成一个DLL的问题,能整理一下不?谢谢  详情 回复 发表于 2009-9-8 13:54
点赞 关注

回复
举报

88

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
奇怪,这样的流程应该没有问题啊
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
在Load Dll之后DeviceManager会去做下面的事情:
1.获得XXX_Init等函数的指针,存放在一个lpdev的结构中,该结构中存放了一系列的函数指针。
2.判断是否有Inin,Deinit,open,close; Read,write,seek和Iocontrol四个必须有一个实现;
如果实现了PreClose,那么PreDeinit的实现也必须有。
如果上面出现错误那么就会执行FreeLibary了。

所以你可以看看你的相关函数在.def中是不是导出了。
该有的实现是不是有?
 
 
 

回复

123

帖子

0

TA的资源

一粒金砂(初级)

4
 
谢谢两位的回复,是这样的,我上面的描述可能会有些问题,是线程(THREAD)反复被加载又被卸载了,不是进程(PROCESS).进程加载正常,LED_Init()也初始化了。如下:
Windows CE Firmware Init
INFO: Initializing system interrupts...
INFO: Initializing system clock(s)...
INFO: Initializing driver globals area...
rLCDCON1 : 1f9
rLCDCON2 : 2077c282
rLCDCON3 : 17a7f10
rLCDCON4 : d60
rLCDCON5 : 12b09
rLCDSADDR1 : 18080000
rLCDSADDR2 : cb000
rLCDSADDR3 : 280
rLCDINTMSK : 3
rLPCSEL : 0
rTPAL : 0
SDMMC config current rGPGCON: 26a98a
SDMMC config set rGPGCON: 26a98a
SDMMC config Init Done.
OEMInit Done...
Sp=ffffc7cc
OEMSetRealTime: Year: 3, Month: 1, Day: 1, Hour: 12, Minute: 0, second: 0 rcnr=1h
FMD::FMD_Init
FMD::FMD_OEMIoControl = 0x71c24
Prescaler:2
384 clock
LedDrv - DLL_PROCESS_ATTACH
***************LED_Init******************
USB:OhcdPdd_Init
++InitializeOHCI
USB:*pIrq=11, *pioPortBase=0x210000
OHCD: MapIrq2SysIntr(11): 27
OHCD: Memory Object
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
--InitializeOHCI
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH

dm9000 init.
[dm9]: Chip signature is 90000A46
::: SYSINTR_PCMCIA_STATE    OEMInterruptEnable
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
        charlie::SDIO::SDHOST::SDCSDCardDllEntry::DLL_PROCESS_ATTACH
LedDrv - DLL_THREAD_ATTACH
::: SYSINTR_SDMMC    OEMInterruptDisable
::: SYSINTR_DMA0    OEMInterruptDisable
::: SYSINTR_SDMMC_CARD_DETECT    OEMInterruptEnable
::: SYSINTR_SDMMC_SDIO_INTERRUPT    OEMInterruptEnable
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
MATRIXKB InterruptInitialize for 41 failed!
MATRIXKB InterruptInitialize for 39 failed!
MATRIXKB InterruptInitialize for 47 failed!
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
m_VirtualFrameBuffer is mapped at 120000(PHY : ac100000)

Clearing frame buffer !!!

--S3C2410DISP::InitializeHardware
return DMDO_0
Touch Init
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
Indicated RS232 Cable Event
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
OEMSetRealTime: Year: 8, Month: 9, Day: 27, Hour: 21, Minute: 39, second: 7 rcnr=1h
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_ATTACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_DETACH
LedDrv - DLL_THREAD_DETACH

而且加载其它驱动的时候THREAD也在不停的加载又被卸载.插拔USB同步时也一样。真是不明白!
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

5
 
wo 顶啊。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
你的注册表的那一块那个
"Index"=dword:0
"Order"=dword:0
别用 0  了。换成别的都换成10看看,还有你的  ***。def呢?
我看你压根就没有用这个,也就是说你没有输出?
不知道理解对不对?还有你的souce这一块好乱好乱,看的都找了个半天,才看到你是要生成一个DLL的问题,能整理一下不?谢谢
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播:当AI遇见仿真,会有什么样的电子行业革新之路?
首场直播:Simcenter AI 赋能电子行业研发创新
直播时间:04月15日14:00-14:50

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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

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

北京市海淀区中关村大街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
快速回复 返回顶部 返回列表