dongbl2000
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2011-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2004-12-07 15:08
还没有呢,有敌情,会及时向各位大大汇报
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2004-12-08 12:36
应该是放在BUILDIN下面
dongbl2000
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2011-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2004-12-08 16:50
各位大大,
我现在把驱动注册直接写在BUILIN下。如下:
[HKEY_LOCAL_MACHINE\Drivers\BuildIN\CCCDRIVER]
"Dll"="CCCDRIVER.Dll"
"Order"=dword:0
"Irq"=dword:4
"IoBase"=dword:xxx
"IoLen"=dword:xxx
"SysIntr"=dword:xxx
"Prefix"="CCC"

BUILD时没错,但是有4个WARNING。DEBUG到目标机时,弹出对话框,信息为:
first-change exception in nk.exe
(0xc000001c:invalid system service)

output里显示:
Loaded symbols for 'F:\TEST\SAMPLE1\RELDIR\CEPC_X86DEBUG\CNCDR.DLL'

4294770120 PID:c3fc9aba TID:c3fc9722 0x83fc9358: ObjectCall: Failed(1): 11

4294770120 PID:c3fc9aba TID:c3fc9722 0x83fc9358: Exception ffffffff Thread=83fc9358 Proc=c3fc9aba 'device.exe'

4294770120 PID:c3fc9aba TID:c3fc9722 0x83fc9358: AKY=00000009 PC=8027ca7a ESP=0802ec28 EA=01ef0000

机子没启动。

请各位老大帮忙看看,这是什么问题。谢谢


wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2004-12-09 09:10
别着急啊 :D
(1)你说编译的时候有4个WARNING,是什么WARNING啊?
(2)你的注册表中怎么没见你的"IsrDll"和"IsrHandler"啊?
(3)我建议你可以先在Emulator中调试一下,看看能不能加载?以便找出问题所在。
(4)你把你的驱动加到bib文件中的Files Section还是Modules Section?
Come on, let us drive the world.
dongbl2000
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2011-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2004-12-09 09:40
wwei_wang大大,
4个WARNING是
FOUND DUPLICATE ENTRYPOINT OF "CCCDR.DLL" NK
FOUND DUPLICATE ENTRYPOINT OF "CCCISR.DL" NK
还有
USING OLD FIXUP STYLE OF CCCDR.DLL
USING OLD FIXUP STYLE OF CCCISR.DLL

注册表写
{...\BUILDIN\CCCDR}
"DLL"="CCC.DR.DLL"
"ORDER"=DWORD:0
"INDEX"=DWORD:1
"PREFIX"="CCC"
"ISRDLL"="CCCISR"
"ISRHANDLE"="ISRHANDLE"
用按照ISA例子的我也写过了.出错时一样的.

两个驱动都写在MOUDLE里.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2004-12-09 13:10
还没有搞定啊:)

wwei_wang:兄弟也多帮忙看看:)

对了,你说你编译好运行弹出对话框说有错?怎么后来又说系统没启动?你是怎么调试的?
根据地的兄弟们,团结就是力量
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2004-12-09 13:19
对了,我觉得指不指定isrdll应该不关键,你的Isr那个dll可以简单包含进os image然后在xxx_init里面Load,再找到isr函数后用hookinterrupt挂上就行了。

那些警告倒是应该好好看看,好像是dllmain多了,不过两个dll是分开的阿,你再看看sources和编译参数吧,你用ide生成的环境?能试着改成用命令行编译吗?
根据地的兄弟们,团结就是力量
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
27楼#
发布于:2004-12-09 13:48
我也遇到过类似的问题。对于你的问题,我觉得其中一个原因可能与你的ISR dll打包进OS image的方式有关。你可以试试把你的dll都放到bib文件的Files Sections里面,例如
CCCDR.DLL  D;\CCCDR.DLL      NK   S
CCCISR.DLL  D:\CCCISR.DLL    NK   S
注意,文件的属性中不要有‘K’。祝你好运! :P
Come on, let us drive the world.
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
28楼#
发布于:2004-12-09 14:25
To wxl_50685330大哥:
你前面讲到“在xxx_init里面Load,再找到isr函数后用hookinterrupt挂上就行了。”
能否请大哥给大家详细地讲一下怎么load(调用哪个函数)?如何调用hookinterrupt?在哪里调用hookinterrupt?
 :P

先谢谢了:)
Come on, let us drive the world.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
29楼#
发布于:2004-12-09 15:21
不是吧...你娃不是在那个帖子里面还在用的麻...:(


根据地的兄弟们,团结就是力量
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
30楼#
发布于:2004-12-09 16:37
wxl_50685330 大哥,是这样的,我以前是用LoadIntchainHandler将中断和ISR关联的。前两天开始才尝试用HookInterrupt,我是在OemInit函数里调用HookInterrupt的,但是中断产生之后没有进到我自定义的ISR里面,不知为何?
听你前面说,好像还有其他调用HookInterrupt的方法,所以在这里特请大哥给详细讲解一下:))) 先谢谢了
 :P

[编辑 -  12/10/04 by  wwei_wang]
Come on, let us drive the world.
dongbl2000
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2011-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
31楼#
发布于:2004-12-10 09:54
谢谢wwei_wang大大,问题解决了,但是驱动还是没有被ACTIVE.可能和WARNING有关系.但是如WXL_50685330大大所说这是两DLL,怎么会有重复的入口点.
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
32楼#
发布于:2004-12-10 10:34
离成功不远矣:P
(1)两个dll的入口函数分别都是什么啊?
(2)你的dll有没有def文件啊?
(3)有没有可能是因为资源冲突而导致驱动不能启动啊?
你仔细检查一下吧:)
Come on, let us drive the world.
dongbl2000
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2011-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
33楼#
发布于:2004-12-10 10:42
大大,
CCCDR的入口点是DLLMAIN
CCCISR的入口点是DLLENTRY.都加DEF文件.
我再试试.
谢谢大大的帮忙.
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
34楼#
发布于:2004-12-10 10:56
你在仔细检查一下吧,我觉得问题应该不大 :P
或者如果方便,把你的代码发给我,我帮你看看 :D
Email: wwei_wang@163.com
Come on, let us drive the world.
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
35楼#
发布于:2004-12-10 11:11
对了,你在编译的时候,有没有设置环境变量WINCEOEM=1啊?
Come on, let us drive the world.
dongbl2000
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2011-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
36楼#
发布于:2004-12-10 13:18
wwei_wang大大,
我想先说一下过程,您看对不对.
我先建一个自己的平台.在环境参数里设定
WINCEOEM=1
在建一个CCCISR的空的DLL工程.将CCCISR.C、CCCISR.H、SOURCES、CCCISR。DEF考到该目录下。再将C和H文件加到工程去。在FEATURE里,USER FEATURE下设置BUILD DIRS/SOURCES为SOURCES文件。
CCCDR如此炮制。
在PLATFORM里FILE下写
CCCDR。DLL  。。。。。\CCCDR.DLL NK S
CCCISR.DLL  .........\CCCISR.DLL NK S
在PLATFORM.REG里写
[.....\BUILDIN\CCCDR]
"DLL"="CCCDR"
......

最后总的编译和MAKING.

但是总是出现那个WARNING.告送我出现两个接口点.

谢谢大大帮忙
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
37楼#
发布于:2004-12-10 18:48
兄弟,我好像知道原因了:
你好像把CCCD.DLL和CCCISR.DLL往工程里加了两遍。这样吧,你把platform.bib文件中的下面两行都去掉
CCCDR。DLL 。。。。。CCCDR.DLL NK S
CCCISR.DLL .........CCCISR.DLL NK S

在FEATURE里的USER FEATURE下设置CCCDR.pbp和CCCISR.pbp(分别对应于你新建的两个dll工程)的BibIbnfo,设置Atrribute for selected files 都为Files Section,同时只选中system即可。然后,重新编译一遍。你试试吧,祝你好运!
Come on, let us drive the world.
dongbl2000
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2011-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
38楼#
发布于:2004-12-10 18:55
谢谢老大,今晚加个班看看,能否成功,再次谢谢两位大大的帮忙.
dongbl2000
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2011-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
39楼#
发布于:2004-12-12 16:11
兄弟啊,
首先谢谢你,问题找到,就是不用在PLATFROM.REG里写上那两句话.但是,又出现了新问题.
在CCC_INIT函数中当调用LOADINITCHAINHANDLE函数时,出现一个错误."DoImport Failed: Library "CCCISR.DLL" loaded into kernel is importing from other library "coredll.dll"
屏蔽这LoadInitChainHandle这句话,则驱动能正确加载并被ACTIVE.

我的语句是:
#include <..CCCISRCCCISR.DLL>

DWORD irq=6;
LoadInitChainHandle(TEXT("CCCISR.DLL"),TEXT("ISRHandle),(BYTE)irq);

当把CCCISR用MODULE形式的时候,DEBUG直接跳入load.c的DEBUGMAG{
asm int 3}
在帮助里有这样一句话:
Due to the nature of how the DLL is loaded, it cannot have any implicit imports. (For example, it must not link to coredll.lib or any other import libraries, and it cannot use most of the C runtime support from coredll.)
我想应该和我的ISR DLL工程的建立有关系.
请问兄弟,是否我的工程的源代码SETTING里要改动,该如何改动才能避免IMPLICIT IMPORTS.谢谢







[编辑 -  12/12/04 by  dongbl2000]
游客

返回顶部