liuxuer_123
驱动牛犊
驱动牛犊
  • 注册日期2004-12-10
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1717回复:9

Why?OEMWritedebugstring函数在驱动程序中不能用?

楼主#
更多 发布于:2005-03-16 17:36
我在keypad按键驱动中加入此语句,以及头文件nkintr.h,竟然有错误了,WHY?

显示错误信息如下:
BUILD: [01:0000000302:ERRORE] keypad.obj : error LNK2019: unresolved external symbol OEMWriteDebugString referenced in function \"unsigned long __cdecl KeypadIst(void *)\" (?KeypadIst@@YAKPAX@Z)
BUILD: [01:0000000303:ERRORE] D:\\WINCE500\\platform\\BVDMTWIL\\target\\ARMV4I\\debug\\keypad.dll : fatal error LNK1120: 1 unresolved externals

请大侠帮忙诊断啊,难道OEMWriteDebugString函数只能在bootloader中用嘛?不会吧,我包含了它的头文件哪,
困惑中...........
[color=blue]柳絮儿...满天飞...[/color]
joyfly
驱动小牛
驱动小牛
  • 注册日期2002-07-02
  • 最后登录2009-09-17
  • 粉丝0
  • 关注0
  • 积分319分
  • 威望32点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-24 03:17
只包含头文件不够,要把包含函数实现的LIB或DLL连接进来啊.
另外,OEMWriteDebugString 本来就不是给你这么用的.

你要打出DEBUG消息,用RETAILMSG(1,....)就可以了.只要include \"dbgapi.h\"
www.cnemb.com
liuxuer_123
驱动牛犊
驱动牛犊
  • 注册日期2004-12-10
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-24 09:06
我本来是想在串口显示debug信息的,所以就用这个函数来试,结果不行,这个函数是oal层的函数,在驱动里面是不能用的,至少我目前是这么认为.
我也想过怎样把它的库加进去,应该是在source文件里面,但是这个库文件nk.lib是编译后才会生成的,不知如何写出它的路径...

debugzone还是蛮好用的,只是当时不熟悉,一心想让它在串口显示.呵呵
至于上面的问题,有何高见,尽管说啊
[color=blue]柳絮儿...满天飞...[/color]
joyfly
驱动小牛
驱动小牛
  • 注册日期2002-07-02
  • 最后登录2009-09-17
  • 粉丝0
  • 关注0
  • 积分319分
  • 威望32点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-24 10:28
RETAILMSG/DEBUGMSG最后就是调到OEMWriteDebugString 里去的.

基本上dbgapi.h里声明的那几个方式都可以用来显示调试信息.
www.cnemb.com
liuxuer_123
驱动牛犊
驱动牛犊
  • 注册日期2004-12-10
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-24 13:56
dbgapi里面的那些函数是用的NKDbgPrintfW,OEMWriteDebugString不是一回事的,它是bootloder里面用来写字符串倒debug monitor port的,可以输出到串口的
[color=blue]柳絮儿...满天飞...[/color]
joyfly
驱动小牛
驱动小牛
  • 注册日期2002-07-02
  • 最后登录2009-09-17
  • 粉丝0
  • 关注0
  • 积分319分
  • 威望32点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-03-24 14:52
你只看到了BOOTLOADER里有OEMWriteDebugString(), 干嘛不看看KERNEL\\HAL\\DEBUG.C里也有OEMWriteDebugString()呢?

NKDbgPrintfW()说到底也只是一个API, 纯粹软件的东西,如果不通过一些与硬件相关的接口,怎么把数据传出来呢?
而硬件相关的接口,各个DEVICE DRIVERS是一种,KERNEL里的HAL(Hardware Abstract Layer)也是一种.
NKDbgPrintfW()最终也是调用OEMWriteDebugString()才能输出的.
OEMWriteDebugString()底下还要分是用serial还是用ethernet输出的呢.

[编辑 -  3/24/05 by  joyfly]
www.cnemb.com
liuxuer_123
驱动牛犊
驱动牛犊
  • 注册日期2004-12-10
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-03-24 15:40
那要怎样才能知道OEMWriteDebugString是如何定义的哪?不知道在哪儿
另外如果它是很底层的函数,我为什么不能在驱动中调用它哪,加上头文件,链接库(还不清楚如何链接)?
还有你说不是这么用的,那是怎么用哪?
[color=blue]柳絮儿...满天飞...[/color]
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-03-28 16:55
不能,这个函数属于内核(准确说是属于OAL层),应用代码(包括驱动)不可以直接使用,如果强行编译进你的驱动会产生DATA ABORT。

上层可以使用这个函数的封装,如果你想输出信息,使用DEBUGMSG,RETAILMSG
根据地的兄弟们,团结就是力量
liuxuer_123
驱动牛犊
驱动牛犊
  • 注册日期2004-12-10
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-03-28 17:16
好的,我知道了,反正是属于内核的,不能用
不过,我说它是bootloader的函数,是pb文档中的,不然可以查一下这个函数然后看上面的目录层
[color=blue]柳絮儿...满天飞...[/color]
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-03-29 13:29
kernel和bootloader共享的oal层接口函数
根据地的兄弟们,团结就是力量
游客

返回顶部