Chinaunix首页 | 论坛 | 博客
  • 博客访问: 532819
  • 博文数量: 237
  • 博客积分: 2175
  • 博客等级: 大尉
  • 技术积分: 2563
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-05 22:02
个人简介

目前在一家公司担任软件总监,主要涉及智能手机,笔记本电脑的开发

文章分类

全部博文(237)

文章存档

2024年(18)

2023年(68)

2022年(13)

2021年(7)

2020年(11)

2019年(3)

2018年(10)

2017年(8)

2012年(7)

2011年(4)

2010年(32)

2009年(41)

2008年(6)

2007年(9)

分类: 其他平台

2009-11-27 15:43:10

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) |
给主人留下些什么吧!~~