Wince 编译分为4个步骤,sysgen , build , release copy , make image
sysgen : system generation 根据用户的设置,产生相应的头文件,库文件等.
比如在\PUBLIC\COMMON\OAK\LIB\ARMV4I\DEBUG\下面有库文件wavemdd.lib , 创建testbuild (基于BSP device emulator)工程后,sysgen 后,在\testbuild\testbuild\Wince600\DeviceEmulator_ARMV4I\cesysgen\oak\lib\ARMV4I\debug 下面也有wavemdd.lib ,
同时在\testbuild\testbuild\Wince600\DeviceEmulator_ARMV4I\cesysgen下面也有很多头文件和库文件 。
用户在VS2005上的修改,比如选择上ActiveSync ( SYSGEN_AS_BASE ) ,在PBInitEnv.bat里面就会加上一句: set SYSGEN_AS_BASE=1
选择 Project-> testbuild property -> Locale 或者Build Options ,做的修改也反映
ing在 PBInitEnv.bat里。
sysgen 会根据很多.bat文件 (会处理依赖关系),比如 winceos.bat .
如果用户修改了设置,或者添加了组件,则需做sysgen .
Build :
编译 wince os , BSP , bootloader , 应用程序
使用SOURCES ,DIRS 和Build.exe 来组织编译,而不是Visual Studio的dws , sln文件来组织代码 。
Build.exe 查找DIRS , 没有的话,查找SOURCES文件,(DIRS ,sources 不共存于同一目录), 如果有sources,则调用nmake.exe Makefile .
Makefile 一般是这样写:
!INCLUDE $(_MAKEENVROOT)\makefile.def
也就是 : PUBLIC\COMMON\OAK\MISC\makefile.def , 这个文件会包含 !INCLUDE .\sources
这样 sources里列出的文件就会被编译,库被link .
还有一个makefile.inc
Release copy :
copy 到 _FLATRELEASEDIR 目录下。
Make Image :
合并配置文件:bib , dat ,reg , db .
然后打包 ,生成 nk.bin
生成的bin文件格式:
标记 (7个字节)
Image开始地址 (1个DWORD)
Image长度 (1个DWORD)
记录0地址 +记录0长+记录0校验和+记录0内容(文件内容)
记录1地址+记录1长+记录1校验和+记录1内容(文件内容)
......
{BANNED}最佳后一条记录是表示结束,Start = 0x00000000, Length = 0x8C072C3C是StartUp地址, Chksum = 0x00000000
bin 文件的头部(不包括记录)可以用下面的结构表示
struct BinFile{
BYTE signature[7]; // = { ''B'', ''0'', ''0'', ''0'', ''F'', ''F'', ''\a'' }
DWORD ImageStart
DWORD ImageLength
};
编译技巧:
1 VS2005 , Build-> Advanced Build Commands :
Build and Sysgen Current BSP : 仅编译\platform目录下的代码
2 编译bootloader ,比如修改了eboot的代码
Build -> Open Release Directory in Build Window”
然后到eboot目录下 敲 build 就可以了, 然后eboot.bin 会自动更新,在 _FLATRELEASEDIR 目录下 .不必执行make image了。
3 改动了*.bib,*.reg等配置文件
copy 改动的文件到 _FLATRELEASEDIR 目录下, 然后 makeimg
4 改动了OAL :
Build -> Open Release Directory in Build Window”
然后到OAL目录下 敲 build 就可以 ,被编译后的OAL层自动拷贝到_FLATRELEASEDIR 目录下,OAL.exe更新了.
然后到_FLATRELEASEDIR 下 , makeimg (因为OAL属于nk.bin中的,所以需要makeimg),
5 改动了驱动程序:
和上面的方法也一样,
只需要进入到要编译的驱动的目录下面执行“build”,
然后到_FLATRELEASEDIR 下 , makeimg
阅读(2071) | 评论(0) | 转发(0) |