编译平台的时候被使用; --#CUSTOM():在编译的时候运行批处理文件或可执行文件; --#COPY():从一个位置复制文件到另一个位置; --#ENV():设置环境变量; --#SRCCODE():指定了包含源程序文件的文件夹,只在编译所选组件时应用。
对于以上每个条目的具体用法可以参阅PB的帮助文档。为了获得感性认识,我们最好用记事本打开几个CEC文件来看一下。比如打开serial.cec看看串口驱动组件的实现方法等。 以上我们了解了CEC文件,我们再来解决后面的问题,即假设我从别的供应商处拿到了一个设备的驱动程序,它带了CEC文件,那么我要如何把这个组件加入到PB的组件包中呢?这个问题其实很简单,只要在PB的File菜单下使用\命令即可。在这个弹出的对话框中的内容和使用方法就不用我说了吧。
再来解决下一个问题,我要如何为我开发的组件编写CEC文件呢?这个也好办,在Tools菜单下使用\Editor\命令即可,如果不会写,可以先打开一个现有的CEC文件看看是如何组织的,然后再仿照它来写自己的就可以了,别忘了写完后要保存哦,同时也要注意GUID的问题。
此次内容的最后,我们再来看一下BSP。什么是BSP呢,其实就是为某一种开发板实现了设备驱动的软件包,它包含了源程序文件,二进制文件等,还有OAL适配层,Bootloader 和其他有关的配置文件。比如CE5的评估版就带了x86的BSP,AMD的BSP和Emulator的BSP。
通常对BSP的操作都在BSP向导中进行,它位于Platform菜单中,利用它可以新建自己的BSP,复制现存的BSP,修改现存的BSP或创建全局的驱动程序。如果你准备好了BSP所需要的那些东西就可以用它来生成你的BSP了,它会选择必须的CE内核组件。
WinCE BSP中的DAT 文件介绍
DAT 文件用于在WinCE启动的时候,定义文件系统的结构,也就是定义有哪些文件夹,哪些文件在什么位置等。每次冷启动的时候,Filesys模块会根据.dat文件中的内容来创建目录以及目录下的文件。
在BSP 中我们可以找到platform.dat。在创建一个WinCE 的工程以后,可以在工程目录下面找到project.dat。可以在这两个.dat文件中定义我们所需的根目录以及相应的子目录和文件,当然Windows文件夹及其包含的子文件夹除外。用户可以通过定义快捷方式的方 法来引用Windows目录下的文件。
关于DAT 文件的具体格式,来举个例子: root:-Directory(\root:-Directory(\
Directory(\Directory(\Directory(\
Directory(\root:-File(\
简单解释一下,上面的内容是先创建My Documents和Program Files 两个根目录,然后在Program Files下面创建My Projects,Accessories和Communication三个子目录,然后拷贝被定义在Windows目录下的存在于ROM中的Myproj.exe文件到My Projects目录下面,且名字为My Project Program。这里需要说明的一点就是,像Myproj.exe 这样的文件都是从ROM中拷贝出来的,所以必须在BIB 文件中包含了该文件。最后一行意思是在
根路径下创建control.lnk,该文件来自ROM中的control.lnk 文件,是一个快捷方式文件。 对上面的一些格式做个解释: 1.Root Directory的语法格式:
root:[-Directory(\[-File(\root:表示根目录。
-Directory(“dir_name”):定义根目录下的目录名。
-Permdir(“dir_name”):定义一个永久的目录,用户是不能通过RemoveDirectory函数删除的。
-File(\:定义一个目标文件,该文件从ROM中拷贝过来。target_filename为目标文件的文件名,source_location为ROM中的文件,指Windows目录下的某路径下的文件名。 2.Directory的语法格式:
Directory(\[-File(\
Directory(“dir_name”):表示目录名。””表示根目录。
-Directory(“dir_name”):表示目录下的路径,就是子目录。
-File(\:定义一个目标文件,该文件从ROM中拷贝过来。target_filename为目标文件的文件名,source_location为ROM中的文件,指Windows目录下的某路径下的文件名。
DAT 中所使用的语法定义比较简单,看看例子就知道如何修改了,一般我们会通过修改project.dat 和platform.dat 来改变WinCE启动后的文件路径结构。其中platform.dat是和平台相关的,而project.dat是和WinCE 工程相关的
WinCE BSP中的Dirs文件和Sources文件 1. Dirs文件
关于Dirs 文件,就是指定要编译的路径,这个地球人都知道。还是简单介绍一下。按照文档上面介绍有三种定义:DIRS,DIRS_CE 和OPTIONAL_DIRS。 DIRS:就是指定要编译的目录。
DIRS_CE:只有目录下的源代码用于WinCE的映像文件时,才编译该目录。
OPTIONAL_DIRS:指定可以选择编译的目录。比如:OPTIONAL_DIRS=proj1,如果想编译proj1目录,可以设置BUILD_OPTIONS=proj1,然后运行build命令就可以了。 举个例子:
DIRS= common drivers oal
bootloader
表示需要编译common,drivers,oal 和bootloader 目录。 DIRS=*
表示编译当前的所有目录。 2. Sources文件
在WinCE BSP 中会看到很多sources 文件,一般会和源代码放在同一个目录,当然不是绝对的。这些sources文件里面就是定义了一些宏,主要用于告诉Build.exe在编译源代码
的时候应该如何编译和链接,告诉Nmake.exe 如何编译源代码以及最后生成什么类型的文件。
下面具体介绍一下:
TARGETNAME:最后编译完后生成的目标文件的名字,不包括扩展名。 TARGETTYPE:生成的文件的类型。具体值如下: LIBRARY,一个.lib文件 DYNLINK,一个.dll 文件 PROGRAM,一个.exe文件
RELEASETYPE:该宏设置两个环境变量RELEASEDIR 和RELEASELIBDIR,就是设置编译后生成文件存放的路径。具体值如下:
PLATFORM,生成的文件在PLATFORM
CUSTOM,生成的文件在TARGETPATH 指定的位置
MANAGED,生成的文件在%_PROJECTROOT%OAK
TARGETPATH:当上面的RELEASETYPE=CUSTOM的时候,该宏指定路径 SOURCELIBS:静态链接。函数的实体被链接过来,生成一份拷贝
TARGETLIBS:动态链接。函数的地址被链接过来,系统执行时会加载该库 INCLUDES:指定额外的要搜索的头文件的路径 SOURCES:指定要被编译的文件
ADEFINES:指定汇编器要使用的参数 CDEFINES:指定编译器要使用的参数 LDEFINES:指定连接器要使用的参数
RDEFINES:指定资源编译器Rc.exe 的参数 DLLENTRY:指定dll 的入口函数 DEFFILE:指定该模块的.def 文件
EXEENTRY:指定可执行文件的入口函数
SKIPBUILD:不做实际的build操作,直接返回成功
WINCECOD:编译后生成一个.cod的汇编文件,用于查看汇编代码调试
WINCECPU:用于说明为指定的CPU 编译,这样被编译出来的目标文件会被放在_TGTCPU环境变量所指定的子目录下面,一般该宏在sources.cmn中定义。 WINCEMAP:编译后生成一个.map文件,用于调试 WINCEOEM:设置该值表示需要使用WinCE 下的一些公用的库和头文件,该值一般在BSP 中的sources.cmn中定义。
WINCETARGETFILE0:用于告诉编译系统在编译当前路径下的源码文件之前,要先由Build.exe编译的目标文件。
WINCETARGETFILES:用于告诉编译系统在链接当前路径下所有的目标文件之前,要先由Build.exe编译的目标文件。
WINCE_OVERRIDE_CFLAGS:用于定义用户自己的编译器参数取代默认的编译器参数。 举个例子:
TARGETNAME=serial_smdk2410 TARGETTYPE=DYNLINK RELEASETYPE=PLATFORM
TARGETLIBS=$(_COMMONSDKROOT)lib$(_CPUINDPATH)coredll.lib
$(_SYSGENOAKROOT)lib$(_CPUINDPATH)ceddk.lib
SOURCELIBS=$(_SYSGENOAKROOT)lib$(_CPUINDPATH)serpddcm.lib $(_SYSGENOAKROOT)lib$(_CPUINDPATH)com_mdd2.lib DEFFILE=serial.def
DLLENTRY=_DllEntryCRTStartup SOURCES= ser_smdk2410.cpp pdds3c2410_ser.cpp
需要编译的文件为ser_smdk2410.cpp 和pdds3c2410_ser.cpp,DEF 文件为serial.def,DLL 的入口函数是_DllEntryCRTStartup,静态连接serpddcm.lib和com_mdd2.lib两个库,动态链接coredll.lib 和ceddk.lib 两个库,最终编译为dll 文件,文件名为serial_smdk2410.dll。
最后总结一下,Dirs 文件会和Sources 文件配合使用,但是他们不可能存在同一个目录下面。Dirs文件指定编译目录,Sources文件指定如何编译。
WinCE BSP工程文件pbcxml分析
本文详细介绍WinCE BSP工程文件pbcxml分析
每一个BSP 都有一个工程文件,比如MyBSP.pbcxml,里面描述了BSP 的信息。下面就来介绍一下BSP 的pbcxml 文件。 文件的大致格式应该是这样的:
实际上
1.
这里不做过多介绍了,一看就应该明白,下面给个实际BSP中的用到该项描述的例子:
2.
这里需要做一下解释:
VENDOR:厂家名称,比如三星提供的BSP,那么就应该是SAMSUNG。 BSPDIR:指该BSP 在”/Platform”文件夹下的路径。 CPU:指该BSP 所支持的CPU,比如ARMV4I。
MODULE:指BSP中的各个模块被编译后所生成的dll或者exe的名字,比如audio.dll,那么这里就应该是audio。
VARIABLE:指BSP中和某个模块相关的环境变量。
这里要注意的是,
Method 2:
可以看一下WinCE6.0中Platform 目录下的一些微软提供的BSP的pbcxml 文件,大多采用第二种方法,我个人更喜欢第一种方法,简单。 下面也给个例子: