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

[复制链接]
5647|20
 楼主| zzddk 发表于 2008-1-15 10:43 | 显示全部楼层 |阅读模式
更改WinCE5.0下OAL中的代码,如何编译??<br /><br />想去掉串口1的调试口功能,于是更改了$(_WINCEROOT)PUBLICCOMMONOAKCSPI486OALdebug.c中的代码,<br />在PB下,打开Build-&gtOpen&nbsp;Build&nbsp;Release&nbsp;Directory,<br /><br />进入$(_WINCEROOT)PUBLICCOMMONOAKCSPI486OAL目录下,键入build&lten&gt,返回“‘build’不是内部或外部命令,也不是可运行的程序或批处理文件。”<br />也就是说build执行不成功,&nbsp;<br />系统不能识别build这个命令,<br /><br />在PB的FileView中找到debug.c文件,打开Build&nbsp;Project-&gtBuild&nbsp;and&nbsp;Sysgen&nbsp;Current&nbsp;Project,同样也不能正确执行Build,提示“‘build’不是内部或外部命令,也不是可运行的程序或批处理文件。”最后也没有生成想要的.lib文件。<br /><br />是那里的问题呢?是不是系统中那里没有设置正确,那位达人遇到过类似的问题,给点提示!!在此谢过。
high 发表于 2008-1-15 11:24 | 显示全部楼层

build os

build&nbsp;os&nbsp;-&gt&nbsp;open&nbsp;release&nbsp;directory&nbsp;-&gtuse&nbsp;command&nbsp;cd&nbsp;jump&nbsp;to&nbsp;your&nbsp;oal&nbsp;directory&nbsp;-&gt&nbsp;build&nbsp;-c&nbsp;-&gt&nbsp;makeimg
high 发表于 2008-1-15 11:27 | 显示全部楼层

you should check the env variale PATH.

  
high 发表于 2008-1-15 19:59 | 显示全部楼层

检查路径

  
high 发表于 2008-1-15 20:00 | 显示全部楼层

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

  
 楼主| zzddk 发表于 2008-1-16 13:42 | 显示全部楼层

这是path后的结果..

*******************************************************************<br />This&nbsp;command&nbsp;window&nbsp;is&nbsp;set&nbsp;up&nbsp;for&nbsp;running&nbsp;CESH&nbsp;or&nbsp;other&nbsp;debug&nbsp;tools<br />*******************************************************************<br /><br />D:WINCE500PBWorkspacesqq2440v5RelDirsmdk2440_ARMV4I_Release&gtpath<br />PATH=D:WINCE500sdkini386ARM;D:WINCE500sdkini386;D:WINCE500publicco<br />mmonoakini386prefastscripts;D:WINCE500publiccommonoakBini386;D:WINC<br />E500privateini386;D:WINCE500privateat;D:WINCE500publiccommonoakmisc<br />;D:WINCE500developrzzhero;D:Program&nbsp;FilesWindows&nbsp;CE&nbsp;Platform&nbsp;Builder5.00c<br />epbin;D:Program&nbsp;FilesWindows&nbsp;CE&nbsp;Platform&nbsp;Builder5.00cepbin;C:Program&nbsp;F<br />ilesARMADSv1_2in;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:<br />PROGRA~1ULTRAE~1;C:WINDOWSsystem32;C:WINDOWS;D:Program&nbsp;FilesWindows&nbsp;CE&nbsp;Pla<br />tform&nbsp;Builder5.00cepbin<br />
 楼主| zzddk 发表于 2008-1-16 13:44 | 显示全部楼层

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

  
ap9805411 发表于 2008-1-16 16:01 | 显示全部楼层

看图

找到你相应的目录编译就行。<br /><br />另在新建一个项目的时候,要先用Build&nbsp;OS-&gtBuild&nbsp;and&nbsp;Sysgen(注意选上Clean&nbsp;Before&nbsp;Building)先编译一次。
high 发表于 2008-1-16 16:43 | 显示全部楼层

路径没有问题.

会不会选择错误的cpu架构了,如果仍没有解决,可以把set下所有的环境变量贴出来.<br />cmd.exe:<br /><br />set&nbsp;&gt&nbsp;env.log<br /><br />then,&nbsp;post&nbsp;the&nbsp;env.log&nbsp;.
 楼主| zzddk 发表于 2008-1-17 09:27 | 显示全部楼层

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

Win&nbsp;CE的环境是Win&nbsp;CE5.0,ARM&nbsp;S3C2440.<br />Win&nbsp;CE是装在D盘的,OAL的路径为:D:WINCE500PUBLICCOMMONOAKCSPX86OAL<br />我更改了debug.c的代码,就是想去掉串口1的调试功能,在void&nbsp;OEMInitDebugSerial(void)函数中加了一句:<br />&nbsp;&nbsp;&nbsp;&nbsp;g_pBootArgs-&gtucComPort&nbsp;=&nbsp;0;<br /><br />在路径D:WINCE500PUBLICCOMMONOAKCSP下除了X86,还有ARM这个选项,但ARM目录下面没有代码文件,只有X86下有OAL文件夹.<br />我在更改了debug.c代码后,用右键,选择&quot;open&nbsp;build&nbsp;window&quot;,进入命令框,如下:<br />*******************************************************************<br />This&nbsp;command&nbsp;window&nbsp;is&nbsp;set&nbsp;up&nbsp;for&nbsp;running&nbsp;CESH&nbsp;or&nbsp;other&nbsp;debug&nbsp;tools<br />*******************************************************************<br /><br />D:WINCE500publiccommonoakCSPx86oal&gt<br /><br />然后&quot;build&nbsp;-c&quot;<br />debug.c文件可以build通过,但是timer.c等其他几个文件中有内嵌汇编代码,就会出错,报错不能编译.<br /><br />于是新建工程,用Build&nbsp;OS-&gtBuild&nbsp;and&nbsp;Sysgen工程,在目录:D:WINCE500PUBLICCOMMONOAKLIBARMV4IRETAIL下可以生成很多.lib文件,但是没有生成i486oal.lib文件////<br /><br />修改OAL后就应该在生成一个新的i486oal.lib文件吧..<br />是什么问题呢??
high 发表于 2008-1-17 13:05 | 显示全部楼层

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

工作时候,根据环境变量指定的架构来选择对应的工具.编译的时候也是根据环境变量指定的架构进入相应库的源代码来编译.所以不会有您提到的i486oal.lib<br /><br />你的情况应该是csp里面缺少arm的代码.
 楼主| zzddk 发表于 2008-1-18 09:35 | 显示全部楼层

CSP里缺少arm的代码..

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

解决办法

你的问题不是调试口占用了串口1.(调试输出口的确也占用了,但不会造成应用打不开.)应该是其他程序占用了.下面是一个简单折中的测试和解决办法.<br /><br />修改注册表builtin下面关于串口1的.<br /><br />把index项的值改了.比如改成串口8.这样你的系统COM1&nbsp;--&gt&nbsp;COM8.而那个未知的占用串口1的程序一般会返回错误.<br />-------<br />要修改的debug.c一般不是在csp目录下.你到bspkernel目录下,hal或者oal目录里面找.这里可以修改debug&nbsp;port
 楼主| zzddk 发表于 2008-1-21 09:50 | 显示全部楼层

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

确实是楼主所说的问题,我把COM1改成COM4就可以打开了.也就是说不是调试占用了串口,而是别的程序占用了串口1,<br />按您的方法作:<br />&quot;把index项的值改了.比如改成串口8.这样你的系统COM1&nbsp;--&gt&nbsp;COM8.而那个未知的占用串口1的程序一般会返回错误.&quot;<br /><br />UART0是可以打开了,把UART0以前对应的COM1改为COM4,即index改为4,可以找开UART0,即COM4,当然,如楼主所说,确实有问题出现了,就是USB连PC的ActiveSync连不上了,无论我是重启电脑还是重启开发板都不行,而我把没有更改这前的NK文件下载到开发板,可以正常连接.<br /><br />所以发现问题所在:不是调试占用COM1口,而是USB连接占用了COM1口,只要更改UART0不用COM1作为端口即可,可以改为COM8等等,但这样又会出现新问题,就是USB不能连接到PC,通过ActiveSync.<br /><br />我仔细查得了注册表,USB的注册表如下:<br /><br /><br />[HKEY_LOCAL_MACHINEDriversBuiltInUSB]<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Dll&quot;=&quot;sc2440_usb_ser.Dll&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;IoBase&quot;=dword:B1200000<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Irq&quot;=dword:B<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;IoLen&quot;=dword:130<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Tsp&quot;=&quot;Unimodem.dll&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DeviceArrayIndex&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Prefix&quot;=&quot;COM&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Order&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DeviceType&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;FriendlyName&quot;=&quot;SC2440&nbsp;USB&nbsp;Cable:&quot;<br />;&nbsp;Eliminate&nbsp;flow&nbsp;control&nbsp;bit<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DevConfig&quot;=hex:&nbsp;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<br /><br />[HKEY_LOCAL_MACHINECommUSBLinkage]<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Bind&quot;=multi_sz:&quot;SC2440USB1&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />[HKEY_LOCAL_MACHINECommSC2440USB]<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DisplayName&quot;=&quot;SC2440&nbsp;USB&nbsp;Driver&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Group&quot;=&quot;Serial&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;ImagePath&quot;=&quot;sc2440_usb_ser.dll&quot;<br /><br />[HKEY_LOCAL_MACHINECommSC2440USBLinkage]<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Route&quot;=multi_sz:&quot;SC2440USB1&quot;<br /><br />[HKEY_LOCAL_MACHINECommSC2440USB1Parms]<br />ENDIF&nbsp;BSP_NOUSBSER&nbsp;!<br />;&nbsp;@CESYSGEN&nbsp;ENDIF&nbsp;CE_MODULES_USBD<br /><br />USB的prefix是COM,Order是0,dmj&nbsp;q&nbsp;
 楼主| zzddk 发表于 2008-1-21 09:53 | 显示全部楼层

三串口的注册表项

USB的prefix是COM,Order是0..<br />而三串口的注册表项里,prefix是COM,Order是0,都是一样的,三串口的注册表项如下:<br />[HKEY_LOCAL_MACHINEDriversBuiltInSER2440]<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DeviceArrayIndex&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Irq&quot;=dword:03<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;IoBase&quot;=dword:50000000<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;IoLen&quot;=dword:2C<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Prefix&quot;=&quot;COM&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Dll&quot;=&quot;SER2440.Dll&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Order&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Index&quot;=dword:1<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Priority&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Port&quot;=&quot;COM1:&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DeviceType&quot;=dword:0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;FriendlyName&quot;=&quot;Serial&nbsp;Cable&nbsp;on&nbsp;COM1&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Tsp&quot;=&quot;Unimodem.dll&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DevConfig&quot;=hex:&nbsp;10,00,&nbsp;00,00,&nbsp;05,00,00,00,&nbsp;10,01,00,00,&nbsp;00,4B,00,00,&nbsp;00,00,&nbsp;08,&nbsp;00,&nbsp;00,&nbsp;00,00,00,00<br /><br />[HKEY_LOCAL_MACHINEDriversBuiltInSER2440_2]<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DeviceArrayIndex&quot;=dword:1<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Irq&quot;=dword:17<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;IoBase&quot;=dword:50004000<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;IoLen&quot;=dword:2C<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Prefix&quot;=&quot;COM&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Dll&quot;=&quot;SER2440.Dll&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Order&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Index&quot;=dword:2<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Priority&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Port&quot;=&quot;COM2:&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DeviceType&quot;=dword:0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;FriendlyName&quot;=&quot;Serial&nbsp;Cable&nbsp;on&nbsp;COM2&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DevConfig&quot;=hex:&nbsp;10,00,&nbsp;00,00,&nbsp;05,00,00,00,&nbsp;10,01,00,00,&nbsp;00,4B,00,00,&nbsp;00,00,&nbsp;08,&nbsp;00,&nbsp;00,&nbsp;00,00,00,00<br /><br />[HKEY_LOCAL_MACHINEDriversBuiltInSER2440_3]<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DeviceArrayIndex&quot;=dword:2<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Irq&quot;=dword:09<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;IoBase&quot;=dword:50008000<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;IoLen&quot;=dword:2C<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Prefix&quot;=&quot;COM&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Dll&quot;=&quot;SER2440.Dll&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Order&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Index&quot;=dword:3<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Priority&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Port&quot;=&quot;COM3:&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DeviceType&quot;=dword:0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;FriendlyName&quot;=&quot;Serial&nbsp;Cable&nbsp;on&nbsp;COM3&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DevConfig&quot;=hex:&nbsp;10,00,&nbsp;00,00,&nbsp;05,00,00,00,&nbsp;10,01,00,00,&nbsp;00,4B,00,00,&nbsp;00,00,&nbsp;08,&nbsp;00,&nbsp;00,&nbsp;00,00,00,00
 楼主| zzddk 发表于 2008-1-21 10:02 | 显示全部楼层

分析问题可能的原因

也就是说USB,com1,com2,com3的prefix都是COM,order都是0,而COM1,COM2,COM3的index分别为:<br />COM1-----&gt&quot;Index&quot;=dword:1<br />COM2-----&gt&quot;Index&quot;=dword:2<br />COM3-----&gt&quot;Index&quot;=dword:3<br />而系统在加载驱动的时候,先加载了USB的驱动,于是COM1就被占用了,而后来的串口COM1就打不开,<br />但问题是把UART0对应的COM1改为COM8,可以打开UART0,为什么USB连接又不能用了呢??<br />在没有加串口2和串口3的驱云之间,USB和COM1也就是这样存在的,没加载之前USB和COM1的注册表项分别为:<br />[HKEY_LOCAL_MACHINEDriversBuiltInUSB]<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Dll&quot;=&quot;sc2440_usb_ser.Dll&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;IoBase&quot;=dword:B1200000<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Irq&quot;=dword:B<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;IoLen&quot;=dword:130<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Tsp&quot;=&quot;Unimodem.dll&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DeviceArrayIndex&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Prefix&quot;=&quot;COM&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Order&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DeviceType&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;FriendlyName&quot;=&quot;SC2440&nbsp;USB&nbsp;Cable:&quot;<br />;&nbsp;Eliminate&nbsp;flow&nbsp;control&nbsp;bit<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DevConfig&quot;=hex:&nbsp;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<br /><br />[HKEY_LOCAL_MACHINEDriversBuiltInSER2440]<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DeviceArrayIndex&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Irq&quot;=dword:03<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;IoBase&quot;=dword:50000000<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;IoLen&quot;=dword:2C<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Prefix&quot;=&quot;COM&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Dll&quot;=&quot;SER2440.Dll&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Order&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Index&quot;=dword:1<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Priority&quot;=dword:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Port&quot;=&quot;COM1:&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DeviceType&quot;=dword:0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;FriendlyName&quot;=&quot;Serial&nbsp;Cable&nbsp;on&nbsp;COM1&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;Tsp&quot;=&quot;Unimodem.dll&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;DevConfig&quot;=hex:&nbsp;10,00,&nbsp;00,00,&nbsp;05,00,00,00,&nbsp;10,01,00,00,&nbsp;00,4B,00,00,&nbsp;00,00,&nbsp;08,&nbsp;00,&nbsp;00,&nbsp;00,00,00,00<br /><br />为什么加载了COM2和COM3之后就会不能共存呢,USB和COM1???????
 楼主| zzddk 发表于 2008-1-21 12:49 | 显示全部楼层

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

贴子前面加了一个&quot;酷&quot;,什么意思??<br />
lpf336 发表于 2008-1-21 12:53 | 显示全部楼层

精华帖子

  
high 发表于 2008-1-25 17:49 | 显示全部楼层

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

  <br /> 相关链接:<a href='http://www.chenyq2008.spaces.live.com'>http://www.chenyq2008.spaces.live.com</a>
high 发表于 2008-1-25 17:52 | 显示全部楼层

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

usb做同步链路似乎是模拟成为一个串口类型设备,所以也有一个COM,就如我们电脑上面的usb转串口.也会出现一个COM10之类的.<br /><br />ce4.2好像以前我是在usb下面人为添加了index,将他指向其他COM8之类的,避免冲突.<br />---<br />加酷方便后面人查找在精华区.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

20

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部