分类: C/C++
2008-04-03 13:45:30
二、镜像配置文件:
镜像配置文件用于在制作CE镜像文件时使用。CE的镜像文件扩展名为.bin。制作镜像工具romimage.exe除了能够产生.bin文件外,还能够产生.abx和.sre文件。整个镜像的制作过程由makeimg.exe控制,它调用cenlscmp.exe、fmerge.exe、res2.exe、txt2ucde.exe、regcomp.exe、romimage.exe等。这些工具大部分在前面已经介绍过了。镜像配置文件类型有.bib、.reg、.db、.dat、.str。如果主文件名为Common,表示是通用的配置文件。如果主文件名为Platform,表示是某一个BSP的配置文件。如果主文件名是Project,表示是定制的一个平台的配置文件。在PB中修改配置文件前如果没有把握最好先做好备份。
.bib(Binary image builder)
定义包含在内核镜像中的文件和模块的名称、加载位置。主要的bib文件有Common.bib,Config.bib, Project.bib, Platform.bib等。.bib文件内部分为几个部分:
【MEMORY】用于定义有效的物理内存块,在此将整个RAM分为几个部分。 格式: 名称 首地址 大小 内存类型 名称: 内存区域的唯一名称(RESERVE是预定义名称,可以用多次,表示此区域保留) 首地址: 内存区域的首地址(十六进制表示) 大小: 内存区域的大小(十六进制表示) 内存类型:分为三种。 RAM: 运行所有进程的内存区域(整个区域必须是连续的,且不能含空洞) RAMIMAGE:专用于保存镜像的内存区域。(每个.bin中只能指定一个RAMIMAGE) RESERVED:保留内存区域(这样的区域一般用于驱动程序使用,如显卡缓冲区、DMA缓冲区)
举例: ;名称 首地址 大小 内存类型 IF IMGRAM64 NK 80220000 009E0000 RAMIMAGE RAM 80C00000 03000000 RAM UMABUF 83C00000 00400000 RESERVED ENDIF
注:整个内核的地址都是从0x8000 0000开始的。如果是x86系列的CPU,那么物理内存地址与虚拟地址映射关系在oeminit.asm中指定。
【CONFIG】类似环境变量,PB预设置了一些配置变量。常用的配置及说明如下: AUTOSIZE: 格式:AUTOSIZE = OFF | ON
默认值为OFF。在config.bib中的MEMORY部分定义了有效的内存区域,其中两部分RAM、RAMIMAGE分别用于进程使用区域和保存镜像区域。如果为ON,romimage.exe在创建nk.bin时将RAM和RAMIMAGE两部分合并成一个部分,然后从最低地址开始保留RAMIMAGE大小的内存,其余都作为RAM使用。
BOOTJUMP: 格式:BOOTJUMP = address | NONE
默认值为NONE。每次重新启动CE内核,默认执行的代码从RAMIMAGE的首地址开始。如果在BOOTJUMP指定一个地址(必须在RAMIMAGE范围内),那么将从指定的地址开始执行。
COMPRESSION: 格式:COMPRESSION = OFF | ON
默认值为ON。romimage.exe在创建内核时默认压缩所有可写部分。对于文件,默认全部压缩。对于模块(.exe、.dll),默认压缩可写部分。模块的可写部分包括数据段,也就是在模块运行时一定加载到内存中的部分。如果模块在.bib中定义时具有C属性(表明压缩模块所有部分),那么当前这个选项就忽略了。
FSRAMPERCENT: 格式:FSRAMPERCENT = number
默认值为0x80808080。指定为文件系统分配的内存的百分比。number分为四个字节,由十六进制表示。
byte0的值(单位为4KB)表示在第一个2MB中,其中每1MB包含的4KB的整数倍。 byte1的值(单位为4KB)表示在第二个2MB中,其中每1MB包含的4KB的整数倍。 byte2的值(单位为4KB)表示在第三个2MB中,其中每1MB包含的4KB的整数倍。 byte3的值(单位为4KB)表示在剩下的内存中,每1MB包含的4KB的整数倍。
计算一下默认值0x80808080表示的百分比:0x80*4K/1M = 0.5,因为每个字节都等于0.5,所以整个占用的百分比是50%。
KERNELFIXUPS: 格式:KERNELFIXUPS = OFF | ON
默认值为ON。如果为ON,romimage.exe创建内核前重定位内核到RAM的开始位置。
OUTPUT: 格式:OUTPUT = path
指定romimaeg.exe将创建完成的内核文件nk.bin放置到的路径。一般放置到%_FLATRELEASEDIR%下。
ROMFLAGS 格式:ROMFLAGS = Flags
设置内核选项的位掩码,多个位掩码可以组合使用。
ROMSIZE 格式:ROMSIZE = size
指定内核镜像的大小
ROMSTART 格式:ROMSTART = address
指定内核镜像的首地址
ROMWIDTH 格式:ROMWIDTH = width
指定数据宽度,一般为32位
ROMOFFSET 格式:ROMOFFSET = address
指定偏移地址。
SRE 格式:SRE = OFF | ON
指定romimage.exe是否产生.src文件,一般烧录ROM的程序能够识别此文件。
注:config中绝大多数【CONFIG】选项不需要修改。凡是配置文件都可以使用IF/ENDIF 条件语句。
【MODULES】定义镜像要包含的模块并指定模块(DLL、EXE)如何被加载到内存表中。 格式:模块名称 路径 内存块 类型
模块名称一般为模块的真实名称;路径为当前文件所处的位置(路径中指定的文件名和前面模块名称最好一致);内存块是指这个模块将被存放到哪个内存块中,内存块的定义见前面MEMORY部分;类型指定这个模块将被存放的属性,具体类型如下:
举例: MODULES init.exe %_WINCEROOT%\RELEASE\INIT.EXE NK SH nk.exe $(_FLATRELEASEDIR)\kitlnokd.exe NK SHD nk.exe $(_FLATRELEASEDIR)\kitlnokd.exe NK SHN
【FILES】定义镜像要包含的文件并指定文件如何被加载到内存表中。 格式:模块名称 路径 内存块 类型
具体类型如下:
举例: FILES initobj.dat %_WINCEROOT%\RELEASE\INITOBJ.DAT NK SH
【.dat File System File】定义目录和指定文件位置。当冷启动CE平台时,filesys.exe用这些数据 创建目录、快捷方式、文件(在RAM文件系统)。
举例: ;;创建根目录下子目录Program Files root:-Directory("Program Files") ;;创建目录Program Files下一个子目录My Projects Directory("\Program Files"):-Directory("My Projects") ;;复制文件从\Windows\Myproj.exe到\Program Files\My Projects\My Project.exe Directory("\Program Files\My Projects"):-File("My Project.exe", "\Windows\Myproj.exe") ;;复制文件从\Windows\control.lnk到\control.lnk root:-File("\control.lnk", "\Windows\control.lnk")
快捷方式的运用:如果要在CE平台的桌面上显示一个程序的快捷方式,实现步骤为:
【.reg Registry file】设置注册表项。关于注册表见我的文章《开发实例二:保存信息》。
数据类型 格式 REG_SZ "my string" REG_DWORD DWORD: NNNNN (十六进制) REG_MULTI_SZ multi_sz: "my string" REG_BINARY hex: xx,xx,xx,xx ... HEX hex(xxxxxxxx): xx,xx,xx,xx
例如: [HKEY_LOCAL_MACHINE\init] "Launch60"="myproc.exe" ///REG_SZ类型 "Depend60"=hex:14,00, 1e,00 ///REG_BINARY类型 [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\TRUEFFS_UNAND\FATFS] "MountFlags"=dword:2 ///REG_DWORD类型
【.db The database files】数据库文件保存在对象存储中。实际应用的不多,在这里不再过多讲解。
【.str string files】类似EVC中的字符串资源。用于指定ID与字符串的关联。CE支持很多国家语言,所以内核使用的字符串可能采用不同国家的语言。为此,CE将字符串用ID来定义,在.str文件中指定ID对应的字符串。包含.str文件的目录名采用国家码来设置,例如"C:\......\0410\cepc.str"。