Platform Builder实践.docx
《Platform Builder实践.docx》由会员分享,可在线阅读,更多相关《Platform Builder实践.docx(25页珍藏版)》请在冰豆网上搜索。
PlatformBuilder实践
PlatformBuilder实践之编译
2004-10-0212:
22作者:
付林林出处:
天极网责任编辑:
方舟
接上一章所说,当用PB的“定制平台向导”选取了一个平台的所有特征(feature)后,接下来的工作就是编译了。
即使你从来未曾编译过,你也能想象得到编译的时间一定很长。
因为PB是在编译一个操作系统,而非一个应用程序。
当然,越快的硬件环境编译的速度就越快。
一般我编译一个内核需要5分钟到10分钟之间。
在编译之前你可能还要对这个CE平台的某些特征进行修改。
为此,你必须熟悉PB的操作环境。
下面图1是PB打开一个平台工程文件的界面。
图1PB主界面
图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、状态栏图标。
位于状态栏最右端的四个图标中,最左边的图标表示当前下载状态。
另外三个表示三种服务状态,这三种服务运行在目标机(targetdevice)上。
在这里就是模拟器。
要向当前CE平台添加特征,首先在右边“Catalog”窗口中找到要添加的特征,找到后移动鼠标光标到此特征上,然后单击右键,在弹出的菜单中单击“AddtoPlatform”,PB就将此特征添加到左边当前CE平台中。
如果无反应说明此特征已经被添加进去了。
要删除当前CE平台中某一个特征,移动鼠标光标到此特征上,单击右键,在弹出的菜单中选择“Delete”。
并非所有的特征都可以任意删除,因为有些特征是彼此关联的。
这部分将在以后的文章中讲述。
对平台进行一些基本的设置,打开菜单“platform”-“Settings”,检查“Locale”选项卡中地区和语言设置。
这一点很重要,它决定着编译的平台采用的语言种类。
再在“Environment”选项卡中添加“IMGRAM64”环境变量,值设置为1。
单击“OK”,PB开始将此环境变量加入到平台中。
单击工具栏上“BuildPlatform”按钮开始编译。
在讲述编译过程前必须先了解环境变量以及如何读取和设置环境变量。
一个环境变量包含了一个CE操作系统某一方面的信息。
例如一个驱动程序、一个路径、一个配置文件、一个特征等。
当PB编译CE平台时,先做的工作就是收集所有的环境变量供编译器使用。
读取和设置环境变量的最好方法是单击PB菜单“Build”-“OpenBuildReleaseDirectory”,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。
如果安装PBv4.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所做的工作就是这样。
PlatformBuilder实践之运行环境
2004-10-0111:
01作者:
付林林出处:
天极网责任编辑:
方舟
在以前的文章中我已经数次提到了PlatformBuilder(简称PB),并且简单的讲述了利用PBv4.1的定制平台向导(NewPlatformWizard)创建了几个CE的平台。
从这一篇文章起,我和PB爱好者们一起进入PB的世界,一起领略PB的风采,一起学习PB。
写每一篇文章对我来说都是一个进步,希望大家能够多提宝贵意见,多阐述看法。
相信看到我以前写的文章你已经会利用定制平台向导来定制简单的内核了。
这次我仍然用这个向导,只不过采用自定义配置来选择平台的组件。
自定义配置的优点是能够更细致的选择组件,这样定制的平台只包含我们需要的功能,而不要的全部抛弃。
首先打开“NewPlatform”,在“Step2”中选择“EMULATOR:
X86”。
在这里强调一点:
能够运行PB创建的CE平台的环境有三种。
第一种是真实环境,包括某一种CPU和支持的主板还有其它配置;第二种是模拟环境,PB包含了模拟器,能够在PC上模拟运行CE平台;第三种是PC环境,PB可以创建能够在PC机运行的CE平台。
并且提供了一组引导文件,通过这些引导文件可以加载CE内核文件(nk.bin)并启动WindowsCE。
三种环境相比较,如果具备真实的环境那是最好了,模拟环境只能模拟简单的功能,PC环境和模拟环境相似,只适合用来学习PB。
PC环境需要的引导文件可以通过如下办法得到:
在PB的安装所在位置(比如C盘)查找文件Websetup.exe,运行这个文件,这个程序会解压出一个名为WEBIMGNT.EXE的文件。
再查找名为cepcboot.144的文件,将cepcboot.144文件复制到同WEBIMGNT.EXE同一个目录下。
插入软盘到A驱,然后在控制台程序(cmd.exe)下输入命令“WEBIMGNT.EXEcepcboot.144”。
在弹出的对话框中单击“Adrive”,程序把解压出来的启动文件都复制到软盘上。
编辑启动文件中的“Autoexec.bat”批处理文件,如果PC配置的网卡是被支持的(微软推荐的网卡类型有NE2000、SMC9000兼容网卡、RealTekRTL8139等),并且是PCI接口的,按如下修改:
setNET_IRQ=9
setNET_IOBASE=0
修改之后还要输入一个静态的IP地址。
这个IP地址要和运行PB的电脑的IP地址处于一个子网内。
实际上PC环境还是无法实现CE平台的大多数功能,所以对于要学习PB而又不具备真实环境的人来说,模拟器是比较合适的。
回到定制平台向导,在“Setp3”中单选“Customconfiguration”,输入平台名称和路径。
在“Step4”中必须单选“CustomDevicewithShellandGraphicalUserInterfac”。
表示平台将加入外壳程序和GUI。
有了资源管理器这样的外壳程序我们操作就方便多了。
在“Step5”中列出的是“Application&ServicesDevelopment”。
这些都是用于软件开发的库。
大多数支持库我们在PC上开发时早已熟悉了,有几个是CE独有的。
比如“SimpleNetworkManagementProtocol”(简单网络管理协议),这是用在网络设备上的协议;“PocketOutlookObjectModelAPI”,用于读取PocketPC中“Inbox”软件中的数据;“Beta.NETCompactFramework”是.NET的支持框架。
这个在PBv4.1中不要选取,它在PBv4.2中才是正式版。
其余的选项说明参见CE帮助文档(位置:
operatingsystemdevelopment\windowsoverview\catalogfeatures\applicationsandservicesdevelopment)。
“Step6”中列出了WindowsCE自带的应用程序。
“Step7”中列出了操作系统内核支持的服务。
包括串口支持、并口支持、USB口支持、调试工具、电源管理,还有一些其它特征。
这里的调试工具不仅仅指能够用于调试的应用程序,还包括用于调试的API函数。
Toolhelp就是专门用于查看当前操作系统的进程及进程包含的线程、DLL的信息。
“KernelFeatures”(内核特征)中的FiberAPI是用于支持纤程的API。
“Keyboard&TouchDriverDebuggingSampleApplications”包括四个调试工具,用于调试触摸屏和键盘的驱动程序。
“LMemDebugmemorydebugginghooks”用于查看当前操作系统正运行的程序的内存信息。
在“Step8”中列出的是网络特征(我有时称特征为组件,实质一样)。
包含CE支持的所有网络协议。
“NetworkingFeatures”中大多数的子项都要加入的,其它项按需加入。
比如要支持红外线一定要加入PAN中的IrDA。
要拨号上网的一定要加入WAN所有项。
“Step9”中列出了存储特征。
包含和存储设备相关的支持。
具体包括存储管理器(支持CDFS、FAT文件系统)、数据库支持、ROM和RAM文件系统、注册表存储支持。
关于ROM和RAM、FAT我在以前的文章中提到过,这里就不再详细讲解了。
“Step10”中列出了CE包含的所有英文字体。
要了解这些字体中每种字体所占空间大小,可以将鼠标放到字体名字的上面,系统就会显示这种字体的大小。
一般来说一个定制的CE平台其中字体尤其是中文字体占用空间是很大的,所以选择字体要慎重。
除非必要,否则不要添加太多的字体。
“Step11”列出了国际化选项。
包括各种语言支持包。
在这里选择“NationalLanguageSupport[NLS]”,再选择一种本地区语言,比如“Chinese{Simplified}”。
“AgfaAC3FontCompression”建议选择,这是一种字体压缩技术,适合中文字体。
在“Chinese{Simplified}”第一子项中列出了字体。
这一项选择至关重要,因为中文字体占用的空间太大了,直接影响CE平台的总体大小。
具体选择哪些字体请参见CE帮助文档(位置:
operatingsystemdevelopment\windowsoverview\catalogfeatures\International)。
从帮助文档中才能了解具体哪个子集包含哪些中文字体和字符集。
“Chinese{Simplified}”其它子项包括中文输入法、输入法编辑器建议全部选择。
“Step12”列出了CE包含的Internet客户端程序、支持的组件和脚本。
第一项“BrowserApplication”中建议选择第一子项“InternetExplorer5.5forWindowsCEComponents”,而第二子项“PocketInternetExlporer”是用在PDA上的功能较少的Internet浏览器。
第二项“InternetExplorer5.5forWindowsCEComponents”中建议选择全部子项。
这些子项都是开发IE的API函数、ActiveX控件。
第四项“SampleIE5.5InternetOptionsControlPanel”是“控制面板”中的用于修改IE选项的程序。
和Windows桌面操作系统下“控制面板”中的“Internet选项”一样。
“Step13”列出了CE支持的多媒体服务。
可以任意选取要播放的各种媒体和具体媒体的格式。
DirectX也可以分拆选取。
“Step14”列出了CE支持的安全服务。
“Step15”列出了各种外壳和用户接口。
外壳程序一般常常选择“GraphicalShell”中的标准外壳程序“StandardShell”,也就是资源管理器。
“Step17”是最后一步。
单击“Done”按钮,PB将用户选择的所有选项保存到脚本文件(*.wce)中。
当编译CE平台时,sysgen.bat批处理文件会调用cesysgen.bat批处理文件,cesysgen.bat读取*.wce文件的内容,根据此文件的内容来设置全部的环境变量。
cesysgen.bat处理之后sysgen.bat调用nmake.exe程序根据环境变量来编译模块(针对源码文件,如C语言文件)、复制模块(针对非源码文件,如DLL等)。
具体编译操作以及编译时PB所做的工作我将在下一篇文章中详细讲述。
PlatformBuilder实践之拾遗补缺
2004-10-0409:
55作者:
付林林出处:
天极网责任编辑:
方舟
本篇文章是对前面讲过的关于PB的系列文章做一些补充,因为PB包含的知识面太广也太杂,所以针对一些杂项归纳在一起写成这一篇文章。
当然一篇文章绝不可能包罗万象,有时间我会陆续写出来。
【WindowsCE安装目录】
WindowsCE.NETv4.1默认安装路径为C:
\wince410。
其子目录名及目录包含内容如下:
Others包含ATL、MFC运行时文件等。
Platform包含所有BSP子目录。
每个目录包含BSP文件。
Private包含大多数CE公开的源码
Public包含大多数SDK文件、配置文件、编译工具。
SDK包含PB使用的工具
public目录下一些子目录名及包含内容如下:
Common核心操作系统模块
Datasync同步数据传送模块
DcomDCOM模块
DirectXdirectx、DVD-VIDEO模块
IEIE模块
NetCF.NET框架模块
RDP远程桌面模块
ServersHTTP服务扩展模块
ScriptJavaScript和VBScript脚本模块
SpeechSAPI模块
ViewersFileView模块
【buildoptions】
PB菜单“Platform”-“Settings”中常见的编译选项。
EnableCETargetControlSupport:
支持对实际平台的控制。
可以执行CESH命令。
EnableEventTrackingDuringBoot:
在引导过程中支持事件跟踪。
EnableFullKernelMode:
支持全内核模式。
全内核模式参见配置文件。
EnableKernelDebugger:
允许调试内核。
EnableKITL:
KITL(内核独立传输层)用于在开发平台和实际平台之间相互通信。
EnableProfiling:
能够评测内核的性能。
评测内核性能的工具在以前讲过。
【ObjectIconTypes】
ObjectIcon是指PB中“Workspace”和“Catalog”列出的对象对应的图标。
当定制了平台后,如果在“Workspace”中删除某些特征时,PB很可能弹出对话框说明此特征无法删除。
本节将讲述其中原因,之前要介绍“Workspace”-“FeatureView”中相关图标。
特征组
锚定特征
非锚定特征
1、把一个特征组缩减成一个特征叫Resolve(分解)。
点击菜单“platform”-“resolvefeature(s)”,弹出一个对话框显示整个CE平台所有能够分解的特征组,可以在每一个特征组中选择单个特征。
比如显卡驱动组,当从PB的“catalog”中加入显示驱动时,即使加入一个驱动,PB也会在“FeatureView”显示一个特征组。
通过Resolve可以任意选择一个需要的显卡驱动。
2、锚定特征。
在PB创建一个CE平台时,有一些特征默认被加上锚定特征(anchorfeature)。
用户从PB“catalog”中选择特征加到左边项目里时,这个加入的特征被自动加上锚定特征。
同时PB将检查CE平台中的所有特征是否与新加入的特征冲突,然后根据cesysgen.bat中包含的从属规则,将和用户选择的特征相关的特征加到项目里。
由PB根据从属规则带到项目里的特征是非锚定特征(非用户选择)。
3、查看特征从属关系。
通过右键菜单“featuredependencies”选项来查看指定特征的从属关系。
“Dependson”表明当前特征需要哪些其它特征,“Dependencyof”表明哪些特征需要当前特征。
4、每次从定制的CE平台中删除或者加入特征,PB都会在执行删除或者添加特征后重新整理平台的所有特征。
在“Output”窗口中可以看到平台所有增加的非锚定特征。
5、删除特征:
锚定特征可以直接删除,而非锚定特征必须先删除它的父特征(父特征在加入到平台时将子特征带进来)后才能被删除。
另外锚定特征也可能和另一个锚定特征属于从属关系。
所以锚定特征也可能不允许被直接删除。
通过以上5点读者一定会了解为什么有些特征不能被直接删除了。
【cec文件】
.cec文件是目录特征文件。
这个文件用于将自定义的目录特征导入到PB的“catalog”中。
适合于将编写的驱动程序、BSP等给其它开发商使用,开发商只需加载cec文件后就能够将驱动、BSP等加入到自己的平台上。
用记事本就可以打开查看.cec文件的内容。
一般编写.cec文件采用PB的工具“ceceditor”,单击PB菜单“tools”-“ceceditor”,弹出一个窗口,窗口标题为“platformBuilderCECEditor”。
1、编写.cec文件:
假如我们要加入一个驱动程序,这个驱动程序包含两个文件,一个驱动文件mydll.dll,另一个驱动注册信息mydll.reg。
单击“ceceditor”的“createanewcecfile”按钮。
在新窗口左边树型控件中“catalog”项位置单击右键,在弹出的菜单中单击“insertfeaturegrout...”,在弹出的对话框“insertfeaturegroup”的“name”中输入特征名字例如“mydll”,带“*”的必须填写,其它可以不添。
在窗口左边树型控件中“mydll”项位置单击右键,在弹出的菜单中单击“insertfeature”,在弹出的对话框的“name”中再次输入“mydll”。
接着在窗口左边树型控件中“mydll”项位置单击右键,在弹出的菜单中单击“insertbuildmethod”,在弹出的对话框中选择支持的CPU类型。
在此对话框中的“Step”中共有12个选项,将PB编译平台的过程分为四个部分,每个部分又加入“Pre”和“Post”表示此前和此后。
这四个部分分别为