[原創翻譯]在何時該用什麼方式編譯WinCE(By wwfiney@ARMCE)

原文地址:[url]http://guruce.com/blogpost/whattobuildwhen[/url]
這裏也有轉載[url]http://www.armce.com/bbs/viewthread.php?tid=804&highlight=what%2Bto%2Bbuild[/url]

這是一篇很好的文章,很多開發者其實並沒有搞清楚這個問題:在何時該用什麼方式編譯WinCE
導致走了很多彎路,也包括我自己
感謝作者寫了這篇文章
這麼好的文章,我想應該翻譯過來給大家

 


在何時該用什麼方式編譯WinCE
譯者:wwfiney@ARMCE

在新聞組裏,大家總是會問這樣一個問題,“我做了改動,爲什麼沒合到我的鏡像裏面”或者“我在platform.reg裏面改動了註冊表,但是最後發現改動沒有體現在設備中”。
 其實這些問題的根源都是與編譯相關的。我們必須理解整個編譯系統,從而準確的瞭解什麼時候該如何編譯。發表這篇博文的目的就是爲了讓你搞清楚”什麼時候該如何編譯”這個問題!
 首先第一步,也是最重要的一步就是,從你的Platform Builder的菜單中刪除兩個選項:”Build and Sysgen”和”Rebuild and Clean Sysgen”。這兩個命令會編譯整個系統,包括在”PUBLIC”和“PRIVATE”目錄下的所有源代碼。對於一般的系統開發者,這兩個命令根本用不着。不是微軟的CE開發組成員的話,你是沒有全部源代碼的。整個系統重新編譯也許可以通過,但是這樣會覆蓋掉你裝過的所有QFE。這些QFE通常包含了更新的二進制文件,有時候也會有更新的源代碼。在重新編譯整個系統之後,你遲早會碰到一些奇怪的bug,並且這些bug非常難解決或者到最後成爲不可能解決的bug。一旦你執行了”(Re)Build and (Clean) Sysgen”之後,想再恢復到未執行前的狀態就不可能了。唯一的辦法就是把WinCE全部卸載然後重裝。裝的時候別忘了把QFE也重裝一遍。
 現在大家知道爲什麼我總是在新聞組裏呼籲“千萬別做BUILD AND SYSGEN”
[img]http://www.armce.com/bbs/attachment.php?aid=NDkxfGNhMDU3MzVkfDEyNjk0MjYzNzF8YWI0NkE2aG9lc3BTRFJ3NzBEQWpMOS80YWFaeUxjSWQ2YUdna09xbE9tcUt6dWM%3D&noupdate=yes[/img]
原始的” Advanced Build Commands ”菜單
步驟1
[img]http://www.armce.com/bbs/attachment.php?aid=NDkyfDEyOGE2OTI4fDEyNjk0MjYzNzF8YWI0NkE2aG9lc3BTRFJ3NzBEQWpMOS80YWFaeUxjSWQ2YUdna09xbE9tcUt6dWM%3D&noupdate=yes[/img]
在工具欄上點擊鼠標右鍵,然後選擇” Customize...”

步驟2
[img]http://www.armce.com/bbs/attachment.php?aid=NDkzfDNhMDc4ZjA5fDEyNjk0MjYzNzF8YWI0NkE2aG9lc3BTRFJ3NzBEQWpMOS80YWFaeUxjSWQ2YUdna09xbE9tcUt6dWM%3D&noupdate=yes[/img]
點擊菜單” Build”,進入子菜單”Advanced Build Commands”,然後右擊”Build and Sysgen”,選擇” Delete”

步驟3
[img]http://www.armce.com/bbs/attachment.php?aid=NDk0fDc3NGI0OTE2fDEyNjk0MjYzNzF8YWI0NkE2aG9lc3BTRFJ3NzBEQWpMOS80YWFaeUxjSWQ2YUdna09xbE9tcUt6dWM%3D&noupdate=yes[/img]
同理刪除” Rebuild and Clean Sysgen”

步驟4
[img]http://www.armce.com/bbs/attachment.php?aid=NDk1fDA4NjIzMGZkfDEyNjk0MjYzNzF8YWI0NkE2aG9lc3BTRFJ3NzBEQWpMOS80YWFaeUxjSWQ2YUdna09xbE9tcUt6dWM%3D&noupdate=yes[/img]
關閉” Customize”窗口,”Advanced Build Commands”下面現在應該只有4個選項了: [Sysgen], [Clean Sysgen], [Build Current BSP and Subprojects] 以及 [Rebuild Current BSP and Subprojects]

如果你仍然在使用Platform Builder for Windows CE 5.0,那麼步驟也是差不多的。只不過不是” Build”菜單下,而是在” Build OS”菜單下,而且選項沒有子菜單了,全部列在” Build OS”下面。
我知道有些開發者會改動PUBLIC和PRIVATE目錄下的代碼,這時候就需要使用”Build and sysgen”,來把你對內核的改動編譯進去。但是,這樣做的最終結果仍然會如前面一樣:把你的CE搞亂。所以如果你需要改動PUBLIC或者PRIVATE目錄下的代碼,正確的做法是Clone這些代碼。Clone代碼在大多數情況下指的並不是簡單的Copy。首選需要拷貝你要修改的源代碼到你的BSP目錄下,修改sources文件以編譯出dll文件而不是lib文件,這樣就搞定了。我知道這聽起來很容易,但實際上是有許多步驟要做的。
先把這個問題放到一邊,讓我們來看看在什麼情況下我們該用什麼編譯命令:
• 創建一個新的OS Design或者添加了一套新的編譯配置到現有的OS Design:Sysgen (Build Solution)
新的OS Design或者一套新的編譯配置在建立的時候輸出文件夾都是空的,所以你需要完整的sysgen整個系統。整個編譯過程比較漫長,但是幸運的是我們不需要經常這樣做。

• 更改平臺選項: Make image
[img]http://www.armce.com/bbs/attachment.php?aid=NDkwfGRlM2ZiNmI4fDEyNjk0MjYzNzF8YWI0NkE2aG9lc3BTRFJ3NzBEQWpMOS80YWFaeUxjSWQ2YUdna09xbE9tcUt6dWM%3D&noupdate=yes[/img]
如果你更改了平臺選項配置,如IMGNOKITL, IMGNODEBUGGER, IMGPROFILER
你只需要執行Make Image即可

• 在BSP中修改驅動的源代碼:Build 驅動,然後 Make Image
如果你修改了驅動的源代碼,只需要編譯驅動(WINCEREL必須要設置爲1,不過1是默認值,除非你手動修改過,否則沒必要關注)並且執行一下makeimg就可以了。如果你僅僅想調試一下編譯好的驅動,你只要把這個驅動的dll添加到Release Directory Modules列表下(在Tools菜單中)並且重新啓動設備(或者在設備端重新加載這個驅動)而不用執行makeimg或者把系統下載到設備上。(譯者注:這裏說的這種調試方法一般情況下我們是用PC通過KITL連接設備,然後啓動過程中,Release Directory Modules下列出的文件會自動傳輸到設備上,替換設備上原有的文件,同時支持斷點調試等。就是我們說的KITL調試。)編譯驅動的方法非常簡單,在IDE(集成開發環境)中右擊驅動,選擇Build 命令,或者在命令行模式下,進入到這個驅動的目錄,執行命令"build"。

• 在BSP中修改了多個源代碼文件: Build  BSP,然後 Make Image
這是防止你遺漏了什麼沒有編譯的安全做法。編譯這個BSP的方法是:在IDE中右擊PLATFORM/BSP文件夾,然後選擇Build,或者在命令行模式下,進入BSP的根目錄,執行命令"build"。

• 修改了platform.reg, bib, dat或者db文件: Sysgen BSP, Copy Files to Release Directory, Build All Projects 然後 Make Image
看起來步驟很多,其實用不了你幾分鐘的時間。如果你修改了platform.*系列的文件,我們需要確認這些修改過的文件都被拷貝到了FLATRELEASEDIR目錄(就是工程的Release目錄)。最後一個步驟就是清除所有項目的二進制文件。所以我們需要編譯所有的項目(Build All Projects),以確認這些二進制文件和配置被拷貝到了FLATRELEASEDIR目錄。最後我們執行Make Image就可以了。現在你的註冊表修改已經被合入到你的系統鏡像文件了(你可以檢查reginit.ini文件進行確認,註冊表文件中後面出現的項會覆蓋前面出現的相同項)。(譯者注:這裏所說的項目應該是指你在整個工程文件下面建立的子項目)

• 在BSP中修改了一些源代碼,並且修改了platform.*系列的文件: Build and Sysgen  BSP, Copy Files to Release Directory, Build All Projects 然後Make Image
與上面唯一的區別就是你需要先編譯一下BSP源代碼以合入你對BSP的修改。

• 修改了workspace的配置,如增加或者刪除某個系統組件: Sysgen (Build solution)
對於大多數系統組件,簡單的一個Sysgen就可以了。有些系統組件(比如把系統的註冊表組件從RAM based registry 修改到 Hive based Registry),就需要執行Clean Sysgen了。這確實需要不少時間去編譯。Sysgen操作可以在IDE中右擊當前workspace,選擇Advanced Build Commands->Sysgen,或者在命令行方式下執行命令"blddemo -q"。

很多時候使用命令行編譯會更簡單一些。如果你不確定該輸入什麼命令,你可以在IDE中先執行命令,然後觀察編譯結果輸出窗口的第三行,以"Starting Build:"開始的地方。冒號後面的就是那個操作的命令行語句。比如執行Sysgen,對應的輸出是:"Starting Build: SysgenPlatform %_TARGETPLATROOT% preproc&&SysgenPlatform %_TARGETPLATROOT% postproc"。這裏可以看出,你需要在命令行方式中輸入的命令是:"SysgenPlatform %_TARGETPLATROOT% preproc"然後再輸入命令"SysgenPlatform %_TARGETPLATROOT% postproc"。
如果你使用命令行方式編譯,千萬記住在執行"blddemo" 命令的時候,別忘記帶上"-q"的參數。因爲如果不帶這個參數,就等於執行了Build and Sysgen!
我希望這篇博文可以幫助你加速自己的編譯過程,在使用編譯系統的過程中少走彎路!
Good luck!

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