阅读:2417回复:20
编译驱动的奇怪问题
我参考wince的例子写了个驱动程序,现在想把它编译到nk.bin中去。
我修改了.cec,platform.bib和platform.reg三个文件,通过编译信息我发现platform已经编译了这个驱动,有关信息如下: Files: 58 BUILD: Compiling c:\wince420\platform\am3902\drivers\addfunction\serial directory BUILD: Compiling c:\wince420\platform\am3902\gwe\battery directory Compiling - c:\wince420\platform\am3902\gwe\battery\.\battery.c for ARM Files: 19 BUILD: Linking c:\wince420\platform\am3902\drivers\addfunction\serial directory BUILD: Done 61 files compiled - 24 Warnings - 15 LPS 我的驱动放在c:\wince420\platform\am3902\drivers\addfunction\serial目录下(也有sources,makefile,s16554serial.def),am3902是我的bsp的目录。该驱动的sources,makefile和s16554serial.def我是参考其它驱动的相同文件写的,应该没说明问题。 在platform.bib里加了以下信息: IF BSP_EP931X_ADD_SERIAL s16554serial.dll $(_FLATRELEASEDIR)\s16554serial.dll NK SH ENDIF 在platform.reg里加了以下信息: IF BSP_EP931X_ADD_SERIAL [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial_4] "DeviceArrayIndex"=dword:4 "Prefix"="COM" "index"=dword:4 "Dll"="s16554serial.Dll" "Order"=dword:0 [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial_5] "DeviceArrayIndex"=dword:5 "Prefix"="COM" "index"=dword:5 "Dll"="s16554serial.Dll" "Order"=dword:0 [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial_6] "DeviceArrayIndex"=dword:6 "Prefix"="COM" "index"=dword:6 "Dll"="s16554serial.Dll" "Order"=dword:2 [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial_7] "DeviceArrayIndex"=dword:7 "Prefix"="COM" "index"=dword:7 "Dll"="s16554serial.Dll" "Order"=dword:2 ENDIF 在sources中也定义了: RELEASETYPE=PLATFORM TARGETNAME=s16554serial DEFFILE=s16554serial.def TARGETTYPE=DYNLINK DLLENTRY=DllEntry 但是我在am3902的target目录下没有看到s16554serial.dll文件,在nb.bin里也没有这个文件。 这就奇怪了。不知道有没有哪位遇到过这样的情况?? |
|
最新喜欢:ltgbj |
沙发#
发布于:2005-01-18 12:07
你设置BSP_EP931X_ADD_SERIAL=1了吗?
|
|
|
板凳#
发布于:2005-01-18 13:53
补充一下,有时候我也遇到过奇怪的问题:
就是编译完成后在target目录下找不到刚刚打包到nk中的文件,但是在nk中能看到。 |
|
|
地板#
发布于:2005-01-18 14:36
我在.cec里设置啦.
|
|
论坛版主
|
地下室#
发布于:2005-01-18 14:41
set WINCEOEM=1
我记得是这个变量。如果还不对到public\\yourplatform\\wince420\\bspname\\oak\\target。里面找 wwei_wang 兄弟,原来听说你弄好的,你用的loadintchainhandler那个dll有没得啥子需要注意的,好些在问说用giisr就可以加载,自己定义的就不能挂上去,咋个回事?是不是路径放得不对? |
|
5楼#
发布于:2005-01-18 14:48
我去试试.谢了.
|
|
论坛版主
|
6楼#
发布于:2005-01-18 15:10
应该是RELEASETYPE=PLATFORM
|
|
7楼#
发布于:2005-01-18 15:27
这个我不是已经设置了吗?
|
|
论坛版主
|
8楼#
发布于:2005-01-18 15:52
喔,没注意:),还是没有找到?你确定编译后没有东西生成?那你看看LOG文件吧
|
|
9楼#
发布于:2005-01-18 16:03
没这么困难吧:)))
在PB FeatureView里鼠标右击这个特性,看看setting里面General下面build and include in image是否选中?再看看custom bib设置里面有没有问题? |
|
|
10楼#
发布于:2005-01-19 08:58
加了WINCEOEM=1,现在可以编译了,
但是编译时很奇怪,我在我的程序里调用了一个函数在原来的BSP里定义的,但是编译链接.obj时pb说找不到这个函数. |
|
11楼#
发布于:2005-01-19 09:19
是不是在你的程序里没有包含相应的头文件啊?或者库文件的路径不对啊?
|
|
|
12楼#
发布于:2005-01-19 09:33
我已经包含头文件啦.是这样的:
我在我的程序里用到了DelayInuSec函数,它在debugtimer.h里声明了,在debugtimer.c里实现.我在我的程序里包含了debugtimer.h,但是链接我的程序的.obj时出现如下错误: c:\wince420\platform\am3902\drivers\addfunction\serial\ser16554.obj() : error LNK2019: unresolved external symbol DelayInuSec referenced in function UartWriteREG c:\wince420\platform\am3902\target\armv4i\retail\s16554serial.dll() : error LNK1120: 1 unresolved externals 我是在UartWriteREG函数里调用DelayInuSec的. 真是令人沮丧. |
|
13楼#
发布于:2005-01-19 09:57
是不是你调用DelayInuSec函数时的格式与所定义的格式不同啊?
|
|
|
14楼#
发布于:2005-01-19 11:09
我已经包含头文件啦.是这样的: 对对对,我也碰到过这样的问题,不知道是不是需要加什么配置,另外不同层的函数在同一层编译也会出问题,我感到很郁闷。 |
|
论坛版主
|
15楼#
发布于:2005-01-20 13:35
先说一个好消息:这个问题我也遇到过(记得是),并且后来弄好了。
再说一个坏消息:我忘了我怎么弄好的了:(((( 解决办法:你们找一个可以单独编译的目录,然后把它的source考过来,然后把sourec=改成你们的。特别注意,soureces文件的格式要求很严,千万不要乱加东西,我指的是空格和tabel键!!!!切记 最后确保你们的原文件被编译成了xxx.obj,并且放到了本目录里面,否则就会找不到 |
|
16楼#
发布于:2005-01-20 16:43
我用了个最笨的方法,就是直接把这个函数的代码考过来,结果居然可以了。hehe
可惜驱动还是不行。我原来是参考pb自带的ser16550驱动,现在想用com16550的来试试。 因为16550和16554的寄存器地址是一样的,所以我要考虑的主要是两个问题,第一是加入串口索引号(因为16550只有一个串口,而16554有4个);第二是中断问题。 不知道我说的对不对,还有就是中断要考虑些说明问题? 谢谢 |
|
17楼#
发布于:2005-01-22 18:53
我已经在oalintr.h中注册了系统中断号,在函数OEMInterruptHandler,OEMInterruptEnable,OEMInterruptDisable,OEMInterruptDone中加入了自己的中断处理。
我的问题是:怎样将自己的IST与中断联系起来? 是不是用InterruptInitialize函数? 我用的是ARM9处理器。 |
|
18楼#
发布于:2005-01-24 08:30
我已经在oalintr.h中注册了系统中断号,在函数OEMInterruptHandler,OEMInterruptEnable,OEMInterruptDisable,OEMInterruptDone中加入了自己的中断处理。 对的。 |
|
|
19楼#
发布于:2005-01-24 13:49
InterruptInitialize函数只是把一个Event跟一个IST关联而已
IST还是驱动程序在device.exe的进程空间建立的,他如何能够访问一个制定的物理设备呢?小弟菜鸟的问 |
|
上一页
下一页