接上一章所说,当用PB的“定制平台向导”选取了一个平台的所有特征(feature)后,接下来的工作就是编译了。即使你从来未曾编译过,你也能想象得到编译的时间一定很长。因为PB是在编译一个操作系统,而非一个应用程序。当然,越快的硬件环境编译的速度就越快。一般我编译一个内核需要5分钟到10分钟之间。

  在编译之前你可能还要对这个CE平台的某些特征进行修改。为此,你必须熟悉PB的操作环境。下面图1是PB打开一个平台工程文件的界面。



图1 PB主界面


  图1中数字所指示的内容描述如下:

  1、“Build”工具栏。此工具栏上按钮、下拉框都用于编译、调试。数字1指向的下拉框是编译指令集,可以指定不同的指令集来编译CE平台或者应用程序。

  2、“Workspace”窗口。此窗口有三个子视图,分别为FeatureView、ParameterView、FileView。当打开一个平台工程文件后,FeatureView显示这个平台所有的特征。如设备驱动程序、各个软件组件等。ParameterView显示所有平台通用的配置文件和当前平台的配置文件,这些配置文件扩展名为*.bib、*.reg、*.db、*.dat。FileView显示在当前CE平台上建立的应用程序源码文件、资源文件、资源脚本文件等。也就是说如果在当前CE平台上建立一个应用程序工程,那么所有的文件都在FileView中显示出来。类似EVC、VC的 “Workspace”窗口中的“FileView”。注:关于FeatureView和ParameterView包含的内容在以后的文章中讲解。

  3、“Output”窗口。用于显示输出信息。类似EVC、VC的“Output”。

  4、“Target”窗口。此工具栏上按钮分别用于下载内核文件到模拟器或实际平台、连接、断开。当一个CE平台编译好了之后,就可以按下载按钮将平台(nk,bin)文件下载到模拟器上运行。

  5、“Catalog”窗口。这个窗口包含所有的CE支持的特征。

  6、状态栏图标。位于状态栏最右端的四个图标中,最左边的图标表示当前下载状态。另外三个表示三种服务状态,这三种服务运行在目标机(target device)上。在这里就是模拟器。

  要向当前CE平台添加特征,首先在右边“Catalog”窗口中找到要添加的特征,找到后移动鼠标光标到此特征上,然后单击右键,在弹出的菜单中单击 “Add to Platform”,PB就将此特征添加到左边当前CE平台中。如果无反应说明此特征已经被添加进去了。要删除当前CE平台中某一个特征,移动鼠标光标到此特征上,单击右键,在弹出的菜单中选择“Delete”。并非所有的特征都可以任意删除,因为有些特征是彼此关联的。这部分将在以后的文章中讲述。

  对平台进行一些基本的设置,打开菜单“platform”-“Settings”,检查“Locale”选项卡中地区和语言设置。这一点很重要,它决定着编译的平台采用的语言种类。再在“Environment”选项卡中添加“IMGRAM64”环境变量,值设置为1。单击“OK”,PB开始将此环境变量加入到平台中。单击工具栏上“Build Platform”按钮开始编译。

  在讲述编译过程前必须先了解环境变量以及如何读取和设置环境变量。一个环境变量包含了一个CE操作系统某一方面的信息。例如一个驱动程序、一个路径、一个配置文件、一个特征等。当PB编译CE平台时,先做的工作就是收集所有的环境变量供编译器使用。读取和设置环境变量的最好方法是单击PB菜单“Build”-“Open Build Release Directory”,PB会弹出一个控制台窗口,也就是命令行外壳。键入“set”命令,当前平台所有的环境变量就显示出来了,不过要多屏显示。为了看清楚每个变量的值,可以键入“set |more”,这样就可以分屏查看了。还可以将所有环境变量信息保存到硬盘上,比如键入“set >C:\envi.txt”。要查看单个环境变量值,键入“set 环境变量名”。要修改原环境变量的值键入“set 环境变量名=值”。

  有些环境变量无需键入值就可以达到修改目的。比如前缀为“BSP_”和“SYSGEN_”的变量,键入“set 环境变量名=”就取消了这个环境变量。在IDE中也可以修改环境变量,如上面所说的设置“IMGRAM64”的值,就是在IDE中修改的。利用环境变量也可以添加和删除特征,如BSP变量。BSP变量分两种,一种以BSP_NO为为前缀,一种以BSP为前缀。以BSP_NO为前缀表示当前平台不支持某一特征,以BSP为前缀表示支持这一特征。例如BSP_SERIAL2表示此CE平台支持串口2;BSP_NOSERIAL表示此CE平台不支持串口。如果在 PB的“catalog”中找不到要添加的特征,可以通过设置BSP变量来实现。具体BSP环境变量参见CE帮助文档。

  下面讲述整个编译过程中PB所做的工作:

   执行cebuild.bat批处理文件。

   cebuild.bat调用sysgen.bat批处理文件。

   sysgen.bat调用cesysgen.bat批处理文件,cesysgen.bat负责在*.wce文件中搜索用户选择的特征,然后形成一系列环境变量。之后PB会显示这些变量,下面几个步骤就是显示收集的变量。

   产生SYSGEN变量。每个SYSGEN变量对应一个特征。

   产生CE_MODULE、COREDLL_COMPONENTS、FILESYS_COMPONENTS、DEVICE_COMPONENTS、 GWE*_COMPONENTS、DCOM_MODULES、FONTS_COMPONENTS等环境变量。其中每个环境变量包含某一个特征具体的内容。从环境变量名称就可以看出来是哪种特征。

   对_DEPTREES环境变量指定的每个目录分别执行sysgen.bat批处理。 _DEPTREES这个变量的值是一些目录名(例如DCOM、IE、SERVERS、DIRECTX、WCESHELLFE等),这些目录名位于% WINCEROOT%\public。如果安装PB v4.1时默认安装路径,那么此目录路径为C:\WINCE410\Public。

   编译BSP。因为我们采用的BSP是Emulator,所以PB会编译%WINCEROOT%\Platform\Emulator目录下三个子目录KERNEL、DRIVERS、GWE中的源码文件。

   清除_FLATRELEASEDIR环境变量指定的目录下的所有文件、子目录。假如我们定制的平台路径为C:\Emulator,那么这个环境变量的值为C:\Emulator\RelDir\Emulator_X86Release。

   复制%_PROJECTROOT%\所有文件到_FLATRELEASEDIR。

   根据本地地区环境变量,寻找所有与本地语言相关的*.str文件复制到_FLATRELEASEDIR中。*.str文件中包含了字符串资源,将字符串与ID关联。在_FLATRELEASEDIR目录下你可以看到以地区码为目录名的子目录。

   处理NLS(国家语言支持)数据。

   执行fmerge.exe。合并所有*.bib文件为一个文件ce.bib,合并所有*.reg文件为一个文件reginit.ini。

   执行fmerge.exe。合并所有*.db文件为一个文件initdb.int,合并所有*.dat文件为一个文件initobj.dat。

   运行regcomp.exe压缩reginit.ini。

   运行txt2ucde.exe。将整个CE平台涉及到的所有字符串转成unicode码。

   运行res2exe.exe。将所有*.dll、*.exe、*.cpl文件中的资源更新。资源更新部分主要和语言相关。

   运行Romimage.exe。将所有文件合并压缩成一个文件nk.bin(默认文件名)。

  整个编译过程被调用的批处理文件和EXE文件主要包括:cebuild.bat、sysgen.bat、cesysgen.bat、 nmake.exe、txt2ucde.exe、makeimg.exe、fmerge.exe、regcomp.exe、res2exe.exe、 romimage.exe、build.exe。在这里声明一点,我不保证所讲述的PB的编译过程一定是准确无误的。从总体上讲PB所做的工作就是这样。


posted on 2007-12-07 21:47  WindowsCE  阅读(430)  评论(0编辑  收藏  举报