在何时该用什么方式编译WinCE
導(dǎo)致走了很多彎路,也包括我自己
感謝作者寫了這篇文章
這么好的文章,我想應(yīng)該翻譯過來給大家
在何時該用什么方式編譯WinCE
在新聞組里,大家總是會問這樣一個問題,“我做了改動,為什么沒合到我的鏡像里面”或者“我在platform.reg里面改動了注冊表,但是最后發(fā)現(xiàn)改動沒有體現(xiàn)在設(shè)備中”。
? ? ? ? 其實這些問題的根源都是與編譯相關(guān)的。我們必須理解整個編譯系統(tǒng),從而準(zhǔn)確的了解什么時候該如何編譯。發(fā)表這篇博文的目的就是為了讓你搞清楚”什么時候該如何編譯”這個問題!
? ? ? ? 首先第一步,也是最重要的一步就是,從你的Platform Builder的菜單中刪除兩個選項:”Build and Sysgen”和”Rebuild and Clean Sysgen”。這兩個命令會編譯整個系統(tǒng),包括在”PUBLIC”和“PRIVATE”目錄下的所有源代碼。對于一般的系統(tǒng)開發(fā)者,這兩個命令根本用不著。不是微軟的CE開發(fā)組成員的話,你是沒有全部源代碼的。整個系統(tǒng)重新編譯也許可以通過,但是這樣會覆蓋掉你裝過的所有QFE。這些QFE通常包含了更新的二進制文件,有時候也會有更新的源代碼。在重新編譯整個系統(tǒng)之后,你遲早會碰到一些奇怪的bug,并且這些bug非常難解決或者到最后成為不可能解決的bug。一旦你執(zhí)行了”(Re)Build and (Clean) Sysgen”之后,想再恢復(fù)到未執(zhí)行前的狀態(tài)就不可能了。唯一的辦法就是把WinCE全部卸載然后重裝。裝的時候別忘了把QFE也重裝一遍。
? ? ? ? 現(xiàn)在大家知道為什么我總是在新聞組里呼吁“千萬別做BUILD AND SYSGEN”
?
原始的” Advanced Build Commands ”菜單
步驟1
2011-7-28 10:16:41 上傳 下載附件 (20.2 KB)
在工具欄上點擊鼠標(biāo)右鍵,然后選擇” Customize...”
步驟2
2011-7-28 10:16:42 上傳 下載附件 (31.12 KB)
點擊菜單” Build”,進入子菜單”Advanced Build Commands”,然后右擊”Build and Sysgen”,選擇” Delete”
步驟3
2011-7-28 10:16:43 上傳 下載附件 (12.93 KB)
同理刪除” Rebuild and Clean Sysgen”
步驟4
2011-7-28 10:16:44 上傳 下載附件 (20.31 KB)
關(guān)閉” Customize”窗口,”Advanced Build Commands”下面現(xiàn)在應(yīng)該只有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”下面。
我知道有些開發(fā)者會改動PUBLIC和PRIVATE目錄下的代碼,這時候就需要使用”Build and sysgen”,來把你對內(nèi)核的改動編譯進去。但是,這樣做的最終結(jié)果仍然會如前面一樣:把你的CE搞亂。所以如果你需要改動PUBLIC或者PRIVATE目錄下的代碼,正確的做法是Clone這些代碼。Clone代碼在大多數(shù)情況下指的并不是簡單的Copy。首選需要拷貝你要修改的源代碼到你的BSP目錄下,修改sources文件以編譯出dll文件而不是lib文件,這樣就搞定了。我知道這聽起來很容易,但實際上是有許多步驟要做的。
先把這個問題放到一邊,讓我們來看看在什么情況下我們該用什么編譯命令:
?? ? ? ? 創(chuàng)建一個新的OS Design或者添加了一套新的編譯配置到現(xiàn)有的OS Design:Sysgen (Build Solution)
新的OS Design或者一套新的編譯配置在建立的時候輸出文件夾都是空的,所以你需要完整的sysgen整個系統(tǒng)。整個編譯過程比較漫長,但是幸運的是我們不需要經(jīng)常這樣做。
?? ? ? ? 更改平臺選項: Make image
2011-7-28 10:16:46 上傳 下載附件 (17.97 KB)
如果你更改了平臺選項配置,如IMGNOKITL, IMGNODEBUGGER, IMGPROFILER
你只需要執(zhí)行Make Image即可
?? ? ? ? 在BSP中修改驅(qū)動的源代碼:Build 驅(qū)動,然后 Make Image
如果你修改了驅(qū)動的源代碼,只需要編譯驅(qū)動(WINCEREL必須要設(shè)置為1,不過1是默認(rèn)值,除非你手動修改過,否則沒必要關(guān)注)并且執(zhí)行一下makeimg就可以了。如果你僅僅想調(diào)試一下編譯好的驅(qū)動,你只要把這個驅(qū)動的dll添加到Release Directory Modules列表下(在Tools菜單中)并且重新啟動設(shè)備(或者在設(shè)備端重新加載這個驅(qū)動)而不用執(zhí)行makeimg或者把系統(tǒng)下載到設(shè)備上。(譯者注:這里說的這種調(diào)試方法一般情況下我們是用PC通過KITL連接設(shè)備,然后啟動過程中,Release Directory Modules下列出的文件會自動傳輸?shù)皆O(shè)備上,替換設(shè)備上原有的文件,同時支持?jǐn)帱c調(diào)試等。就是我們說的KITL調(diào)試。)編譯驅(qū)動的方法非常簡單,在IDE(集成開發(fā)環(huán)境)中右擊驅(qū)動,選擇Build 命令,或者在命令行模式下,進入到這個驅(qū)動的目錄,執(zhí)行命令"build"。
?? ? ? ? 在BSP中修改了多個源代碼文件: Build??BSP,然后 Make Image
這是防止你遺漏了什么沒有編譯的安全做法。編譯這個BSP的方法是:在IDE中右擊PLATFORM\BSP文件夾,然后選擇Build,或者在命令行模式下,進入BSP的根目錄,執(zhí)行命令"build"。
?? ? ? ? 修改了platform.reg, bib, dat或者db文件: Sysgen BSP, Copy Files to Release Directory, Build All Projects 然后 Make Image
看起來步驟很多,其實用不了你幾分鐘的時間。如果你修改了platform.*系列的文件,我們需要確認(rèn)這些修改過的文件都被拷貝到了FLATRELEASEDIR目錄(就是工程的Release目錄)。最后一個步驟就是清除所有項目的二進制文件。所以我們需要編譯所有的項目(Build All Projects),以確認(rèn)這些二進制文件和配置被拷貝到了FLATRELEASEDIR目錄。最后我們執(zhí)行Make Image就可以了。現(xiàn)在你的注冊表修改已經(jīng)被合入到你的系統(tǒng)鏡像文件了(你可以檢查reginit.ini文件進行確認(rèn),注冊表文件中后面出現(xiàn)的項會覆蓋前面出現(xiàn)的相同項)。(譯者注:這里所說的項目應(yīng)該是指你在整個工程文件下面建立的子項目)
?? ? ? ? 在BSP中修改了一些源代碼,并且修改了platform.*系列的文件: Build and Sysgen??BSP, Copy Files to Release Directory, Build All Projects 然后Make Image
與上面唯一的區(qū)別就是你需要先編譯一下BSP源代碼以合入你對BSP的修改。
?? ? ? ? 修改了workspace的配置,如增加或者刪除某個系統(tǒng)組件: Sysgen (Build solution)
對于大多數(shù)系統(tǒng)組件,簡單的一個Sysgen就可以了。有些系統(tǒng)組件(比如把系統(tǒng)的注冊表組件從RAM based registry 修改到 Hive based Registry),就需要執(zhí)行Clean Sysgen了。這確實需要不少時間去編譯。Sysgen操作可以在IDE中右擊當(dāng)前workspace,選擇Advanced Build Commands->Sysgen,或者在命令行方式下執(zhí)行命令"blddemo -q"。
很多時候使用命令行編譯會更簡單一些。如果你不確定該輸入什么命令,你可以在IDE中先執(zhí)行命令,然后觀察編譯結(jié)果輸出窗口的第三行,以"Starting Build:"開始的地方。冒號后面的就是那個操作的命令行語句。比如執(zhí)行Sysgen,對應(yīng)的輸出是:"Starting Build: SysgenPlatform %_TARGETPLATROOT% preproc&&SysgenPlatform %_TARGETPLATROOT% postproc"。這里可以看出,你需要在命令行方式中輸入的命令是:"SysgenPlatform %_TARGETPLATROOT% preproc"然后再輸入命令"SysgenPlatform %_TARGETPLATROOT% postproc"。
如果你使用命令行方式編譯,千萬記住在執(zhí)行"blddemo" 命令的時候,別忘記帶上"-q"的參數(shù)。因為如果不帶這個參數(shù),就等于執(zhí)行了Build and Sysgen!
我希望這篇博文可以幫助你加速自己的編譯過程,在使用編譯系統(tǒng)的過程中少走彎路!
Good luck!
總結(jié)
以上是生活随笔為你收集整理的在何时该用什么方式编译WinCE的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设备I/O之OVERLAPPED
- 下一篇: WinCE中命令行工具Viewbin简介