WINCE第一个驱动续

  上文介绍了WINCE一个简单驱动的编写,这节我们接着介绍一些配置文件的编写。涉及到的文件有.platform.bib,platform.reg,dirs,source,SimpleDriver.def,其中后面两个文件在前文已有介绍,这里就以前两个配置文件为主。

首先,从注册表说起,先简单的介绍一下注册表:Makeimg.exe使用.reg文件来为CE镜像建立注册表并添加默认的键值。也就是说,在.reg中写入的注册表的键值会被默认地放入CE镜像的初始化注册表中。其中Platform.reg定义了目标设备硬件的注册表设置,Project.reg定义基于Windows CE项目工程的注册表设置。注册表键值的类型如下:

1.       REG_SZ表示一个字符串类型,如reg_sz:”my string”

2.       REG_DWORD表示一个双字节类型,如dword:12345678(十六进制数)

3.       REG_MULTI_SZ表示多字符串类型,如multi_sz:“my string,my string”。

4.       REG_BINARY 二进制类型。

在实际应用中可以使用IF/ENDIF关键字来引入一个注册表设置块,通过设置一个环境变量或一个特殊的值来达到这个目的。

为了包含一个注册表设置块,当一个环境变量没有被设置或者没有等于一个特定的值的时候,引入的注册表设置块的行尾应使用一个空格和“!”。

这里比较好找,一目了然,在目录D:\WINCE600\PLATFORM\SMDKXXXX\Files\platform.reg下添加:

 

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SPL]
   
" Prefix " = " SPL "
   
" Dll " = " SimplDriver.Dll "
   
" FriendlyName " = " Simple Driver "
   
" Order " = dword: 0
   
" Index " = dword: 0

这样在WINCE启动时,就自动加载该驱动了。

接着我们介绍platform.bib文件,关于bib文件,这里做一个简要的介绍:二进制镜像文件构建文件(.bib)定义了哪个模块或者文件被包含到运行时的CE镜像中。在编译期间,makeimg.exe使若干个.bib文件合并成ce.bib文件,然后,romimage.exe使用ce.bib决定哪些文件应该被打包进运行时CE镜像中,它同时还使用ce.bib来决定如何加载模块和文件到CE镜像(下载到目标设备的CE镜像)所在的内存中。

按照功能划分,.bib文件可以分为如下几种类型。

(1)                 Platform.bibPlatform.bib位于目录D:\WINCE600\PLATFORM\SMDK6410\Files,它包含硬件平台相关的模块和文件,如目标设备的驱动文件。这些模块和文件是CE镜像的入口,比如.exe文件,如波形音频文件(.wav)等。

(2)                 Project.bibProject.bib weiyumulu D:\WINCE600\PUBLIC\CEBASE\OAK\FILES,如果我们新建一个工程项目(OSDesign1)则这个工程位于目录:D:\WINCE600\OSDesigns\OSDesign1\OSDesign1\Wince600\SMDK6410_ARMV4I\OAK\files下。Project.bib文件定义与创建CE镜像的工程相关的模块,如果在OSDesign1中创建了一个自己的模块或者应用程序,那么就要把它们添加到Project.bib文件中的MODILES部分。

(3)                 Common.bibCommon.bib位于目录D:\WINCE600\PUBLIC\COMMON\OAK\FILES下,它定义了CE镜像文件包含的通用显示驱动和核心系统模块。

(4)                 Config.bibConfig.bib位于目录D:\WINCE600\PLATFORM\SMDK6410\Files下,它定义了ROMRAM的配置信息。它同样包含了CE镜像文件的MEMORYCONFIG部分。Config.bibMEMORY部分定义了运行时CE镜像内存分配表,指定了名称、地址、大小和MEMORY区域的类型。

.bib文件可以被分为四个部分,分别是MEMORYCONFIGMODULESFILES。下面将分别说明这四个部分各自的含义。

(1)       MEMORY。定义可用的物理内存,包括起始地址、大小和内存类型。

(2)       CONFIG。定义romimage.exe输出的配置选项。默认情况下,这个区域是在config.bib文件中。不过,也并不是.bib文件中必须要包含CONFIG部分。

(3)       FILES。指定放在CE镜像中的文件列表。

(4)       指定放在CE镜像总的模块列表,包括EXEDLL文件,与FILES的区别是放在MODULES中的文件通常是代码文件,并且构建系统时不会压缩这些文件。

这里我们主要介绍Modules部分。

Modules部分指定了哪些基于Windows CE的模块包含到CE镜像中,以及如何给加载到config.bib文件中的MEMORY部分建立内存表。这个部分可以包含200个模块,这些模块有源代码和数据两个部分组成。

MODULES的语法格式如下:

;   Name    Path      Memory block    Section override    Memory Type

;   ---------   --------     ----------------       -----------        -------------

各参数之间用空格分隔。

NAME:这个参数指定了MODULES模块的名称。通常情况下,它就像被路径引用的文件名称一样。

PATH:指定要打包进CE镜像的MODULES模块的完整路径。

MEMORY BLOCK:这个参数指定romimage.exe加载目标模块到内存区域的ramimage部分。这个内存位于config.bib文件中memory部分指定的某一段内存。

SECTION OVERRIDE:这个参数的设置时可选的,它可以为modulesfiles或者空。如果设置了这个参数,那么构建系统就会根据它来决定这一项是modules还是files

TYPE:这个参数指定文件的类型,主要有以下几种类型,在实际的使用中可以选用其中的一种或者多种组合。

1.       S:定义一个系统文件

2.       H:定义一个隐藏文件

3.       R:压缩资源,只应用于MODULES部分

4.       C:如果应用于一个模块,则压缩全部内容

5.       D:运行时不允许调试。

6.       N:标记一个模块为不可信任的,只应用MODULES部分。

7.       K:指定romimage.exe必须修正模块到一个内核地址。在这个过程中,romimage.exe分配一个固定的虚拟地址给DLL,设置了此标志的模块只可以被loadKernelLibrary()函数加载。

8.       P:指定romimage.exe禁止在头文件中检查指定的CPU类型。这个旗标只用于资源dll,可以在一种CPU伤编译,在不同CPU上使用。

9.       M:表示对此页禁止按序调页。

10.   U:表示不压缩此文件。

在目录D:\WINCE600\PLATFORM\SMDKXXXX\Files\platform.bib文件中有如下定义:

;   Name                          Path                                    Memory Type

;   --------------         ----------------------------------              -----------

;-------------

;--------------Simple Driver ([email protected]) ------------------------------------------------------

       simpledriver.dll                                   $(_FLATRELEASEDIR)\simpledriver.dll           NK                 SHK

; @CESYSGEN ENDIF CE_MODULES_DEVICE

;---------------------------------------------------------------------------------------

其中,_$(_FLATRELEASEDIR)\ 指的是D:\WINCE600\OSDesigns\SMDKXXXX\SMDKXXXX\RelDir

结合上面的说明,我们可以知道,上面的语句的意思是将编译生成的simpledriver.dll模块加载到CE运行时镜像NK中。它的文件属性是系统文件,隐藏文件和内核模块,由romimage.exe分配一个固定的虚拟地址给simpledriver.DLL

接着在D:\WINCE600\PLATFORM\SMDKXXXX\Src\Drivers目录下找到dirs文件,在里面添加:SimpleDriver\

 最后点击build或者在dos环境下build -c

 

 

 

你可能感兴趣的:(WinCE)