在何时该用什么方式编译WinCE

这是一篇很好的文章,很多开发者其实并没有搞清楚这个问题:在何时该用什么方式编译WinCE
导致走了很多弯路,也包括我自己
感谢作者写了这篇文章
这么好的文章,我想应该翻译过来给大家

在何时该用什么方式编译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”
 1.jpg

2011-7-28 10:16:40 上传
下载附件 (21.35 KB)

原始的” Advanced Build Commands ”菜单
步骤1
2.jpg
2011-7-28 10:16:41 上传
下载附件 (20.2 KB)

在工具栏上点击鼠标右键,然后选择” Customize...”

步骤2
3.jpg
2011-7-28 10:16:42 上传
下载附件 (31.12 KB)

点击菜单” Build”,进入子菜单”Advanced Build Commands”,然后右击”Build and Sysgen”,选择” Delete”

步骤3
4.jpg
2011-7-28 10:16:43 上传
下载附件 (12.93 KB)

同理删除” Rebuild and Clean Sysgen”

步骤4
5.jpg
2011-7-28 10:16:44 上传
下载附件 (20.31 KB)

关闭” 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
6.jpg
2011-7-28 10:16:46 上传
下载附件 (17.97 KB)

如果你更改了平台选项配置,如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!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

public protect private继承

引自原来在CGD讨论的几点总结:1. public继承被称为类型继承(type inheritance)。往往反映is-a关系。2. protected继承基类的所有公有成员都成为派生类的protected成员。这意味着它们可以被后来从该类派生的类访问,但不能在层次结构…

【转】Ubuntu 16.04 安装 CUDA10.1 (解决循环登陆的问题)

转自:Ubuntu 16.04 安装 CUDA10.1 (解决循环登陆的问题) - Hongkai_Ding - 博客园 0. 前言 这里直接用 cuda安装文件同时安装 NVIDIA 驱动和 CUDA,没有单独安装更高版本的 NVIDIA 驱动;此安装是在 Intel 集显下的图形…

一面微创题--字符串逆序输出

最近一直在等面试消息,都有点着急了,的确,还有太多不足,笔面之后的一面技术面,幸运地是在三个面试者中面试官留下了我,可是一句话又搞的我一点底都没了:“你别以为你通过了就怎么着,…

返回北京

6点15做311新街口转800到光明桥转800到医院7:40挂上号9:30叫到号,护士站调病例分诊大屏幕显示叫号,可到挂号处缴费。到一层影象预约中心预约,相同检查可合并。胸片预约可当时等候检查。一层牌号抽血。乘434方庄环岛南下,王沛肿瘤科…

C++中的强制转换

标准c中主要有四种强制转换类型运算符&#xff1a; const_cast&#xff0c;reinterpret_cast&#xff0c;static_cast&#xff0c;dynamic_cast等等。 1&#xff09;static_cast<T*>&#xff08;a&#xff09; 将地址a转换成类型T&#xff0c;T和a必须是指针、引用、算术…

SQL_经验碎片

这个帖子主要记录一些sql的学习经验转载于:https://www.cnblogs.com/SDJL/archive/2009/09/08/1562607.html

【转】Ubuntu 16.04 Nvidia驱动安装(run方式)

转自&#xff1a;Ubuntu 16.04 Nvidia驱动安装(run方式)_lihe的博客-CSDN博客 1.下载驱动程序 Nvidia驱动下载 https://www.geforce.cn/drivers/beta-legacy http://www.nvidia.cn/Download/index.aspx 根据显卡选择适用的驱动版本&#xff0c;下载完之后是一个名称为 NVIDIA…

volatile的作用

一个定义为volatile的变量是说这变量可能会被意想不到地改变&#xff0c;这样&#xff0c;编译器就不会去假设这个变量的值了。精确地说就是&#xff0c;优化器在用到这个变量时必须每次都小心地重新读取这个变量的值&#xff0c;而不是使用保存在寄存器里的备份。下面是volati…

2008R2Win7管理九DNS冗余和恢复

2008R2Win7管理九DNS冗余和恢复 本文介绍如何在ad中的主dns崩溃后快速利用备份dns将主dns恢复.以及在主dns完好的时候进行dns冗余备份 本文在file这台服务器上安装好dns角色来作为主dns的备份,安装角色的过程不在详细描述,略过.相信大家都知道了. 本问对拓扑图略有改动,故再次更…

预处理命令中的#和##

在c/c的程序设计中&#xff0c;有的时候不免要实现某些对象转换出相应名字字符串或两对象名直接相连的情况&#xff0c;这时候可采用宏定义中加入#和##分别实现相应功能。下面是摘抄的一段解释。 The # and ## preprocessor operators are used with the #define preprocessor …

【转】DICOM通讯(ACSE->DIMSE->Worklist)

转自&#xff1a;DICOM通讯&#xff08;ACSE-&#xff1e;DIMSE-&#xff1e;Worklist&#xff09; - 知乎 1 DICOM通讯概要介绍 DICOM通讯和TCP IP的设计原理别无二致。从用户数据到网络上传输数据的过程中&#xff0c;要经历多层协议处理&#xff0c;每经一层&#xff0c;就…

DipperRiver.Net通信协议设计

说明名称[长度,单位&#xff1a;字节]包结构Header[10]&#xff1a;包头Body[21?]&#xff1a;包体Header[10]协议头[1]:1字节长度,如0x07协议版本[1]&#xff1a;1字节长度,如0x01Body长度[4]:4字节长度的数字&#xff0c;即Body长度最大支持4G保留[4]&#xff1a;Body[25?]…

winCE改变字库方法

更新系统字库&#xff1a;例如要在 WinCE5.0 加入微软雅黑字体的支持 。 第一步&#xff1a;增加如下注册表 [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/FontPath] "FontPath""// Windows " ; 字库文件所在目录 [HKEY_LOCAL_MACHINE/SYSTEM/GDI] "…

程序员九重镜界,很老的今天刚刚翻出来

今天下午翻电脑找到这个--程序员九重镜界。很旧的&#xff0c;呵呵。第一重&#xff1a; 在哪本电脑杂志上看见软件工程师这个职业介绍&#xff0c;或者走在大街上看见某某软件培训机构鼓吹培训完就能年薪10万的广告&#xff0c;有些羡慕那些编程序的&#xff0c;自己有些蠢蠢欲…

【转】dicom通讯的工作方式及dicom标准简介!!

转自&#xff1a;dicom通讯的工作方式及dicom标准简介 - assassinx - 博客园 本文主要讲述dicom标准及dicom通讯的工作方式。dicom全称医学数字图像与通讯 其实嘛就两个方面 那就是“存储”跟“通讯”。 文件数据组织方式 网络数据组织方式。文件数据组织方式就是解析静态的di…

XIP与HIVE

我们的Image主要由两部分组成&#xff1a;XIPKERNEL.bin和NK.bin,XIPKERNEL.bin中的东西就是那些WinCE中比较核心的又需要经常加载的一些程序和DLL文件&#xff0c;这些文件会被Boot Loader在刚启动的时候拷贝到RAM中去&#xff0c;这样就可以在RAM中XIP&#xff08;Excute in …

[Silverlight]16进制颜色转ARGB及Color转Int32

16进制色字符串转ARGB做Web的都喜欢用16进制字符串标识颜色&#xff0c;比如“#F5F5F5”这类的&#xff0c;自然这个到了Silverlight/WPF中就要用ARGB表示&#xff1a;“#FFF5F5F5”&#xff08;前两位标识Alpha&#xff0c;即透明度&#xff09;。这在XAML中没有任何问题&…

【转】DICOM通信 - PDU数据包(1)

转自&#xff1a;DICOM通信 - PDU数据包(1)_翼遥君的博客-CSDN博客 DICOM上层协议为DIMSE提供透明的网络数据传输服务&#xff0c;即以上层协议规定的协议数据单元传送接收DIMSE的命令流与数据流。上层协议中制定了上层服务以及协议数据单元(Protocol Data Unit&#xff0c;PD…

windows mobile 编译(生成镜像)提速

windows mobile 编译镜像总是让人难以忍受的耗时&#xff0c;当然我们不能每次修改一点东西就build All一次。 下面是自己工作中积累的【不同情况下使用的编译命令】来加速生成镜像的过程&#xff0c;不排除有错的可能&#xff0c;欢迎指正。 对于修改&#xff0c;一般可以分…

ASP.NET MVC + ADO.NET EF 项目实战(二):设计过程与设计工具

工欲善其事&#xff0c;必先利其器。好的工具能够成倍提升工作效率。ASP.NET MVC和ADO.NET EF也是因为其工具出色而受到欢迎。例如&#xff1a; MVC所提供的View模板工具&#xff1b; MVC所提供的View切换、向导工具&#xff1b; ADO.NET EF提供的模型设计工具&#xff1b; ADO…