4385|20

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

无法加载流驱动 [复制链接]

各位高手:
本人新手,所用设备是pocket pc 2003,在PB5.0下写完了一个测试驱动flashtest.dll,编辑注册表,注册表中Dll,Prefix,Order和Index字段都设置好了,DLL文件放在\windows目录下,重启后,pocket pc 2003中注册表字段都在,但device.exe的加载模块中没有flashtest.dll文件,也就是说我的流驱动没有被加载,请高手解答一下为什么,是不是还需要别的设置?不胜感激。

最新回复

谢谢大家..我结合大家的建议以及资料,大致了解了过程.结贴.  详情 回复 发表于 2008-10-12 14:54
点赞 关注

回复
举报

62

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
不是这么加载的吧。
我们用真实的环境下是不用拷贝到Windows目录的
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这种情况一般是驱动写得有问题,比如你驱动初始化结束之后就调用退出了。你可以在退出的部分输出调试信息看看。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
应该是驱动写得问题,同意楼上
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
我的驱动不是真实的操作硬件的驱动,而是测试是否能加载
下面贴出代码

#include

BOOL WINAPI DllEntryPoint(HANDLE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
{
        return true;
}

DWORD TST_Init (LPCTSTR pContext, LPCVOID lpvBusContext) { return 0; }

BOOL TST_Deinit (DWORD hDeviceContext) { return true; }

DWORD TST_Open (DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode) { return 0; }

BOOL TST_Close (DWORD hOpenContext) { return true; }

DWORD TST_Read (DWORD hOpenContext, LPVOID pBuffer, DWORD Count) { return 0; }

DWORD TST_Write (DWORD hOpenContext, LPCVOID pBuffer, DWORD Count) { return 0; }

DWORD TST_Seek (DWORD hOpenContext, long Amount, WORD Type) { return 0; }

void TST_PowerUp (DWORD hDeviceContext) {}

void TST_PowerDown (DWORD hDeviceContext) {}

BOOL TST_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut,
                                   DWORD dwLenOut, PDWORD pdwActualOut) { return true; }

这是我的驱动代码,非常简单,不做任何操作,请各位高手看看有问题吗?
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
不是我们看,而是你要在各个部分输出调试信息,device.exe首先调用TST_Init,这时你直接return 0,那不就是退出了吗,并且你的DLL文件要export 各个接口函数,.def文件必须link进来。
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

7
 
如果代码OK的话,我猜还是因为dll没有证书签名的问题。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
我的接口函数都是导出的,我用dumpbin/exports看了,然后我在TST_Init函数中直接写了个while(true){}死循环,可是device.exe加载的模块中依然没有我的FlashTest.dll文件,弄得我的都烦死了
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

9
 
可能是DllEntryPoint 写的有问题

 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

10
 
DllEntryPoint应当如何写?在DllEntryPoint里面调用TST_Init?
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 5 楼 nbcool 的回复:
不是我们看,而是你要在各个部分输出调试信息,device.exe首先调用TST_Init,这时你直接return 0,那不就是退出了吗,并且你的DLL文件要export 各个接口函数,.def文件必须link进来。

你的Init函数返回0肯定是不行的。而且你的这些个函数在.def中是否导出了。
你把生成的Dll放在/Windows目录下重启,如果是ColdBoot的话也没有作用。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

12
 
对,参考MS的流接口书写的标准去写,不要自己随便去改动,就算想改动也等自己对整个东西很熟悉后再说.
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

13
 
platform.bib文件里面加了新的吗
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

14
 
还要在platform.bib文件中加东西吗?
我是直接把DLL放在\windows下了,并修改了注册表,其余的没改动过
另外的话我是用PB5里面样例驱动程序的,就是Flash驱动,没有修改过,直接将FAL.lib链接到FMD层一起编译成一个DLL的
里面有注册表里面有个基地址的字段,我没设,不知道是不是这个原因。
顺便弱弱的问一句,FLASH是怎么编址的?直接编址在RAM后面?比如我的RAM是0x00000000到0X00000001,然后我的FLASH地址是不是从0X00000002开始?
如果不是,请教各位高手FLASH是如何编址的?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

15
 
platform.bib文件中是需要加这样一句话的:
Driver.dll $(_FLATRELEASEDIR)\Driver.dll NK  SHK
否则,即便你手动把文件拷贝到window根目录下也不会在生成的image文件中存在你的驱动

另外,在bib文件中添加语句不一定非要是platform.bib,也可以是project.bib中,最终的系统文件是根据他们一起生成的。还有,添加这个语句之前,把你的驱动拷贝到window目录下也是必须的,否则,编译生成imange文件时候会抱错,原因在于,无法在window目录下找到相应的驱动。

对于,你说的注册不成功的问题,原因是在于你的函数:
DWORD TST_Init (LPCTSTR pContext, LPCVOID lpvBusContext) { return 0; }
这个函数是由device.exe通过你的注册表信息Prefix的值来调用的,它必须返回一个非零的值,否则初始化不成功,注册失败
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

16
 
bib和source文件里面都要加
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

17
 
不是说流驱动只需要一个DLL文件和注册表配置吗?还需要BIB文件和SOURCE文件呢?
我是放在真实的设备上测试的。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

18
 
……
要加的内容就是要把DLL这个文件给放到将要生成image中去,如果没有这些准备工作,设备起来时,注册表怎么找到要用的DLL
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

19
 
那比如说我现在有一台windows mobile的手持设备,我必须将该NK.EXE用新生成的NK.EXE去替换是吗?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

20
 
你要么就按上面的回复说的,在.bib中加入你的Dll,这样把你的Dll Build进image。
或者你单独Build你的Dll,然后用这个Dll复制到/Windows目录替换原来的Dll,然后
Reset设备。
 
 
 

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

开源项目 更多>>
    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

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

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

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

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

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

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