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.csv9 Makergu.exe每个包产生rgu注册表文件.产生boot.rgu,default.rgu.10 Rgucomp.exe处理boot.rgu得到boot.hv11 makePKG.exe产生bsm.xml。 bsm描述了package包含了哪些东西。12 PackageGenerator.exe根据bsm和pkd产生dsm和cab13 Diskimage.bat产生image
五、Diskimage.bat
1 预处理sku.xml文件,保存到postproc目录2 Skumerge.exe合并sku文件得到<bsp>.sku.xml3 Makecif处理<bsp>.sku.xml的压缩标志得到packages.cif。(cif:压缩信息文件)4 shadowCalcEng处理packages.cif得到packages.sof(sof:shadow order file)5 RGUComp处理rgu文件得到default.hv和user.hv6 PackageGenerator (metadata.pkd.xml)7 合并得到 <bsp>.cfg.xml8 OEMpreDskImage.bat 呼叫SignPackageFiles.cmd9 最后执行dskimage.exe得到image