WinCE6.0的批量编译
隨著項目的推進,現在發布版本時,須編譯出4個不同IMAGE,對應于不同的分辨率、不同主板及MCU。之前都是手動修改BAT文件中的定義,然后Rebuild Current BSP and Subprojects。最近一段時間,改動較多,出版本也很頻繁,越來越覺得手動修改編譯太麻煩,于是基于命令行編譯的方式實現了自動批量編譯的功能。
首先創建一個批處理文件BuildAll.bat,內容如下。這里編譯出4個版本的內核,A00、B01、H01和A01,也可以很方便的加入更多類型。
@echo offecho Build All
echo (A00)%date% %time%
start /wait .\A00.bat
echo (B01)%date% %time%
start /wait .\B01.bat
echo (H01)%date% %time%
start /wait .\H01.bat
echo (A01)%date% %time%
start /wait .\A01.bat
echo (END)%date% %time%
pause
A00.bat的內容如下。首先設置KernelCode為A00,然后調用setenv.bat,最后執行“blddemo -c -qbsp”。
set KernelCode=A00call .\setenv.bat
call blddemo -c -qbsp
exit
B01.bat的內容如下。基本與A00.bat一致,僅僅修改了KernelCode的定義,修改為B01。
set KernelCode=B01call .\setenv.bat
call blddemo -c -qbsp
exit
setenv.bat的內容如下。這里前三個定義與平臺有關,分辨是BSP、解決方案的名稱。
set __PLATFORMNAME__=Magellanset __PROJECTNAME__=TCC89XX
set PBCONFIG=MAGELLAN Baseboards Release
set _WINCEROOT=C:\WINCE600
set WINCEDEBUG=retail
set CPU=ARMV4I
set PBWORKSPACEROOT=%_WINCEROOT%\OSDesigns\%__PROJECTNAME__%\%__PROJECTNAME__%
set _FLATRELEASEDIR=%_WINCEROOT%\OSDesigns\%__PROJECTNAME__%\%__PROJECTNAME__%\RelDir\%__PLATFORMNAME__%_%CPU%_Release\
set PATH=%PATH%;C:\Windows\system32;C:\Windows;C:\Program Files\Microsoft Platform Builder\6.00\cepb\IdeVS
set _PROJECTROOT=%PBWORKSPACEROOT%\WINCE600\%__PLATFORMNAME__%_%CPU%
set PBWORKSPACE=%_WINCEROOT%\OSDesigns\%__PROJECTNAME__%\%__PROJECTNAME__%\%__PROJECTNAME__%.pbxml
set WINCE_BAT=%_WINCEROOT%\Public\Common\Oak\misc\wince.bat
set PBXMLUTILS="C:\Program Files\Microsoft Platform Builder\6.00\cepb\IdeVS\pbxmlutils.exe"
call %WINCE_BAT% %CPU% %__PROJECTNAME__% %__PLATFORMNAME__%
%PBXMLUTILS% /getbuildenv > %_TARGETPLATROOT%\AutoBuild%__PROJECTNAME__%.bat
call %_TARGETPLATROOT%\AutoBuild%__PROJECTNAME__%.bat
如果修改了BSP或者子項目的代碼,只需要執行BuildAll.bat即可很方便的得到4個IMAGE。
如果修改了Catalog中的組件選擇,需要Clean Sysgen時,如何處理呢?創建一個RebuildAll.bat,內容如下。第一個執行的是A00C.bat。
@echo offecho Rebuild All
echo (A00)%date% %time%
start /wait .\A00C.bat
echo (B01)%date% %time%
start /wait .\B01.bat
echo (H01)%date% %time%
start /wait .\H01.bat
echo (A01)%date% %time%
start /wait .\A01.bat
echo (END)%date% %time%
pause
A00C.bat的內容如下。與A00.bat的區別是,它調用blddemo clean -q,以執行Clean Sysgen。后續幾個只需Rebuild Current BSP and Subprojects
set KernelCode=A00call .\setenv.bat
call blddemo clean -q
exit
BSP中Magellan.bat的部分內容如下。這里根據KernelCode,分別定義LCD及其他一些相關類型。
if not DEFINED KernelCode set KernelCode=A01if "%KernelCode%"=="A00" set LCD_TYPE_HSD070=1
if "%KernelCode%"=="A01" set LCD_TYPE_HSD070=1
if "%KernelCode%"=="A01" set BSP_MALI_3D=
if "%KernelCode%"=="H00" set LCD_TYPE_BYD700=1
if "%KernelCode%"=="H01" set LCD_TYPE_BYD700=1
if "%KernelCode%"=="H01" set BSP_MALI_3D=
if "%KernelCode%"=="H01" set CMMB_PAUSE_ENABLE=1
if "%KernelCode%"=="B00" set LCD_TYPE_HSD070=1
if "%KernelCode%"=="B00" set CONNECT_SMD_DIRECTLY=1
if "%KernelCode%"=="B00" set VOLUME_LOUD=1
if "%KernelCode%"=="B01" set LCD_TYPE_HSD070=1
if "%KernelCode%"=="B01" set CONNECT_SMD_DIRECTLY=1
if "%KernelCode%"=="B01" set BSP_MALI_3D=
if "%KernelCode%"=="B01" set VOLUME_LOUD=1 Platform.reg中相關代碼如下,在注冊表中定義了內核類型。 [HKEY_LOCAL_MACHINE\SOFTWARE\VERSION]
"KernelCode"="$(KernelCode)" ;內核尾綴 A00 編譯設置
最后,很重要的一點就是編譯得到的BOOT和NK,需要自動拷貝到特定目錄下,否則就是長江后浪推前浪了。 而這個工作在postromimage.bat中指定,如下。
copy nk.rom G:\車機89OS\"%KernelCode%"\nk.rom
批量編譯的截圖如下,編譯一個IMAGE大概4分鐘左右,四個項目共16分鐘。
批量重新編譯的截圖如下,第一個Clean Sysgen大概20分鐘,后續一個4分鐘,共半個小時多一點。
實現了自動批量編譯,再出版本時確實方便多了。
總結
以上是生活随笔為你收集整理的WinCE6.0的批量编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WinCE下多份BSP的维护技巧
- 下一篇: Wince 隐藏TASKBAR的方法