dongbl2000
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2011-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2544回复:44

驱动问题(有分送啊,也请wxl_50685330大大帮帮忙啊)

楼主#
更多 发布于:2004-12-06 13:08
各位大大,
请问一个问题,我现在PB新建的自己的平台(设为SSS),在WORKPLACE里建了两个DLL工程,一个叫CCCISR(专用的ISR),一个叫CCCDRIVER(流驱动),在PLARTFORM.BIB中写:
       CCCDRIVER.dll    $(_FLATRELEASEDIRCCCDRIVER.dll     NK  SH
       CCCISR.dll       $(_FLATRELEASEDIR)CCCTIMER.dll      NK  SHK

在PLATFORM.REG中写:
[HKEY_LOCAL_MACHINEDriversBuiltInPCITemplateCCCDRIVER]
    "Dll"="CCCDRIVER.dll"
"Prefix"="CCC"
    "Index"=dword:1
    "Order"=dword:14
    "IsrDll"="CCCISR.dll"
    "IsrHandler"="ISRHandler"
    "PortIsIO"=dword:1
    "PortOffset"=dword:1c
    "PortSize"=dword:1
BUILD所有,在BUILD窗口也发现了BUILD CCCDRIVER和CCCISR,在各自的子目录下发现了DLL文件,在SSSRelDir也发现了其DLL文件,但是似乎两个DLL(驱动),并没有在镜象中,因为根本不到CCCDRIVER_INIT我所设置的断点.应用程序也不能调用CCCDRIVER.DLL文件.请各位大大帮帮忙诊断一下.(我的平台是X86,CCCDRIVER是一块ISA的定时器板子)
非常感谢各位


[编辑 -  12/6/04 by  dongbl2000]

[编辑 -  12/6/04 by  dongbl2000]
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-13 16:13
举双手双脚赞成!!!哈哈哈哈哈哈哈哈
Come on, let us drive the world.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-13 16:07
哈哈哈哈哈哈

我明天给人民日报写信,让他们以<<21世纪的革命精神--记两位优秀的革命同志>>为题发表评论员文章!!!!!!!!!!!
根据地的兄弟们,团结就是力量
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-13 13:21
与两万五千里长征相比,这点痛算什么?只要能成功,痛死也值得 :P :P :P :P
Come on, let us drive the world.
dongbl2000
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2011-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-13 12:24
兄弟,
我把COREDLL.DLL从LINK里去掉了,通过了,驱动和ISR都ACTIVE了,但是由于没有COREDLL,ISRHANLER里写不了MSG.所以没办法看中断有没有触发.只有用IST了.
但愿这次能通,不要再折磨偶了.
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-13 08:43
兄弟,真是好事多磨啊:))
(1)你把CCCISR.def文件加到你的CCCISR.DLL工程里面了吗?
(2)#include <..CCCISRCCCISR.DLL>,是干什的啊?
(3)CCCISR文件你还是放在fiels section 部分吧。你的问题应该和它没关系。
Come on, let us drive the world.
dongbl2000
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2011-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于: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]
dongbl2000
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2011-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-12-10 18:55
谢谢老大,今晚加个班看看,能否成功,再次谢谢两位大大的帮忙.
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
8楼#
发布于: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分
9楼#
发布于: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分
10楼#
发布于:2004-12-10 11:11
对了,你在编译的时候,有没有设置环境变量WINCEOEM=1啊?
Come on, let us drive the world.
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-12-10 10:56
你在仔细检查一下吧,我觉得问题应该不大 :P
或者如果方便,把你的代码发给我,我帮你看看 :D
Email: wwei_wang@163.com
Come on, let us drive the world.
dongbl2000
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2011-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于: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分
13楼#
发布于: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分
14楼#
发布于: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分
15楼#
发布于: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.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-12-09 15:21
不是吧...你娃不是在那个帖子里面还在用的麻...:(


根据地的兄弟们,团结就是力量
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-12-09 14:25
To wxl_50685330大哥:
你前面讲到“在xxx_init里面Load,再找到isr函数后用hookinterrupt挂上就行了。”
能否请大哥给大家详细地讲一下怎么load(调用哪个函数)?如何调用hookinterrupt?在哪里调用hookinterrupt?
 :P

先谢谢了:)
Come on, let us drive the world.
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
18楼#
发布于: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.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-12-09 13:19
对了,我觉得指不指定isrdll应该不关键,你的Isr那个dll可以简单包含进os image然后在xxx_init里面Load,再找到isr函数后用hookinterrupt挂上就行了。

那些警告倒是应该好好看看,好像是dllmain多了,不过两个dll是分开的阿,你再看看sources和编译参数吧,你用ide生成的环境?能试着改成用命令行编译吗?
根据地的兄弟们,团结就是力量
上一页
游客

返回顶部