WinCE6.0的批量编译
2012-08-05 10:35
211 查看
《WinCE下多份BSP的维护技巧》中曾介绍了维护不同项目BSP的方法,可以很方便的使用同一解决方案,在多个BSP中任意切换,编译出不同项目对应的IMAGE。即便对于同一项目来说,有时也需要编译不同IMAGE,即同一份BSP、同一个解决方案,编译出不同版本IMAGE。而这一般通过修改环境变量、宏定义和条件编译的方式实现。
随着项目的推进,现在发布版本时,须编译出4个不同IMAGE,对应于不同的分辨率、不同主板及MCU。之前都是手动修改BAT文件中的定义,然后Rebuild Current BSP and Subprojects。最近一段时间,改动较多,出版本也很频繁,越来越觉得手动修改编译太麻烦,于是基于命令行编译的方式实现了自动批量编译的功能。
首先创建一个批处理文件BuildAll.bat,内容如下。这里编译出4个版本的内核,A00、B01、H01和A01,也可以很方便的加入更多类型。
@echo off
echo 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=A00
call .\setenv.bat
call blddemo -c -qbsp
exit
B01.bat的内容如下。基本与A00.bat一致,仅仅修改了KernelCode的定义,修改为B01。
set KernelCode=B01
call .\setenv.bat
call blddemo -c -qbsp
exit
setenv.bat的内容如下。这里前三个定义与平台有关,分辨是BSP、解决方案的名称。
set __PLATFORMNAME__=Magellan
set __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 off
echo 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=A00
call .\setenv.bat
call blddemo clean -q
exit
BSP中Magellan.bat的部分内容如下。这里根据KernelCode,分别定义LCD及其他一些相关类型。
if not DEFINED KernelCode
set KernelCode=A01
if "%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 tcboot.rom G:\车机89OS\"%KernelCode%"\tcboot.rom
copy nk.rom G:\车机89OS\"%KernelCode%"\nk.rom
批量编译的截图如下,编译一个IMAGE大概4分钟左右,四个项目共16分钟。
批量重新编译的截图如下,第一个Clean Sysgen大概20分钟,后续一个4分钟,共半个小时多一点。
实现了自动批量编译,再出版本时确实方便多了。
http://www.cnblogs.com/we-hjb/archive/2011/12/18/2292727.html
随着项目的推进,现在发布版本时,须编译出4个不同IMAGE,对应于不同的分辨率、不同主板及MCU。之前都是手动修改BAT文件中的定义,然后Rebuild Current BSP and Subprojects。最近一段时间,改动较多,出版本也很频繁,越来越觉得手动修改编译太麻烦,于是基于命令行编译的方式实现了自动批量编译的功能。
首先创建一个批处理文件BuildAll.bat,内容如下。这里编译出4个版本的内核,A00、B01、H01和A01,也可以很方便的加入更多类型。
@echo off
echo 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=A00
call .\setenv.bat
call blddemo -c -qbsp
exit
B01.bat的内容如下。基本与A00.bat一致,仅仅修改了KernelCode的定义,修改为B01。
set KernelCode=B01
call .\setenv.bat
call blddemo -c -qbsp
exit
setenv.bat的内容如下。这里前三个定义与平台有关,分辨是BSP、解决方案的名称。
set __PLATFORMNAME__=Magellan
set __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 off
echo 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=A00
call .\setenv.bat
call blddemo clean -q
exit
BSP中Magellan.bat的部分内容如下。这里根据KernelCode,分别定义LCD及其他一些相关类型。
if not DEFINED KernelCode
set KernelCode=A01
if "%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 tcboot.rom G:\车机89OS\"%KernelCode%"\tcboot.rom
copy nk.rom G:\车机89OS\"%KernelCode%"\nk.rom
批量编译的截图如下,编译一个IMAGE大概4分钟左右,四个项目共16分钟。
批量重新编译的截图如下,第一个Clean Sysgen大概20分钟,后续一个4分钟,共半个小时多一点。
实现了自动批量编译,再出版本时确实方便多了。
http://www.cnblogs.com/we-hjb/archive/2011/12/18/2292727.html
相关文章推荐
- WinCE6.0的批量编译
- WinCE6.0的批量编译
- Wince6.0编译错误经验总结
- Wince 6.0 教程---第二课. WINCE6.0 PB开发及编译技巧
- wince6.0编译环境一二三(转摘)
- WINCE6.0 PB开发及编译技巧
- WinCE 6.0 的IDE编译菜单与命令行的对应关系
- WINCE 6.0编译西班牙语UI,葡萄牙语UI
- WinCE 6.0的CETK源代码编译
- WINCE6.0 PB 编译技巧
- WINCE6.0去除桌面上WINCE版本及编译时间信息
- wince 6.0 命令行编译
- WinCE 6.0 EBoot 快速编译技巧
- 2011-11-21 —— wince6.0 BSP 里面加了 locale 后编译 failed 之解决办法
- wince6.0 编译报错:"error C2220: warning treated as error - no 'object' file generated"的解决办法
- wince 6.0 命令行编译
- wince 6.0 编译停止在NETCFV2_MODULES= dotnetv2的问题
- 【转】wince6.0 vs2005 编译选项详解
- wince 6.0修改驱动程序、编译、更新内核简要过程
- wince 6.0 编译 怪现象