WinCE6.0中Romimage.exe的BUG

     WinCE6.0的Romimage.exe依然存在BUG,跟WinCE5.0一样。当新建的工程和PB的安装目录不在同一分区时就不能正确生成nb0文件。本以为WinCE6.0已经解决这个问题,不想饱汉不知饿汉饥,他们似乎没有发现这个BUG,也就不可能修复了。

       好在WinCE6.0开源,在Private的目录下找到了对应的源代码目录,打算修改代码,重新编译一个romimage.exe。看了半天,没找到什么线索,貌似少一些文件。只能另辟蹊径了。

       先找蛛丝马迹。在build.log找到一点线索,如下图所示,“failed moving temp file”!不能生成nb0文件,问题就在这。

           

     利用IDA反汇编romimage.exe。顺藤摸瓜,找到“failed moving temp file”,如下图所示。可以看到,是在调用MoveFileExW()时出错的。

           

       查了一下MoveFileExW()的用法,结合BUG的现象,不难发现,原来是参数dwFlags使用不正确。需要设置MOVEFILE_COPY_ALLOWED位。MOVEFILE_COPY_ALLOWED的功能如下:

     If the file is to be moved to a different volume, the function simulates the move by using the CopyFile and DeleteFile functions.

       显然,原来的程序中只设置了MOVEFILE_REPLACE_EXISTING位,为了支持不同分区的文件拷贝,需要增加MOVEFILE_COPY_ALLOWED的设置。

               

     修改方法:将push 1中的1改为3即可。      

                

     改完之后,重新编译NBOOT,NBOOT.nb0果然出来了!

             

    修改后的romimage.exe的下载地址:http://files.cnblogs.com/we-hjb/romimage.rar 。romimage.exe所在的目录为C:\WINCE600\PUBLIC\COMMON\OAK\BIN\I386。当然,如果不改romimage.exe,也可用cvrtbin得到nb0文件,在对应的BIB文件中添加相关代码即可。最坏的解决办法是将PB工程放在C盘,但前提是C盘足够大。

时间: 2024-09-14 00:49:41

WinCE6.0中Romimage.exe的BUG的相关文章

WinCE6.0中托管代码如何访问物理空间

      之前整理过一篇<WinCE6.0中应用程序如何直接访问物理空间>的短文,文中介绍的方法突破了WinCE6.0系统本身的限制,使应用程序能够直接读写指定的内存地址,如访问系统显存.在WinCE中,使用托管代码编写应用程序直接访问物理空间,之前也曾简单介绍过,当时是基于VB.NET实现的,请参考<WinCE下VB.NET程序的开发>.今天再凑一篇基于C#的.       原理之前两篇都已经讲过了,这里不再赘述.实现方法与VB.NET类似,首先用C++编写一个动态链接库,实现

WinCE6.0中应用程序如何直接访问物理空间

   在实际开发过程中,经常希望能在应用程序中直接读写设备的物理空间.以前在做WinCE6.0下的MEMMgr时通过秘密加载一个内核态驱动实现了这个需求.但这种方式有一个明显的缺陷,每次读写都必须经由它才能完成.如果只是读取GPIO,那问题不算大.如果想通过这种方式实现视频播放的加速就比较困难了.估计非但不能加速,反而会变得更慢.      早先曾与ZL仔细的讨论过这个问题,他当时在WinCE6.0上移植TCPMP,发现播放视频不太流畅,于是想通过直接写显存进行加速.目的很明确,在应用中申请一段

PHP4.0.0中session.save_path的bug(转载)

作者:limodou 这里向大家汇报我发现的一个4.0.0版的一个bug,只限于windows版本.那就是:在4.0.0版下,session.save_path如果使用绝对目录,即加上盘符的话,盘符不起作用.如session.save_path设为c: emp,此时存在c: emp目录.但是当php程序文件在其它盘上时,如在f盘上,c:不起作用.而是在处理session时寻找f盘上的 emp目录.如果f盘上无 emp目录,则会报如下错误: Warning: open(    emp/sess_0

解除RomImage.exe中的定时炸弹

    前面曾说过WinCE6.0中的RomImage.exe存在一个BUG,在某些情况下不能正确生成nb0文件,不管是正式版还是试用版.最近发现试用版Platform Builder 6.0中的RomImage.exe竟然还被埋了个定时炸弹,而且已经爆炸了,现场如下: makeimg: run command: romimage F:\OSDesign\CHSOS\CHSOS\RelDir\DeviceEmulator_ARMV4I_Release\ce.bib Error: failed P

S3C2410下WinCE6.0的启动过程详解

通过前两篇文章的介绍,我们已经知道NBOOT用来引导EBOOT,继而EBOOT加载并引导WinCE操作系统(NK).那么,WinCE6.0的启动过程又是怎样的呢?本文基于S3C2410的平台做一个详细的分析.需要说明的是,WinCE6.0的整个启动过程对于同一类型的MCU来说大同小异,如S3C2410和PXA270同属ARM平台的MCU,所以他们的启动过程是类似的,可以说唯一的不同就在OAL处,而WinCE操作系统的启动正是从OAL开始的.      OAL(OEM Adaptation Lay

WinCE6.0的EBOOT概要

     为一个新的硬件设备定制WinCE6.0操作系统,一般需要完成以下几个主要步骤: 1.       针对特定的硬件设备创建板级支持包(Board Support Package缩写为BSP),BSP必须包括BOOTLOADER.OEM适配层(OEM Adaptation Layer缩写为OAL)和一些必要的驱动. 2.       利用创建的BSP,定制一个系统设计(OS Design).即通过VS2005创建一个Platform Builder的工程.该工程可编译产生最终的运行时映像文

PHP 4.0.0中session.save

session PHP 4.0.0中session.save_path的bug 作者/ 这里向大家汇报我发现的一个4.0.0版的一个bug,只限于windows版本.那就是:在4.0.0版下,session.save_path如果使用绝对目录,即加上盘符的话,盘符不起作用.如session.save_path设为c: emp,此时存在c: emp目录.但是当php程序文件在其它盘上时,如在f盘上,c:不起作用.而是在处理session时寻找f盘上的 emp目录.如果f盘上无 emp目录,则会报如

WinCE6.0 KITL概要

KITL(Kernel Independent Transport Layer)即内核独立传输层,它为我们提供了一种调试WinCE的简便方法.KITL将通信服务协议和用于通信的硬件分离开来.所以我们在创建硬件传输层时就省去很多麻烦,否则我们自己必须实现与设备进行数据交互的协议.KITL工作在硬件传输层之上,因此,它无须关心用于通信的具体硬件,我们可以用USB.Serial或者Ethernet作为KITL的调试通道.具体选择哪一个,由硬件平台和软件资源决定.有些设备没有Ethernet和Seria

S3C2410 &amp;&amp; WinCE6.0的中断处理分析

     S3C2410的内核是ARM920T,所以,这里先介绍一下ARM920T的异常.ARM920T中有一个当前程序状态寄存器(CPSR),其中BIT6和BIT7分别控制FIQ和IRQ的使能与否.大家经常说的开中断和关中断,就是指的设置这两个BIT.        ARM体系的异常中断如下图所示:                        可以看到,ARM920T中一共有7中异常模式,如果同一时刻有多个异常发生,系统则通过优先级顺序来决定处理其中的哪一个异常.他们之间的优先级顺序从高到低