一.wince6 OS 编译大体过程
build (public code)->sysgen->build (BSP)->buildrel->makeimg, 其中makeimg 命令调用romimage.exe (运行该命令romimage.exe ce.bib )产生最终的nk.bin 。其中ce.bib 是merge 了系统中所有bib 文件( 当然包括config.bib 和platform.bib) 。
二.ce.bib 中的内容包含四大部分
1. MEMORY section 划分内存块
格式:Name Start Size Type
Name :唯一名称
Start :每块内存base address
Size :划分大小
Type :"rom_8" "rom_16" "romx8" "ram" "ramimage" "nandimage" "reserved" "fixupvar" "extension" "chain information" 详细解释请参考http://msdn.microsoft.com/en-us/library/ms923584.aspx
Romimage.exe 解析该部分内容,如果有一块内存区域没有指定type 并且Name 是“reserve” ,type 就被指定为reserve
2. CONFIG section 设置配置变量
AUTOSIZE :
格式:AUTOSIZE=OFF|ON
默认为OFF ,config.bib 中定义RAM 用于进程和存储对象内存区域,RAMIMAGE 用于保存image 。如果为ON ,RAM 和RAMIMAGE 合并成一个部分,从低地址开始预留RAMIMAGE 大小,其余大小作为RAM
BOOTJUMP :
格式:BOOTJUMP =address|NONE
默认为NONE ,内核启动从OAL 的startup 地址执行。如果指定一个在RAMIMAGE 范围的值,那就从指定的地址开始执行
COMPRESSION :
格式:COMPRESSION = OFF|ON
默认为ON ,对于文件,默认全部压缩,对于模块默认压缩可写部分。如果模块在.bib 中定义时具有C 属性(表明压缩模块所有部分),那么当前这个选项就忽略了
FSRAMPERCENT :
格式:FSRAMPERCENT=number
文件系统分配的内存的百分比。
例如number 为0xAABBCCDD, 那么文件系统分配的内存的百分比为(0xAA+0xBB+0xCC
+0xDD)/1024
KERNELFIXUPS :
格式:KERNELFIXUPS=OFF|ON
默认值为ON 。如果为ON ,romimage.exe 具有Base Relocations
PROFILE :
格式PROFILE =OFF|ON
默认为OFF 。如果为ON ,使用symbols (文件map 信息)
3.MODULES section 定义OS 镜像包含哪些模块,并指定模块被加载到那块内存区域
格式:Name Path Memory Type
Name :模块名
Path :真实的模块地址
Memory :该模块被加载到那块内存区域,区域为MEMORY section 部分的name 值
Type : 模块的存放属性
- S :系统文件
- H :隐藏文件
- R : 只压缩模块的资源部分(默认模块是不压缩的)
- C :压缩模块所有部分
- D :禁止调试
- N :标志模块是非信任的
- P :忽略CPU 类型
- Q: 双模式,如果该模块为user mode ,这时会在kernel mode 上也对应一个K.+ 模块名
- K :指定模块为kernel mode
- Z :like kernel mode
- X :指定romimage.exe 对此模块验证签名
- M :运行时加载整个模块,而不是按需分页
4. FILE s