Windows mobile image generated -- from Walle

Windows mobile 編譯鏡像總是讓人難以忍受的耗時,當然我們不能每次修改一點東西就build All一次。
下面是自己工作中積累的【不同情況下使用的編譯命令】來加速生成鏡像的過程,不排除有錯的可能,歡迎指正。


對於修改,一般可以分爲以下幾種類型:
(1)修改public下的東西(一般不會修改這裏的東西)
(2)修改了Cesysgen.bat或是會影響到Cesysgen.bat的環境變量,如以SYSGEN或BSP爲前綴的變量。
(3)修改platform/%myPlatform%下的東西

其中(3)又可以分爲:
(4)只修改reg、bib文件
(5)只修改了%myPlatform%下的源碼


一、 blddemo命令
關於blddemo,msdn裏有詳細介紹,但講得很不清楚。
如果沒記錯的話,這是一個批處理(bat)文件,會執行一些列命令,可以根據不同情況使用不同參數,
下面主要是對其加以總結,到底什麼時候用什麼參數,這正是msdn沒有講清楚卻是最重要的部分。

blddemo最常用的有三個參數:clean -q -qbsp
(1)clean:如果修改了跟sysgen相關的,也就是說上面的第(2)種情況,那就要加上clean。
(2)-q:如果沒有修改public下的東西,則可加上-q,因爲public下的東西一般是不會修改的,微軟不推薦修改這裏的東西,所以一般都會用到-q。
(3)-qbsp:我理解是quick BSP,也就是說只要是只修改了%myPlatform%下的東西,這一個參數便肯定能將修改編入鏡像,不管是源碼還是reg、bib或者其他。

-qbsp 似乎已包含了-q 功能,沒見過二者同時用的情況,也就是說只改動%myPlatform%下的肯定就沒改動public下的,所以-qbsp一般單獨使用。

對於blddemo命令最常用參數組合整理如下:

若public沒改變
(a)blddemo clean -q :sysgen 改變(build all 就是使用了這個命令)
(b)blddemo -q :sysgen沒變
(c)blddemo -qbsp:只改變了%myplatform%下的東西

這裏從上到下耗時依次減少。

若public改變,則使用blddemo 或blddemo clean ,這兩項很少用到,理論上用法,沒驗證過。

二、makeimg 命令
以上雖然blddemo -qbsp耗時最少,但耗時還是很長。我平時用的最多的是makeimg命令,這個命令就是生成鏡像的意思,也是會執行一系列操作,屬於最後一個步驟,所以耗時幾乎是最短的了。但有個前提,它的所有操作都是針對release目錄下的內容。
makeimg會執行reg、bib等的合併操作,但都是對release目錄下的,比如platform.reg common.reg project.reg 三個合併成一個reginit.ini,明白了這一點就好辦了。

對於上面所說的第(4)種情況,也就是隻改動reg或bib文件,最快速的方法是:
直接修改release目錄下的platform.reg、platform.bib,把需要的文件拷貝到release目錄下,然後makeimg即可。
如果確定生效了,再到%myplatform%下修改,以防不小心執行了其他操作把release下的修改的東西給覆蓋了。

 

 

三、快速makeimg

 call packagegenerator packages.pkd.xml.merged
 call dskimage %MyPlatform%.cfg.xml %MyPlatform%.sku.xml

 

在生成image的過程中,就是將所有dll,exe,等文件進行打包,然後做成flash.bin. 在mobile 打包過程中,會根據各個描述文件,如xml 等等對dll,exe,reg,bib進行處理,最後合成一個打包描述文件packages.pkd.xml.merged。因此如果只改變源代碼的改變 不改變配置文件時不會改變packages.pkd.xml.merged的內容。所以在只通過打包工具 packagegenerator.exe 根據原有的packages.pkd.xml.merged進行打包,再通過dskimage做成flash.bin。這樣就大大的節約了時間。

 

因此,當你改變bib或reg文件時,此方法不能生效。這是你可以使用buildpkg來生成新的image

 

四、buildpkg.bat


1 調用OEMGuids.bat;  

2 刪除Packages目錄; 刪除所有bsm.xml文件, 刪除所有psf.csv文件;

3 預處理pkd.xml文件,保存到postproc目錄.

4 合併packages.cpm.csv.merged,合併packages.crf.merged.

5 Mergepkd.exe合併release/postproc下所有pkd.xml成packages.pdk.xml.merged.

6 Settingscollision.exe對註冊表 和這些合併的文件進行衝突檢測.

7 Dependgen.exe處理組件依賴關係.

8 Shadowordertool.exe產生psm.csv

9 Makergu.exe每個包產生rgu註冊表文件.產生boot.rgu,default.rgu.

10 Rgucomp.exe處理boot.rgu得到boot.hv

11 makePKG.exe產生bsm.xml。 bsm描述了package包含了哪些東西。

12 PackageGenerator.exe根據bsm和pkd產生dsm和cab

13 Diskimage.bat產生image

五、Diskimage.bat

 

1 預處理sku.xml文件,保存到postproc目錄

2 Skumerge.exe合併sku文件得到<bsp>.sku.xml

3 Makecif處理<bsp>.sku.xml的壓縮標誌得到packages.cif。(cif:壓縮信息文件)

4 shadowCalcEng處理packages.cif得到packages.sof(sof:shadow order file)

5 RGUComp處理rgu文件得到default.hv和user.hv

6 PackageGenerator (metadata.pkd.xml)

7 合併得到 <bsp>.cfg.xml

8 OEMpreDskImage.bat 呼叫SignPackageFiles.cmd

9 最後執行dskimage.exe得到image

 

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