S3C2416不能正確生成nb0

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盤足夠大

轉載地址 http://topic.csdn.net/u/20100225/11/9078806e-af09-4e55-8e00-ef30a16944f3.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章