在何时该用什么方式编译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,一经查实,立即删除!

相关文章

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

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

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

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

2008R2Win7管理九DNS冗余和恢复

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

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

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

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

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

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

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

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

转自:DICOM通信 - PDU数据包(2)_翼遥君的博客-CSDN博客 DICOM通信-PDU数据包(1)博客中主要分析了DICOM通信协议的连接协商请求和连接协商应答。 在7个PDU数据包中还有5个数据包,从结构上来看,他们比协议的协商过程要简单明了一些。 这篇博客…

“启动Word时提示出错,只能用安全模式才能打开”的解决方法

启动Word时提示出错,只能用安全模式才能打开,在这种模式下,一些功能将被禁用。而且,每次启动都会出现这样的提示信息,同事们很多向我求助。提示窗口如下: 于是我采取了以下一些措施: 1、用Offic…

DotNET内存管理与垃圾回收[转]

1. Stack(栈)和Heap(堆)每个线程对应一个stack,线程创建的时候CLR为其创建这个stack,stack主要作用是记录函数的执行情况。值类型变量(函数的参数、局部变量等非成员变量)都分配在st…

【转】WPF XAML X名称空间详解

转自:WPF XAML X名称空间详解_郎涯技术-CSDN博客 X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的、用来引导XAML编译器将XAML代码编译为CLR代码。 【X名称空间里面到底都有些什么】 x名称空间映射的是:http://schemas.microsoft.com/winfx/2006/xam…

【转】DICOM医学图像处理:DICOM网络传输

背景: 专栏取名为DICOM医学图像处理原因是:博主是从医学图像处理算法研究时开始接触DICOM协议的。当初认识有局限性,认为DICOM只是一个简单的文件格式约定,简而言之,我当时认为DICOM协议就是扩展名为DCM文件的格式说明…

symbian c++ 开发环境Carbide.c++搭建

需要的东东:JDK1.3.1以上(自带了,不用安装),SDK 2.0 以上(CW版本),perl5.8.x carbide.c 免费版本 所以的东西都默认安装,下一步-->下一步,^_^! 现在开发用的最多的可能就是VC6了,听说以…

【转】9、XAML名称空间详解

转自&#xff1a;9、XAML名称空间详解 - 种花生的读书人 - 博客园 XAML命名空间 <Window xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"> </Window> xmlnshttp:…

wince使用自定义字体

在wince中使用自定义字体其实很简单&#xff0c;只要将自已的字体加到你的程序中就可以使用了&#xff0c;在使用完后再将其清除掉。以wince中加使用"Georgia”字体为例&#xff1a; 在程序初始化的时候将你的字体加载进程序 AddFontResource(L"NandFlash\\Font\\Geo…

【转】ubuntu 开机sudo启动应用程序

转自&#xff1a;ubuntu 开机sudo启动应用程序_Honhy的博客-CSDN博客_sudo 启动应用 第一步&#xff1a;创建一个脚本(run.sh)&#xff0c;我是放在桌面&#xff0c;脚本内容为: echo "hon123"|sudo -S /home/python/qt/Tools/QtCreator/bin/qtcreator exit 0 橙色的…

WinCE Emulator使用介绍

最近用了一下WinCE的模拟器&#xff0c;我做WinCE有几年了&#xff0c;从来没有用过WinCE的模拟器&#xff0c;第一次接触WinCE的时候就是一块S3C2410的板子和PB4.2的开发平台&#xff0c;然后就开始折腾&#xff0c;后来各种开发板都用过&#xff0c;WinCE也从4.2版本用到了6.…

【转】Ubuntu Desktop下自动启动终端并运行脚本

转自&#xff1a;Ubuntu Desktop下自动启动终端并运行脚本 - 简书 alexubuntu19:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 19.04 Release: 19.04 Codename: disco alexubuntu19:~# uname -a Linux ubunt…

【转】DICOM简述!!!!

转自&#xff1a;DICOM简述 - 简书 视频教程&#xff1a;https://www.bilibili.com/video/av66144772 DICOM&#xff08;Digital Imaging and Communications in Medicine&#xff09;即医学数字成像和通信&#xff0c;是医学图像和相关信息的国际标准&#xff08;ISO 12052&…

【转】xilinx usb下载器 速度高速极限设置 JTAG-SMT2 JTAG-HS2 JTAG-HS3和Platform Cable USB DLC9 DLC10速度测试

xilinx usb下载器 下载速度极限设置以及高速JTAG-SMT2(HS1 HS2 HS3)和DLC9 DLC10 速度测试 对于一款xilinx的下载器&#xff0c;研发和烧录以及boss都最关心下载速度的极限值。因为速度快可以在短时间内完成下载和仿真采集数据等任务。时间就是金钱&#xff0c;能节约时间大家…

【转】vivado18.3的安装 安装教程

原装性能 Xilinx下载器 赛灵思下载线 Platform Cable USB仿真器 Xilinx下载器 CPLD FPGA digilent usb JTAG SMT2 高速 赛灵思线 转自&#xff1a;Vivado18.3的安装 安装教程_Daniel_Banana的博客-CSDN博客 本文内容学习自【ALINX】FPGA ZYNQ视频教程——AX7010/AX7020教程—…