阅读:1717回复:9
Why?OEMWritedebugstring函数在驱动程序中不能用?
我在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中用嘛?不会吧,我包含了它的头文件哪, 困惑中........... |
|
|
沙发#
发布于:2005-03-24 03:17
只包含头文件不够,要把包含函数实现的LIB或DLL连接进来啊.
另外,OEMWriteDebugString 本来就不是给你这么用的. 你要打出DEBUG消息,用RETAILMSG(1,....)就可以了.只要include \"dbgapi.h\" |
|
|
板凳#
发布于:2005-03-24 09:06
我本来是想在串口显示debug信息的,所以就用这个函数来试,结果不行,这个函数是oal层的函数,在驱动里面是不能用的,至少我目前是这么认为.
我也想过怎样把它的库加进去,应该是在source文件里面,但是这个库文件nk.lib是编译后才会生成的,不知如何写出它的路径... debugzone还是蛮好用的,只是当时不熟悉,一心想让它在串口显示.呵呵 至于上面的问题,有何高见,尽管说啊 |
|
|
地板#
发布于:2005-03-24 10:28
RETAILMSG/DEBUGMSG最后就是调到OEMWriteDebugString 里去的.
基本上dbgapi.h里声明的那几个方式都可以用来显示调试信息. |
|
|
地下室#
发布于:2005-03-24 13:56
dbgapi里面的那些函数是用的NKDbgPrintfW,OEMWriteDebugString不是一回事的,它是bootloder里面用来写字符串倒debug monitor port的,可以输出到串口的
|
|
|
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] |
|
|
6楼#
发布于:2005-03-24 15:40
那要怎样才能知道OEMWriteDebugString是如何定义的哪?不知道在哪儿
另外如果它是很底层的函数,我为什么不能在驱动中调用它哪,加上头文件,链接库(还不清楚如何链接)? 还有你说不是这么用的,那是怎么用哪? |
|
|
论坛版主
|
7楼#
发布于:2005-03-28 16:55
不能,这个函数属于内核(准确说是属于OAL层),应用代码(包括驱动)不可以直接使用,如果强行编译进你的驱动会产生DATA ABORT。
上层可以使用这个函数的封装,如果你想输出信息,使用DEBUGMSG,RETAILMSG |
|
8楼#
发布于:2005-03-28 17:16
好的,我知道了,反正是属于内核的,不能用
不过,我说它是bootloader的函数,是pb文档中的,不然可以查一下这个函数然后看上面的目录层 |
|
|
论坛版主
|
9楼#
发布于:2005-03-29 13:29
kernel和bootloader共享的oal层接口函数
|
|