在何时该用什么方式编译WinCE
来源:互联网 发布:c语言判断奇偶性函数 编辑:程序博客网 时间:2024/04/28 04:15
这是一篇很好的文章,很多开发者其实并没有搞清楚这个问题:在何时该用什么方式编译WinCE
导致走了很多弯路,也包括我自己
感谢作者写了这篇文章
这么好的文章,我想应该翻译过来给大家
在何时该用什么方式编译WinCE
原始的” Advanced Build Commands ”菜单
步骤1
在工具栏上点击鼠标右键,然后选择” Customize...”
步骤2
点击菜单” Build”,进入子菜单”Advanced Build Commands”,然后右击”Build and Sysgen”,选择” Delete”
步骤3
同理删除” Rebuild and Clean Sysgen”
步骤4
关闭” Customize”窗口,”Advanced Build Commands”下面现在应该只有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”下面。
我知道有些开发者会改动PUBLIC和PRIVATE目录下的代码,这时候就需要使用”Build and sysgen”,来把你对内核的改动编译进去。但是,这样做的最终结果仍然会如前面一样:把你的CE搞乱。所以如果你需要改动PUBLIC或者PRIVATE目录下的代码,正确的做法是Clone这些代码。Clone代码在大多数情况下指的并不是简单的Copy。首选需要拷贝你要修改的源代码到你的BSP目录下,修改sources文件以编译出dll文件而不是lib文件,这样就搞定了。我知道这听起来很容易,但实际上是有许多步骤要做的。
先把这个问题放到一边,让我们来看看在什么情况下我们该用什么编译命令:
• 创建一个新的OS Design或者添加了一套新的编译配置到现有的OS Design:Sysgen (Build Solution)
新的OS Design或者一套新的编译配置在建立的时候输出文件夹都是空的,所以你需要完整的sysgen整个系统。整个编译过程比较漫长,但是幸运的是我们不需要经常这样做。
• 更改平台选项: Make image
如果你更改了平台选项配置,如IMGNOKITL, IMGNODEBUGGER, IMGPROFILER
你只需要执行Make Image即可
• 在BSP中修改驱动的源代码:Build 驱动,然后 Make Image
如果你修改了驱动的源代码,只需要编译驱动(WINCEREL必须要设置为1,不过1是默认值,除非你手动修改过,否则没必要关注)并且执行一下makeimg就可以了。如果你仅仅想调试一下编译好的驱动,你只要把这个驱动的dll添加到Release Directory Modules列表下(在Tools菜单中)并且重新启动设备(或者在设备端重新加载这个驱动)而不用执行makeimg或者把系统下载到设备上。(译者注:这里说的这种调试方法一般情况下我们是用PC通过KITL连接设备,然后启动过程中,Release Directory Modules下列出的文件会自动传输到设备上,替换设备上原有的文件,同时支持断点调试等。就是我们说的KITL调试。)编译驱动的方法非常简单,在IDE(集成开发环境)中右击驱动,选择Build 命令,或者在命令行模式下,进入到这个驱动的目录,执行命令"build"。
• 在BSP中修改了多个源代码文件: Build BSP,然后 Make Image
这是防止你遗漏了什么没有编译的安全做法。编译这个BSP的方法是:在IDE中右击PLATFORM\BSP文件夹,然后选择Build,或者在命令行模式下,进入BSP的根目录,执行命令"build"。
• 修改了platform.reg, bib, dat或者db文件: Sysgen BSP, Copy Files to Release Directory, Build All Projects 然后 Make Image
看起来步骤很多,其实用不了你几分钟的时间。如果你修改了platform.*系列的文件,我们需要确认这些修改过的文件都被拷贝到了FLATRELEASEDIR目录(就是工程的Release目录)。最后一个步骤就是清除所有项目的二进制文件。所以我们需要编译所有的项目(Build All Projects),以确认这些二进制文件和配置被拷贝到了FLATRELEASEDIR目录。最后我们执行Make Image就可以了。现在你的注册表修改已经被合入到你的系统镜像文件了(你可以检查reginit.ini文件进行确认,注册表文件中后面出现的项会覆盖前面出现的相同项)。(译者注:这里所说的项目应该是指你在整个工程文件下面建立的子项目)
• 在BSP中修改了一些源代码,并且修改了platform.*系列的文件: Build and Sysgen BSP, Copy Files to Release Directory, Build All Projects 然后Make Image
与上面唯一的区别就是你需要先编译一下BSP源代码以合入你对BSP的修改。
• 修改了workspace的配置,如增加或者删除某个系统组件: Sysgen (Build solution)
对于大多数系统组件,简单的一个Sysgen就可以了。有些系统组件(比如把系统的注册表组件从RAM based registry 修改到 Hive based Registry),就需要执行Clean Sysgen了。这确实需要不少时间去编译。Sysgen操作可以在IDE中右击当前workspace,选择Advanced Build Commands->Sysgen,或者在命令行方式下执行命令"blddemo -q"。
很多时候使用命令行编译会更简单一些。如果你不确定该输入什么命令,你可以在IDE中先执行命令,然后观察编译结果输出窗口的第三行,以"Starting Build:"开始的地方。冒号后面的就是那个操作的命令行语句。比如执行Sysgen,对应的输出是:"Starting Build: SysgenPlatform %_TARGETPLATROOT% preproc&&SysgenPlatform %_TARGETPLATROOT% postproc"。这里可以看出,你需要在命令行方式中输入的命令是:"SysgenPlatform %_TARGETPLATROOT% preproc"然后再输入命令"SysgenPlatform %_TARGETPLATROOT% postproc"。
如果你使用命令行方式编译,千万记住在执行"blddemo" 命令的时候,别忘记带上"-q"的参数。因为如果不带这个参数,就等于执行了Build and Sysgen!
我希望这篇博文可以帮助你加速自己的编译过程,在使用编译系统的过程中少走弯路!
Good luck!
导致走了很多弯路,也包括我自己
感谢作者写了这篇文章
这么好的文章,我想应该翻译过来给大家
在何时该用什么方式编译WinCE
在新闻组里,大家总是会问这样一个问题,“我做了改动,为什么没合到我的镜像里面”或者“我在platform.reg里面改动了注册表,但是最后发现改动没有体现在设备中”。
其实这些问题的根源都是与编译相关的。我们必须理解整个编译系统,从而准确的了解什么时候该如何编译。发表这篇博文的目的就是为了让你搞清楚”什么时候该如何编译”这个问题!
首先第一步,也是最重要的一步就是,从你的Platform Builder的菜单中删除两个选项:”Build and Sysgen”和”Rebuild and Clean Sysgen”。这两个命令会编译整个系统,包括在”PUBLIC”和“PRIVATE”目录下的所有源代码。对于一般的系统开发者,这两个命令根本用不着。不是微软的CE开发组成员的话,你是没有全部源代码的。整个系统重新编译也许可以通过,但是这样会覆盖掉你装过的所有QFE。这些QFE通常包含了更新的二进制文件,有时候也会有更新的源代码。在重新编译整个系统之后,你迟早会碰到一些奇怪的bug,并且这些bug非常难解决或者到最后成为不可能解决的bug。一旦你执行了”(Re)Build and (Clean) Sysgen”之后,想再恢复到未执行前的状态就不可能了。唯一的办法就是把WinCE全部卸载然后重装。装的时候别忘了把QFE也重装一遍。
现在大家知道为什么我总是在新闻组里呼吁“千万别做BUILD AND SYSGEN”
原始的” Advanced Build Commands ”菜单
步骤1
在工具栏上点击鼠标右键,然后选择” Customize...”
步骤2
点击菜单” Build”,进入子菜单”Advanced Build Commands”,然后右击”Build and Sysgen”,选择” Delete”
步骤3
同理删除” Rebuild and Clean Sysgen”
步骤4
关闭” Customize”窗口,”Advanced Build Commands”下面现在应该只有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”下面。
我知道有些开发者会改动PUBLIC和PRIVATE目录下的代码,这时候就需要使用”Build and sysgen”,来把你对内核的改动编译进去。但是,这样做的最终结果仍然会如前面一样:把你的CE搞乱。所以如果你需要改动PUBLIC或者PRIVATE目录下的代码,正确的做法是Clone这些代码。Clone代码在大多数情况下指的并不是简单的Copy。首选需要拷贝你要修改的源代码到你的BSP目录下,修改sources文件以编译出dll文件而不是lib文件,这样就搞定了。我知道这听起来很容易,但实际上是有许多步骤要做的。
先把这个问题放到一边,让我们来看看在什么情况下我们该用什么编译命令:
• 创建一个新的OS Design或者添加了一套新的编译配置到现有的OS Design:Sysgen (Build Solution)
新的OS Design或者一套新的编译配置在建立的时候输出文件夹都是空的,所以你需要完整的sysgen整个系统。整个编译过程比较漫长,但是幸运的是我们不需要经常这样做。
• 更改平台选项: Make image
如果你更改了平台选项配置,如IMGNOKITL, IMGNODEBUGGER, IMGPROFILER
你只需要执行Make Image即可
• 在BSP中修改驱动的源代码:Build 驱动,然后 Make Image
如果你修改了驱动的源代码,只需要编译驱动(WINCEREL必须要设置为1,不过1是默认值,除非你手动修改过,否则没必要关注)并且执行一下makeimg就可以了。如果你仅仅想调试一下编译好的驱动,你只要把这个驱动的dll添加到Release Directory Modules列表下(在Tools菜单中)并且重新启动设备(或者在设备端重新加载这个驱动)而不用执行makeimg或者把系统下载到设备上。(译者注:这里说的这种调试方法一般情况下我们是用PC通过KITL连接设备,然后启动过程中,Release Directory Modules下列出的文件会自动传输到设备上,替换设备上原有的文件,同时支持断点调试等。就是我们说的KITL调试。)编译驱动的方法非常简单,在IDE(集成开发环境)中右击驱动,选择Build 命令,或者在命令行模式下,进入到这个驱动的目录,执行命令"build"。
• 在BSP中修改了多个源代码文件: Build BSP,然后 Make Image
这是防止你遗漏了什么没有编译的安全做法。编译这个BSP的方法是:在IDE中右击PLATFORM\BSP文件夹,然后选择Build,或者在命令行模式下,进入BSP的根目录,执行命令"build"。
• 修改了platform.reg, bib, dat或者db文件: Sysgen BSP, Copy Files to Release Directory, Build All Projects 然后 Make Image
看起来步骤很多,其实用不了你几分钟的时间。如果你修改了platform.*系列的文件,我们需要确认这些修改过的文件都被拷贝到了FLATRELEASEDIR目录(就是工程的Release目录)。最后一个步骤就是清除所有项目的二进制文件。所以我们需要编译所有的项目(Build All Projects),以确认这些二进制文件和配置被拷贝到了FLATRELEASEDIR目录。最后我们执行Make Image就可以了。现在你的注册表修改已经被合入到你的系统镜像文件了(你可以检查reginit.ini文件进行确认,注册表文件中后面出现的项会覆盖前面出现的相同项)。(译者注:这里所说的项目应该是指你在整个工程文件下面建立的子项目)
• 在BSP中修改了一些源代码,并且修改了platform.*系列的文件: Build and Sysgen BSP, Copy Files to Release Directory, Build All Projects 然后Make Image
与上面唯一的区别就是你需要先编译一下BSP源代码以合入你对BSP的修改。
• 修改了workspace的配置,如增加或者删除某个系统组件: Sysgen (Build solution)
对于大多数系统组件,简单的一个Sysgen就可以了。有些系统组件(比如把系统的注册表组件从RAM based registry 修改到 Hive based Registry),就需要执行Clean Sysgen了。这确实需要不少时间去编译。Sysgen操作可以在IDE中右击当前workspace,选择Advanced Build Commands->Sysgen,或者在命令行方式下执行命令"blddemo -q"。
很多时候使用命令行编译会更简单一些。如果你不确定该输入什么命令,你可以在IDE中先执行命令,然后观察编译结果输出窗口的第三行,以"Starting Build:"开始的地方。冒号后面的就是那个操作的命令行语句。比如执行Sysgen,对应的输出是:"Starting Build: SysgenPlatform %_TARGETPLATROOT% preproc&&SysgenPlatform %_TARGETPLATROOT% postproc"。这里可以看出,你需要在命令行方式中输入的命令是:"SysgenPlatform %_TARGETPLATROOT% preproc"然后再输入命令"SysgenPlatform %_TARGETPLATROOT% postproc"。
如果你使用命令行方式编译,千万记住在执行"blddemo" 命令的时候,别忘记带上"-q"的参数。因为如果不带这个参数,就等于执行了Build and Sysgen!
我希望这篇博文可以帮助你加速自己的编译过程,在使用编译系统的过程中少走弯路!
Good luck!
- [原创翻译]在何时该用什么方式编译WinCE
- 在何时该用什么方式编译WinCE
- 在何时该用什么方式编译WinCE
- 在何时该用什么方式编译WinCE
- [原创翻译]在何时该用什么方式编译WinCE(By wwfiney@ARMCE)
- [原创翻译][新手必看]在何时该用什么方式编译WinCE
- 在何时该用什么方式编译WinCE(By wwfiney@ARMCE)
- 该用什么方式教育孩子
- 何时该用volatile?
- 何时该用CHAR,何时该用varchar2?
- 在生我养我的土地上不知道我会在何时以什么方式死去
- Problem 63 何时该用glDrawTexiOES?
- 浅谈__declspec(selectany)该何时用
- 何时该用DOM脚本设置样式
- 浅谈__declspec(selectany)该何时用
- 用EVC编译wince console方式的应用程序
- c++中何时该用“引用传递”,何时该用“值传递”
- 该用什么杀毒软件?
- an excellent book
- Trigger example
- sql和PL/SQL中绑定变量的区别
- OPNET 错误记录及解决方法
- oracle_datapump类型外部表
- 在何时该用什么方式编译WinCE
- Andriod 中 toast重复显示
- oracle_loader类型外部表
- SNMP主要OID
- 关于用VMWare 跑64位虚拟机的一点常识
- Windows XP中如何实现在登录界面上不显示过多用户名
- Lucene 索引和搜索过程
- flash+php简单通讯
- 《coredump问题原理探究》windows版7.6节string