打印

更改WinCE5.0下OAL中的代码,如何编译??

[复制链接]
4654|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zzddk|  楼主 | 2008-1-15 10:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
更改WinCE5.0下OAL中的代码,如何编译??

想去掉串口1的调试口功能,于是更改了$(_WINCEROOT)PUBLICCOMMONOAKCSPI486OALdebug.c中的代码,
在PB下,打开Build->Open Build Release Directory,

进入$(_WINCEROOT)PUBLICCOMMONOAKCSPI486OAL目录下,键入build<en>,返回“‘build’不是内部或外部命令,也不是可运行的程序或批处理文件。”
也就是说build执行不成功, 
系统不能识别build这个命令,

在PB的FileView中找到debug.c文件,打开Build Project->Build and Sysgen Current Project,同样也不能正确执行Build,提示“‘build’不是内部或外部命令,也不是可运行的程序或批处理文件。”最后也没有生成想要的.lib文件。

是那里的问题呢?是不是系统中那里没有设置正确,那位达人遇到过类似的问题,给点提示!!在此谢过。

相关帖子

沙发
high| | 2008-1-15 11:24 | 只看该作者

build os

build os -> open release directory ->use command cd jump to your oal directory -> build -c -> makeimg

使用特权

评论回复
板凳
high| | 2008-1-15 11:27 | 只看该作者

you should check the env variale PATH.

使用特权

评论回复
地板
high| | 2008-1-15 19:59 | 只看该作者

检查路径

使用特权

评论回复
5
high| | 2008-1-15 20:00 | 只看该作者

你在cmd.exe 里面敲path或者set path.然后贴出来.

使用特权

评论回复
6
zzddk|  楼主 | 2008-1-16 13:42 | 只看该作者

这是path后的结果..

*******************************************************************
This command window is set up for running CESH or other debug tools
*******************************************************************

D:WINCE500PBWorkspacesqq2440v5RelDirsmdk2440_ARMV4I_Release>path
PATH=D:WINCE500sdkini386ARM;D:WINCE500sdkini386;D:WINCE500publicco
mmonoakini386prefastscripts;D:WINCE500publiccommonoakBini386;D:WINC
E500privateini386;D:WINCE500privateat;D:WINCE500publiccommonoakmisc
;D:WINCE500developrzzhero;D:Program FilesWindows CE Platform Builder5.00c
epbin;D:Program FilesWindows CE Platform Builder5.00cepbin;C:Program F
ilesARMADSv1_2in;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:
PROGRA~1ULTRAE~1;C:WINDOWSsystem32;C:WINDOWS;D:Program FilesWindows CE Pla
tform Builder5.00cepbin

使用特权

评论回复
7
zzddk|  楼主 | 2008-1-16 13:44 | 只看该作者

是不是我那里路径没设置好啊??

使用特权

评论回复
8
ap9805411| | 2008-1-16 16:01 | 只看该作者

看图

找到你相应的目录编译就行。

另在新建一个项目的时候,要先用Build OS->Build and Sysgen(注意选上Clean Before Building)先编译一次。

使用特权

评论回复
9
high| | 2008-1-16 16:43 | 只看该作者

路径没有问题.

会不会选择错误的cpu架构了,如果仍没有解决,可以把set下所有的环境变量贴出来.
cmd.exe:

set > env.log

then, post the env.log .

使用特权

评论回复
10
zzddk|  楼主 | 2008-1-17 09:27 | 只看该作者

会不会选择错误的CPU架构??

Win CE的环境是Win CE5.0,ARM S3C2440.
Win CE是装在D盘的,OAL的路径为:D:WINCE500PUBLICCOMMONOAKCSPX86OAL
我更改了debug.c的代码,就是想去掉串口1的调试功能,在void OEMInitDebugSerial(void)函数中加了一句:
    g_pBootArgs->ucComPort = 0;

在路径D:WINCE500PUBLICCOMMONOAKCSP下除了X86,还有ARM这个选项,但ARM目录下面没有代码文件,只有X86下有OAL文件夹.
我在更改了debug.c代码后,用右键,选择"open build window",进入命令框,如下:
*******************************************************************
This command window is set up for running CESH or other debug tools
*******************************************************************

D:WINCE500publiccommonoakCSPx86oal>

然后"build -c"
debug.c文件可以build通过,但是timer.c等其他几个文件中有内嵌汇编代码,就会出错,报错不能编译.

于是新建工程,用Build OS->Build and Sysgen工程,在目录:D:WINCE500PUBLICCOMMONOAKLIBARMV4IRETAIL下可以生成很多.lib文件,但是没有生成i486oal.lib文件////

修改OAL后就应该在生成一个新的i486oal.lib文件吧..
是什么问题呢??

使用特权

评论回复
11
high| | 2008-1-17 13:05 | 只看该作者

在您的wincesdkini386目录有不同架构的编译链接工具

工作时候,根据环境变量指定的架构来选择对应的工具.编译的时候也是根据环境变量指定的架构进入相应库的源代码来编译.所以不会有您提到的i486oal.lib

你的情况应该是csp里面缺少arm的代码.

使用特权

评论回复
12
zzddk|  楼主 | 2008-1-18 09:35 | 只看该作者

CSP里缺少arm的代码..

谢谢版主,这个问题折磨了我很久,终于知道是什么原因了.
再想别的办法解决吧.
感觉有点对不住版主,跟贴跟了这么长时间竟然是因为我表述不清.根据版主给的提问的要点,我再把问题重述一遍:
1. 我开发的平台是Win CE 5.0+S3C2440
2. 问题是出现在目标设备上的,我在作三串口的驱动,因为我的目标版用的是QQ2440V3的,只有串口1的驱云,而且串口1还是作为调试口用的.我增加了串口2和串口3的驱动,已测试通过,可以通信.但是串口1却出问题了,串口1打不开,提示被占用,用CreateFile返回失败(0xffffffff).于是查了一些资料,觉得应该是被系统调试占用了,我更改了debug.c的代码,就是想去掉串口1的调试功能,在void OEMInitDebugSerial(void)函数中加了一句:
    g_pBootArgs->ucComPort = 0;
这个函数是在OAL里面的,想重新生成i486oal.lib文件,于是就出现了上面的问题.到现在还没有解决..

使用特权

评论回复
13
high| | 2008-1-18 11:55 | 只看该作者

解决办法

你的问题不是调试口占用了串口1.(调试输出口的确也占用了,但不会造成应用打不开.)应该是其他程序占用了.下面是一个简单折中的测试和解决办法.

修改注册表builtin下面关于串口1的.

把index项的值改了.比如改成串口8.这样你的系统COM1 --> COM8.而那个未知的占用串口1的程序一般会返回错误.
-------
要修改的debug.c一般不是在csp目录下.你到bspkernel目录下,hal或者oal目录里面找.这里可以修改debug port

使用特权

评论回复
14
zzddk|  楼主 | 2008-1-21 09:50 | 只看该作者

把COM1改成COM4就可以打开了.

确实是楼主所说的问题,我把COM1改成COM4就可以打开了.也就是说不是调试占用了串口,而是别的程序占用了串口1,
按您的方法作:
"把index项的值改了.比如改成串口8.这样你的系统COM1 --> COM8.而那个未知的占用串口1的程序一般会返回错误."

UART0是可以打开了,把UART0以前对应的COM1改为COM4,即index改为4,可以找开UART0,即COM4,当然,如楼主所说,确实有问题出现了,就是USB连PC的ActiveSync连不上了,无论我是重启电脑还是重启开发板都不行,而我把没有更改这前的NK文件下载到开发板,可以正常连接.

所以发现问题所在:不是调试占用COM1口,而是USB连接占用了COM1口,只要更改UART0不用COM1作为端口即可,可以改为COM8等等,但这样又会出现新问题,就是USB不能连接到PC,通过ActiveSync.

我仔细查得了注册表,USB的注册表如下:


[HKEY_LOCAL_MACHINEDriversBuiltInUSB]
    "Dll"="sc2440_usb_ser.Dll"
    "IoBase"=dword:B1200000
    "Irq"=dword:B
    "IoLen"=dword:130
    "Tsp"="Unimodem.dll"
    "DeviceArrayIndex"=dword:0
    "Prefix"="COM"
    "Order"=dword:0
    "DeviceType"=dword:0
    "FriendlyName"="SC2440 USB Cable:"
; Eliminate flow control bit
    "DevConfig"=hex: 10,00,00,00,05,00,00,00,00,01,00,00,00,4B,00,00,00,00,08,00,00,00,00,00,00

[HKEY_LOCAL_MACHINECommUSBLinkage]
    "Bind"=multi_sz:"SC2440USB1"
    
[HKEY_LOCAL_MACHINECommSC2440USB]
    "DisplayName"="SC2440 USB Driver"
    "Group"="Serial"
    "ImagePath"="sc2440_usb_ser.dll"

[HKEY_LOCAL_MACHINECommSC2440USBLinkage]
    "Route"=multi_sz:"SC2440USB1"

[HKEY_LOCAL_MACHINECommSC2440USB1Parms]
ENDIF BSP_NOUSBSER !
; @CESYSGEN ENDIF CE_MODULES_USBD

USB的prefix是COM,Order是0,dmj q 

使用特权

评论回复
15
zzddk|  楼主 | 2008-1-21 09:53 | 只看该作者

三串口的注册表项

USB的prefix是COM,Order是0..
而三串口的注册表项里,prefix是COM,Order是0,都是一样的,三串口的注册表项如下:
[HKEY_LOCAL_MACHINEDriversBuiltInSER2440]
    "DeviceArrayIndex"=dword:0
    "Irq"=dword:03
    "IoBase"=dword:50000000
    "IoLen"=dword:2C
    "Prefix"="COM"
    "Dll"="SER2440.Dll"
    "Order"=dword:0
    "Index"=dword:1
    "Priority"=dword:0
    "Port"="COM1:"
    "DeviceType"=dword:0 
    "FriendlyName"="Serial Cable on COM1"
    "Tsp"="Unimodem.dll"
    "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00

[HKEY_LOCAL_MACHINEDriversBuiltInSER2440_2]
    "DeviceArrayIndex"=dword:1
    "Irq"=dword:17
    "IoBase"=dword:50004000
    "IoLen"=dword:2C
    "Prefix"="COM"
    "Dll"="SER2440.Dll"
    "Order"=dword:0
    "Index"=dword:2
    "Priority"=dword:0
    "Port"="COM2:"
    "DeviceType"=dword:0 
    "FriendlyName"="Serial Cable on COM2"
    "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00

[HKEY_LOCAL_MACHINEDriversBuiltInSER2440_3]
    "DeviceArrayIndex"=dword:2
    "Irq"=dword:09
    "IoBase"=dword:50008000
    "IoLen"=dword:2C
    "Prefix"="COM"
    "Dll"="SER2440.Dll"
    "Order"=dword:0
    "Index"=dword:3
    "Priority"=dword:0
    "Port"="COM3:"
    "DeviceType"=dword:0 
    "FriendlyName"="Serial Cable on COM3"
    "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00

使用特权

评论回复
16
zzddk|  楼主 | 2008-1-21 10:02 | 只看该作者

分析问题可能的原因

也就是说USB,com1,com2,com3的prefix都是COM,order都是0,而COM1,COM2,COM3的index分别为:
COM1----->"Index"=dword:1
COM2----->"Index"=dword:2
COM3----->"Index"=dword:3
而系统在加载驱动的时候,先加载了USB的驱动,于是COM1就被占用了,而后来的串口COM1就打不开,
但问题是把UART0对应的COM1改为COM8,可以打开UART0,为什么USB连接又不能用了呢??
在没有加串口2和串口3的驱云之间,USB和COM1也就是这样存在的,没加载之前USB和COM1的注册表项分别为:
[HKEY_LOCAL_MACHINEDriversBuiltInUSB]
    "Dll"="sc2440_usb_ser.Dll"
    "IoBase"=dword:B1200000
    "Irq"=dword:B
    "IoLen"=dword:130
    "Tsp"="Unimodem.dll"
    "DeviceArrayIndex"=dword:0
    "Prefix"="COM"
    "Order"=dword:0
    "DeviceType"=dword:0
    "FriendlyName"="SC2440 USB Cable:"
; Eliminate flow control bit
    "DevConfig"=hex: 10,00,00,00,05,00,00,00,00,01,00,00,00,4B,00,00,00,00,08,00,00,00,00,00,00

[HKEY_LOCAL_MACHINEDriversBuiltInSER2440]
    "DeviceArrayIndex"=dword:0
    "Irq"=dword:03
    "IoBase"=dword:50000000
    "IoLen"=dword:2C
    "Prefix"="COM"
    "Dll"="SER2440.Dll"
    "Order"=dword:0
    "Index"=dword:1
    "Priority"=dword:0
    "Port"="COM1:"
    "DeviceType"=dword:0 
    "FriendlyName"="Serial Cable on COM1"
    "Tsp"="Unimodem.dll"
    "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00

为什么加载了COM2和COM3之后就会不能共存呢,USB和COM1???????

使用特权

评论回复
17
zzddk|  楼主 | 2008-1-21 12:49 | 只看该作者

贴子前面加了一个"酷",什么意思??

贴子前面加了一个"酷",什么意思??

使用特权

评论回复
18
lpf336| | 2008-1-21 12:53 | 只看该作者

精华帖子

使用特权

评论回复
19
high| | 2008-1-25 17:49 | 只看该作者

我最近写了关于自动同步的机制和实现.您可以参考下.

使用特权

评论回复
20
high| | 2008-1-25 17:52 | 只看该作者

你的是4.2的,我现在用5.0的.

usb做同步链路似乎是模拟成为一个串口类型设备,所以也有一个COM,就如我们电脑上面的usb转串口.也会出现一个COM10之类的.

ce4.2好像以前我是在usb下面人为添加了index,将他指向其他COM8之类的,避免冲突.
---
加酷方便后面人查找在精华区.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

20

帖子

0

粉丝