xzffff
驱动小牛
驱动小牛
  • 注册日期2003-07-06
  • 最后登录2012-09-20
  • 粉丝0
  • 关注0
  • 积分377分
  • 威望41点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
阅读:2417回复:20

编译驱动的奇怪问题

楼主#
更多 发布于:2005-01-18 11:30
我参考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里也没有这个文件。
这就奇怪了。不知道有没有哪位遇到过这样的情况??

最新喜欢:

ltgbjltgbj
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-18 12:07
你设置BSP_EP931X_ADD_SERIAL=1了吗?
Come on, let us drive the world.
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-18 13:53
补充一下,有时候我也遇到过奇怪的问题:
就是编译完成后在target目录下找不到刚刚打包到nk中的文件,但是在nk中能看到。
Come on, let us drive the world.
xzffff
驱动小牛
驱动小牛
  • 注册日期2003-07-06
  • 最后登录2012-09-20
  • 粉丝0
  • 关注0
  • 积分377分
  • 威望41点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-18 14:36
我在.cec里设置啦.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-18 14:41
set WINCEOEM=1
我记得是这个变量。如果还不对到public\\yourplatform\\wince420\\bspname\\oak\\target。里面找

wwei_wang
兄弟,原来听说你弄好的,你用的loadintchainhandler那个dll有没得啥子需要注意的,好些在问说用giisr就可以加载,自己定义的就不能挂上去,咋个回事?是不是路径放得不对?
根据地的兄弟们,团结就是力量
xzffff
驱动小牛
驱动小牛
  • 注册日期2003-07-06
  • 最后登录2012-09-20
  • 粉丝0
  • 关注0
  • 积分377分
  • 威望41点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-18 14:48
我去试试.谢了.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-18 15:10
应该是RELEASETYPE=PLATFORM
根据地的兄弟们,团结就是力量
xzffff
驱动小牛
驱动小牛
  • 注册日期2003-07-06
  • 最后登录2012-09-20
  • 粉丝0
  • 关注0
  • 积分377分
  • 威望41点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-18 15:27
这个我不是已经设置了吗?
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-01-18 15:52
喔,没注意:),还是没有找到?你确定编译后没有东西生成?那你看看LOG文件吧
根据地的兄弟们,团结就是力量
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-01-18 16:03
没这么困难吧:)))
在PB FeatureView里鼠标右击这个特性,看看setting里面General下面build and include in image是否选中?再看看custom bib设置里面有没有问题?
Come on, let us drive the world.
xzffff
驱动小牛
驱动小牛
  • 注册日期2003-07-06
  • 最后登录2012-09-20
  • 粉丝0
  • 关注0
  • 积分377分
  • 威望41点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-01-19 08:58
加了WINCEOEM=1,现在可以编译了,
但是编译时很奇怪,我在我的程序里调用了一个函数在原来的BSP里定义的,但是编译链接.obj时pb说找不到这个函数.
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-01-19 09:19
是不是在你的程序里没有包含相应的头文件啊?或者库文件的路径不对啊?
Come on, let us drive the world.
xzffff
驱动小牛
驱动小牛
  • 注册日期2003-07-06
  • 最后登录2012-09-20
  • 粉丝0
  • 关注0
  • 积分377分
  • 威望41点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
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的.
真是令人沮丧.
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-01-19 09:57
是不是你调用DelayInuSec函数时的格式与所定义的格式不同啊?
Come on, let us drive the world.
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-01-19 11:09
我已经包含头文件啦.是这样的:
我在我的程序里用到了DelayInuSec函数,它在debugtimer.h里声明了,在debugtimer.c里实现.我在我的程序里包含了debugtimer.h,但是链接我的程序的.obj时出现如下错误:
c:wince420platformam3902driversaddfunctionserialser16554.obj() : error LNK2019: unresolved external symbol DelayInuSec referenced in function UartWriteREG
c:wince420platformam3902targetarmv4iretails16554serial.dll() : error LNK1120: 1 unresolved externals

我是在UartWriteREG函数里调用DelayInuSec的.
真是令人沮丧.


对对对,我也碰到过这样的问题,不知道是不是需要加什么配置,另外不同层的函数在同一层编译也会出问题,我感到很郁闷。
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-01-20 13:35
先说一个好消息:这个问题我也遇到过(记得是),并且后来弄好了。

再说一个坏消息:我忘了我怎么弄好的了:((((

解决办法:你们找一个可以单独编译的目录,然后把它的source考过来,然后把sourec=改成你们的。特别注意,soureces文件的格式要求很严,千万不要乱加东西,我指的是空格和tabel键!!!!切记

最后确保你们的原文件被编译成了xxx.obj,并且放到了本目录里面,否则就会找不到
根据地的兄弟们,团结就是力量
xzffff
驱动小牛
驱动小牛
  • 注册日期2003-07-06
  • 最后登录2012-09-20
  • 粉丝0
  • 关注0
  • 积分377分
  • 威望41点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-01-20 16:43
我用了个最笨的方法,就是直接把这个函数的代码考过来,结果居然可以了。hehe
可惜驱动还是不行。我原来是参考pb自带的ser16550驱动,现在想用com16550的来试试。
因为16550和16554的寄存器地址是一样的,所以我要考虑的主要是两个问题,第一是加入串口索引号(因为16550只有一个串口,而16554有4个);第二是中断问题。
不知道我说的对不对,还有就是中断要考虑些说明问题?
谢谢
xzffff
驱动小牛
驱动小牛
  • 注册日期2003-07-06
  • 最后登录2012-09-20
  • 粉丝0
  • 关注0
  • 积分377分
  • 威望41点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-01-22 18:53
我已经在oalintr.h中注册了系统中断号,在函数OEMInterruptHandler,OEMInterruptEnable,OEMInterruptDisable,OEMInterruptDone中加入了自己的中断处理。
我的问题是:怎样将自己的IST与中断联系起来?
是不是用InterruptInitialize函数?
我用的是ARM9处理器。
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-01-24 08:30
我已经在oalintr.h中注册了系统中断号,在函数OEMInterruptHandler,OEMInterruptEnable,OEMInterruptDisable,OEMInterruptDone中加入了自己的中断处理。
我的问题是:怎样将自己的IST与中断联系起来?
是不是用InterruptInitialize函数?
我用的是ARM9处理器。



对的。
Come on, let us drive the world.
freasy
驱动牛犊
驱动牛犊
  • 注册日期2004-01-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-01-24 13:49
InterruptInitialize函数只是把一个Event跟一个IST关联而已
IST还是驱动程序在device.exe的进程空间建立的,他如何能够访问一个制定的物理设备呢?小弟菜鸟的问
上一页
游客

返回顶部