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的下載地址:
到Linux公社資源站下載:
------------------------------------------分割線------------------------------------------
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2016年資料/6月/5日/WinCE6.0中Romimage.exe的BUG/
下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm
------------------------------------------分割線------------------------------------------
romimage.exe所在的目錄為C:\WINCE600\PUBLIC\COMMON\OAK\BIN\I386。當然,如果不改romimage.exe,也可用cvrtbin得到nb0文件,在對應的BIB文件中添加相關代碼即可。最壞的解決辦法是將PB工程放在C盤,但前提是C盤足夠大。