中国工程建设造价管理协会网站,漳州seo顾问,苏州有哪些好的互联网公司,亳州蒙城网站建设一.pbcxml分析 每一个BSP都有一个工程文件#xff0c;比如MyBSP.pbcxml#xff0c;里面描述了BSP的信息。下面就来介绍一下BSP的pbcxml文件。 文件的大致格式应该是这样的#xff1a;
CatalogFile …
FileInformation ….
….
/FileInformation…一.pbcxml分析 每一个BSP都有一个工程文件比如MyBSP.pbcxml里面描述了BSP的信息。下面就来介绍一下BSP的pbcxml文件。 文件的大致格式应该是这样的
CatalogFile …
FileInformation ….
….
/FileInformation
BSP …
…
/BSP
Item …
…
/Item
Item …
…
/Item
Item …
…
/Item
Item …
…
/Item
/CatalogFile 实际上CatalogFile…/CatalogFile相当于一个入口在这里面包含的就是WinCE BSP的所有内容了里面包含几个部分下面分别介绍每个部分。 1. FileInformation…/FileInformation项这里面包含了BSP的基本信息比如BSP的名字描述厂家等。下面是一个模板
FileInformation IdFileInformation: VENDOR:CATALOGFILENAME TitleTitle Name/Title DescriptionBSP Description/Description VendorVendor Name/Vendor OSVersionWinCE Version/OSVersion FileVersionFile Version/FileVersion
/FileInformation 这里不做过多介绍了一看就应该明白下面给个实际BSP中的用到该项描述的例子
FileInformation IdFileInformation:Cirrus Logic:EP94xx TitleEP94xx/Title DescriptionEP94xx BSP Catalog Items/Description VendorCirrus Logic/Vendor OSVersion6.00/OSVersion FileVersion1.0.0/FileVersion
/FileInformation 2. BSP…/BSP项该项一般在FileInformation项后面用来描述当前的BSP中都有哪些组件或者说有哪些Items。具体模板如下
Bsp IdBsp: VENDOR: BSPDIR: CPU TitleBSP Title/Title DescriptionBSP Description/Description PlatformDirectoryPlatform Directory/PlatformDirectory CpuIdCpu:CPU ID/CpuId BspItemIdItem: VENDOR: VARIABLE/BspItemId BspItemIdItem: VENDOR: VARIABLE/BspItemId …
/Bsp 这里需要做一下解释 VENDOR厂家名称比如三星提供的BSP那么就应该是SAMSUNG。 BSPDIR指该BSP在”/Platform”文件夹下的路径。 CPU指该BSP所支持的CPU比如ARMV4I。 MODULE指BSP中的各个模块被编译后所生成的dll或者exe的名字比如audio.dll那么这里就应该是audio。 VARIABLE指BSP中和某个模块相关的环境变量。 Title…/Title指BSP的标题 Description…/Description指BSP的一些描述 PlatformDirectory…/PlatformDirectory指该BSP在”/Platform”目录下的路径。 CpuId…/CpuId指所支持的CPU比如ARMV4I。 BspItemId…/BspItemId指BSP中都包含了哪些模块。 这里要注意的是BspItemId…/BspItemId有两种表示方法如下
Method 1BspItemIdItem: VENDOR: VARIABLE/BspItemId
Method 2BspItemIdItem: VENDOR: MODULE: BSPDIR/BspItemId 可以看一下WinCE6.0中Platform目录下的一些微软提供的BSP的pbcxml文件大多采用第二种方法我个人更喜欢第一种方法简单。 下面也给个例子
Bsp IdBsp:Cirrus Logic:EP94xx:ARMV4I TitleEP94xx: ARMV4I/Title DescriptionCirrus EP94xx BSP for WinCE 6.0/Description PlatformDirectoryEP94xx/PlatformDirectory CpuIdCpu:ARMV4I/CpuId BspItemIdItem: Cirrus Logic: bsp_ep94xx_i2s_audio/BspItemId BspItemIdItem: Cirrus Logic: bsp_ep94xx_flash/BspItemId BspItemIdItem: Cirrus Logic: bsp_ep94xx_nandflash/BspItemId BspItemIdItem: Cirrus Logic: bsp_ep94xx_ethernet/BspItemId BspItemIdItem: Cirrus Logic: bsp_ep94xx_serial/BspItemId BspItemIdItem: Cirrus Logic: bsp_ep94xx_usb/BspItemId BspItemIdItem: Cirrus Logic: bsp_ep94xx_touch/BspItemId BspItemIdItem: Cirrus Logic: bsp_ep94xx_rtc/BspItemId
/Bsp 3. Item…/Item项它会在BSP项后面详细描述BSP项中的每一个模块也就是描述BSP中的每一个驱动的相关信息。模板如下
Item IdItem: VENDOR: VARIABLE TitleDriver Title/Title DescriptionDriver Description/Description TypeBspSpecific/Type VariableVariable/Variable LocationDevice Drivers/Location SourceCode TitleSource Code Title/Title PathSource Code Path/Path /SourceCode
/Item 前面我们提到了BSP项中的BspItemId…/BspItemId有两种表示方法那么实际上和这里的每一个模块的Item项是对应的上面的用哪种方法表示这里也同样要用相同的方法如下
Method 1Item Id”Item: VENDOR: VARIABLE” …… /Item
Method 2Item Id”Item: VENDOR: MODULE: BSPDIR” …… /Item 这里再对一些定义作个解释 VENDOR厂家名称比如三星提供的BSP那么就应该是SAMSUNG。 CPU指该BSP所支持的CPU比如ARMV4I。 VARIABLE指BSP中和该模块相关的环境变量。 Title…/Title该驱动的标题。 Description…/Description该驱动的描述。 Type…/Type对于BSP中的Item来说这里必须是”BSPSpecific”。 Variable…/Variable该驱动用到的环境变量可以不止一个。 Location…/Location指在PB中的Catalog Items View中的位置。 SourceCode…/SourceCode描述该驱动的源代码。 Path…/Path指向该驱动的源代码的路径。 HelpLink…/HelpLink描述一个帮助链接链接到帮助页。 下面举个例子
Item IdItem:Cirrus Logic:bsp_ep94xx_i2s_audio TitleAudio I2S/Title DescriptionAudio Driver for I2S/Description TypeBspSpecific/Type VariableBSP_EP94XX_AUDIO/Variable VariableBSP_EP94XX_I2S_AUDIO/Variable LocationDevice Drivers/Location SourceCode Title$(_WINCEROOT)/PLATFORM/EP94XX/SRC/DRIVERS/WAV/Title Path$(_WINCEROOT)/PLATFORM/EP94XX/SRC/DRIVERS/WAV/Path /SourceCode
/Item 上面对WinCE中的BSP的工程文件pbcxml做了个介绍相信有点描述语言基础了解一些WinCE知识的看懂绝对没有问题了。很多时候在向BSP中添加驱动或者删除驱动的时候我们就可以直接用记事本打开该文件然后在里面编辑就可以了这样很方便。 二.REG文件和DB文件 1. REG文件
注册表文件这个和Windows操作系统中使用的注册表文件基本一样在BSP中主要是Platform.reg该注册表文件描述了和硬件平台相关的配置大部分是用来描述驱动的相关信息。
注册标的格式如下
[KEY1]
ValueName1{Value Type}:{data}
ValueName2{Value Type}:{data}
[KEY2]
ValueName1{Value Type}:{data} 其中Value Type和data相互对应不同的Value type对应不同的data具体如下 Value Type data REG_SZ ”my string” 字符串类型 REG_DWORD dword:NNNN(hex number) DWORD类型 REG_MULTI_SZ multi_sz:”my_string_1”,”my_string_2” 多字符串类型 REG_BINARY hex:xx,xx,xx 二进制类型 HEX hex(xxxxxxxx):xx,xx,xx,xx 十六进制类型 在注册表中同样可以使用IF/ENDIF来进行条件包含其中条件可以是一个WinCE中的环境变量还可以在该环境变量后加一个空格再加一个惊叹号(“!”)表示没有设置或者不等于的情况比如
IF environment variable [ value] [!]
[KEY1]
ValueName1{Value Type}:{data}
ValueName2{Value Type}:{data}
[KEY2]
ValueName1{Value Type}:{data}
ENDIF 如果注册表某一行是以分号(“;”)开始表示这行是被注释掉的。当然也有一些例外比如在支持Hive注册表的时候如下
; HIVE BOOT SECTION ... reg data...
; END HIVE BOOT SECTION 关于Hive注册表以前介绍过这里不多说了。我们在注册表中无非就是创建删除key赋值等操作。
创建一个注册表key
[Key1]
ValueNameValue Type 删除一个注册表key
[-KEY1] 删除一个注册表值
ValueName1- 和BSP以及硬件平台相关的注册表配置都放在platform.reg文件中和WinCE工程相关的配置应该放在project.reg文件中。 2. DB文件
数据库文件同样也有platform.db和project.db两个文件。但是很少会被用到特别是platform.db这些数据库文件都是基于WinCE的对象存储的会在WinCE启动以后被加载到RAM中掉电就会丢失具体格式如下
Database : db_name : hex_type : num_sort_order : sort order specifier 1
Record :
Field : field_hex_propid : value
End
End Database 可以使用上面的格式在.db文件中添加数据库记录由于本人从未使用过所以对上述格式没有太多了解相信搞过数据库的人士看看上面的格式可能就明白了。 三.Dirs文件和Sources文件 1. Dirs文件
关于Dirs文件就是指定要编译的路径这个地球人都知道。还是简单介绍一下。按照文档上面介绍有三种定义DIRSDIRS_CE和OPTIONAL_DIRS。 DIRS就是指定要编译的目录。
DIRS_CE只有目录下的源代码用于WinCE的映像文件时才编译该目录。
OPTIONAL_DIRS指定可以选择编译的目录。比如OPTIONAL_DIRSproj1如果想编译proj1目录可以设置BUILD_OPTIONSproj1然后运行build命令就可以了。 举个例子
DIRS common / drivers / oal / bootloader
表示需要编译commondriversoal和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/BSP NAME/Target LOCAL生成的文件在当前路径下 CUSTOM生成的文件在TARGETPATH指定的位置 MANAGED生成的文件在%_PROJECTROOT%/OAK/Target/Managed OAK, SDK, DDK生成的文件在%_PROJECTROOT%/Oak/Target
TARGETPATH当上面的RELEASETYPECUSTOM的时候该宏指定路径
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用于定义用户自己的编译器参数取代默认的编译器参数。 举个例子
TARGETNAMEserial_smdk2410
TARGETTYPEDYNLINK
RELEASETYPEPLATFORM
TARGETLIBS$(_COMMONSDKROOT)/lib/$(_CPUINDPATH)/coredll.lib / $(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/ceddk.lib SOURCELIBS$(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/serpddcm.lib / $(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/com_mdd2.lib DEFFILEserial.def
DLLENTRY_DllEntryCRTStartup SOURCES ser_smdk2410.cpp / pdds3c2410_ser.cpp 需要编译的文件为ser_smdk2410.cpp和pdds3c2410_ser.cppDEF文件为serial.defDLL的入口函数是_DllEntryCRTStartup静态连接serpddcm.lib和com_mdd2.lib两个库动态链接coredll.lib和ceddk.lib两个库最终编译为dll文件文件名为serial_smdk2410.dll。 最后总结一下Dirs文件会和Sources文件配合使用但是他们不可能存在同一个目录下面。Dirs文件指定编译目录Sources文件指定如何编译. 四.DAT文件介绍 DAT文件用于在WinCE启动的时候定义文件系统的结构也就是定义有哪些文件夹哪些文件在什么位置等。每次冷启动的时候Filesys模块会根据.dat文件中的内容来创建目录以及目录下的文件。 在BSP中我们可以找到platform.dat。在创建一个WinCE的工程以后可以在工程目录下面找到project.dat。可以在这两个.dat文件中定义我们所需的根目录以及相应的子目录和文件当然Windows文件夹及其包含的子文件夹除外。用户可以通过定义快捷方式的方法来引用Windows目录下的文件。 关于DAT文件的具体格式来举个例子
root:-Directory(My Documents)
root:-Directory(Program Files)
Directory(/Program Files):-Directory(My Projects)
Directory(/Program Files):-Directory(Accessories)
Directory(/Program Files):-Directory(Communication)
Directory(/Program Files/My Projects):-File(My Project Program, /Windows/Myproj.exe)
root:-File(/control.lnk, /Windows/control.lnk) 简单解释一下上面的内容是先创建My Documents和Program Files两个根目录然后在Program Files下面创建My ProjectsAccessories和Communication三个子目录然后拷贝被定义在Windows目录下的存在于ROM中的Myproj.exe文件到My Projects目录下面且名字为My Project Program。这里需要说明的一点就是像Myproj.exe这样的文件都是从ROM中拷贝出来的所以必须在BIB文件中包含了该文件。最后一行意思是在根路径下创建control.lnk该文件来自ROM中的control.lnk文件是一个快捷方式文件。 对上面的一些格式做个解释 1Root Directory的语法格式
root:[-Directory(dir_name)] [-Permdir(dir_name)]
[-File(target_filename, source_location)] root表示根目录。
-Directory(“dir_name”)定义根目录下的目录名。
-Permdir(“dir_name”)定义一个永久的目录用户是不能通过RemoveDirectory函数删除的。
-File( target_filename, source_location)定义一个目标文件该文件从ROM中拷贝过来。target_filename为目标文件的文件名source_location为ROM中的文件指Windows目录下的某路径下的文件名。 2Directory的语法格式
Directory(dir_name):[-Directory(dir_name)]
[-File(target_filename, source_location)] Directory(“dir_name”)表示目录名。”/”表示根目录。
-Directory(“dir_name”)表示目录下的路径就是子目录。
-File( target_filename, source_location)定义一个目标文件该文件从ROM中拷贝过来。target_filename为目标文件的文件名source_location为ROM中的文件指Windows目录下的某路径下的文件名。 DAT中所使用的语法定义比较简单看看例子就知道如何修改了一般我们会通过修改project.dat和platform.dat来改变WinCE启动后的文件路径结构。其中platform.dat是和平台相关的而project.dat是和WinCE工程相关的。 五.BIB文件介绍 在WinCE中使用的一个重要的文件就是BIB文件全称Binary Image Builder File。在WinCE的编译过程中会用到BIB文件应该是在最后的Makeimg阶段。所有的BIB文件会被合并成CE.bib文件然后Romimage.exe会根据BIB文件中的描述来决定哪些文件最终被包含到WinCE image中。当然BIB文件还决定了WinCE设备内存的分配其中定义了WinCE image占用哪块内存Framebuffer占用哪块内存等。 在BIB文件中分为4大项MEMORY项CONFIG项MODULES项和FILES项。下面分别作个解释
MEMORY定义了内存分配的相关设置一般在BSP中的config.bib文件中。
CONFIG在最后的Makeimg阶段为Romimage.exe提供一些生成WinCE image的配置属性。该项是可选的一般也在BSP中的config.bib文件中定义。
MODULES定义了一些会被打包到WinCE image中的模块或者文件比如dllexe等。这些文件会被Romimage.exe标记为加载到RAM中或者XIP。我们可以在这里添加自己的WinCE应用程序或者模块但是不要添加Managed Binaries一般指.NET的程序。
FILES定义了一些操作系统会用到的其他的文件比如字体文件图片等。这些文件也会在WinCE运行的时候被加载到RAM中。 下面会详细介绍上面的4大项 1. MEMORY项
一般都在config.bib文件中定义开头会有MEMORY的字样。这里定义了为WinCE image以及其他模块预留的RAM同时也定义了WinCE可以使用的RAM。具体格式如下
MEMORY NAME Start Address Memory Size Type NAME该内存区域的名字必须是唯一的。
Start Address该内存区域的起始地址用十六进制表示。
Memory Size该内存区域的大小用十六进制表示。
Type内存区域的类型。包涵的多种类型如下。 类型值 描述 FIXUPVAR 用于在WinCE编译的Makeimg阶段就初始化一个内核中的全局变量。 NANDIMAGE 当创建了一个使用BinFS的image的时候NAND设备上的WinCE kernel重定向到RAM中的区域当系统访问该区域的时候BinFS会负责访问Nand设备上相应的位置并返回数据给系统实际上就是在Nand设备上面实现了XIP的功能。 RAM 定义了被WinCE系统使用的RAM区域这块内存必须是连续的这里有一点要注意就是从硬件的角度来说这块内存不能跨越两片SDRAM也就是说整个区域空间必须在一片硬件SDRAM上。 RAMIMAGE 定义了一块内存区域用于加载WinCE image实际上WinCE启动以后image会被拷贝到这块内存区域上面运行。一个image只能有一个连续的RAMIMAGE区域。 RESERVED 这块内存区域会被预留出来一般用于Frambuffer或者是DMA Buffer或者是一块共享内存用于EBOOT传递参数给WinCE系统。 EXTENSION 定义了一块WinCE image中的区域作为ROMHDR extension的数据区域。 2CONFIG项
一般在config.bib文件中定义定义了一些额外的配置参数其中一些对于WinCE image来说也很重要。具体格式如下 CONFIG ITEMParameter ITEM 描述 AUTOSIZE 允许未被使用的WinCE image的RAM被用作WinCE系统的RAM。默认值为ON。 COMPRESSION 允许Romimage.exe压缩WinCE image中的可写入部分。默认值为ON。 BOOTJUMP 定义了跳转跳转页在RAMIMAGE空间的地址。而不是默认情况下的RAMIMAGE的首地址。默认值为NONE。 FSRAMPERCENT 定义了文件系统使用的内存的百分比。默认值为0x80808080。 Byte 0第一个2MB中每1MB所包含的4KB的倍数。 Byte 1第二个2MB中每1MB所包含的4KB的倍数。 Byte 2第三个2MB中每1MB所包含的4KB的倍数。 Byte 3剩下的内存中每1MB所包含的4KB的倍数。 KERNELFIXUPS 定义了Romimage.exe是否重新定向内核的可写入区域。默认值为ON内核的可写入区域被重新定向到RAMIMAGE的起始位置。 OUTPUT 定义了最终生成的image存放的路径。默认为%_FLATRELEASEDIR%。 PROFILE 定义了是否在WinCE image中包含profiler的结构和符号。默认值为OFF。 RESETVECTOR 重新指定跳转页的位置一般针对MIPS芯片从0x9FC00000开始引导的问题。 ROMFLAGS 内核标记位可以进行组合 0x01表示禁用按需分页。 0x02表示禁用完全内核模式完全内核模式表示所有的线程都运行在内核模式。 0x10表示只信任ROM MODULES中的模块。 0x20表示停止刷新TLB。 0x40表示按照/base链接选项中的地址加载DLL。 ROMSTART 指WinCE image在内存中的起始地址。 ROMSIZE 指WinCE image的大小。 ROMWIDTH 指数据总线的宽度。 ROMOFFSET 指定一个偏移量来修改.bin文件中的每一个记录的地址。一般用于ROM中的.bin文件加载到RAM来运行的情况主要是表示存储.bin的位置和运行.bin的位置不一样。 SRE 使Romimage.exe产生一个.sre文件。默认值为OFF。 X86BOOT 定义是否插入一条跳转指令在x86复位向量地址的时候。 3MODULES项和FILES项
该项列出了所有被包含在WinCE image中的模块以及文件以及这些模块和文件以什么方式被加载到内存中。具体格式如下
MODULES Name Path Memory Type Name模块的名字比如一个dll或者exe文件的文件名。
Path路径一般都是WinCE的工程的Release目录。
Memory指定该模块被放在哪个区域一般都是NK区域。
Type定义了文件的类型。具体如下 类型 描述 S 系统文件。 H 隐藏文件。 R 只压缩模块的资源部分。 C 压缩模块的所有部分。 D 禁止调试。 N 模块是不可信任的。 P 告诉Romimage.exe不需要检查CPU的类型。 K 告诉Romimage.exe必需固定该模块的内核地址。有该标记的模块只能被LoadKernelLibrary函数加载。 X 告诉Romimage.exe对该模块签名。 M 运行时加载整个模块不要按需分页。 L 告诉Romimage.exe不要分离ROM DLL。 一般FILES项的Type只支持SHND几个类型而MODULES项的Type是都支持的。 举个例子吧 INIT.EXE %_WINCEROOT%/RELEASE/INIT.EXE NK SH MYDLL.DLL %_WINCEROOT%/RELEASE/MYDLL.DLL NK SHC 对于BIB文件来说同样支持“条件编译”我们可以通过设置环境变量来选择性地将某些模块打包到WinCE image中。一般在BSP中对于一些驱动模块的环境变量我们IF来进行条件判断。而对于WinCE的系统模块来说一般都是SYSGEN变量应该使用CESYSGEN IF来判断。 我们在BSP的开发中最常见的主要就是eboot.bibconfig.bibplatform.bib和project.bib。下面简单介绍一下
project.bib该文件主要自创建的WinCE工程中所需的一些文件。
platform.bib该文件包含了和硬件平台相关的文件主要以驱动程序为主。
config.bib该文件描述了WinCE系统的内存的配置。
eboot.bib该文件描述了WinCE的eboot的内存的配置。 还有其他的一些bib文件在WinCE系统编译后都会背拷贝到工程的release目录下面。比如common.bibie.bib等。这些文件列出了WinCE的组件相关的文件根据用户订制的系统会被选择性的打包到WinCE image中。