wince6.0编译环境一二三.doc_第1页
wince6.0编译环境一二三.doc_第2页
wince6.0编译环境一二三.doc_第3页
wince6.0编译环境一二三.doc_第4页
wince6.0编译环境一二三.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

wince6.0编译环境一二三(转摘) 收藏 在WinCE5.0中,在Build OS”菜单中,我们会看到不同的编译选项: Sysgen,Build and Sysgen和Build and Sysgen current BSP Sysgen:不用多说,当你在Catalog中添加或删除了新的item的时候,就用这个吧。 Build and Sysgen:当你更新了public目录下的源代码的时候,你就需要用这个了。一般比如在打patch以后,可能就需要进行Build and Sysgen了。 Build and Sysgen current BSP: 当你只改变了你的BSP部分的代码,就可以用这个选项。据说,当你改变了platform目录下的代码,也可以用这个,具体没有试过。在WinCE6.0中,在VS2005的Build菜单中,有一个“Advanced Build Commands”,其中有很多编译选项: Sysgen:相当于执行命令blddemo -q”,一般第一次编译或者是改变了Catalog中的item的时候,就用这个了。 Clean Sysgen:相当于执行命令blddemo clean -q,按照文档上的说明,当修改了 %_WINCEROOT%PublicCEBASEOAKMiscCesysgen.bat的时候,或者改变了以SYSGEN,BSP为前缀的 环境变量的时候,需要使用这个来编译。 在此我说一下我个人的经验,一般只有第一次创建完工程的时候,我会用Sysgen命令,以后只要是改变了SYSGEN为前缀的环境变量的设置或 者是Catalog中的item,我就会使用Clean Sysgen,而改变了以BSP为前缀的环境变量要看具体情况,也不一定就要用Clean Sysgen。继续. Build and Sysgen:相当于执行命令blddemo,当改变了public目录下的代码,比如你打了WinCE的patch,你就需要用这个了。 Rebuild and Sysgen Clean:相当于执行命令blddemo clean cleanplat -c,相当于清除上一次编译生成的文件,然后重新编译public目录和你的工程。 Build and Sysgen Current BSP:相当于执行命令blddemo -qbsp,仅编译platform目录下的代码。所以当改变了platform目录下的代码的时候或者说改变了BSP的代码的时候,可以用这个来编译。 Rebuild and Clean Sysgen Current BSP:相当于执行命令blddemo -qbsp -c,相当于完全重新编译platform目录下要编译的代码。 - 关于cvrtbin的用途,最常用的就是将NK.bin转换出NK.nb0。用法如下: cvrtbin options filename -s 从bin文件中产生sre文件 -r 从bin文件中产生rom文件 -a rom文件的起始地址 -w 总线的宽度 -l rom文件的大小 这个工具可以和viewbin工具一起使用,将NK.bin文件转换成NK.nb0。 首先通过:viewbin -nk.bin命令获得NK.bin的起始地址和大小,然后通过下面的命令: cvrtbin -a C02C0000 -l 00D5E380 -w 32 -r NK.bin 将NK.bin转换成NK.nb0。起始地址为0xC02C0000,大小是0x00D5E380,总线宽度为32bit,最后输出NK.nb0. - Viewbin是微软提供的一个命令行工具,在WinCE6.0中,可以在WINCE600PUBLICCOMMONOAKBIN I386找到他。Viewbin工具可以用来查看NK.bin文件。它可以从NK.bin中获得这个NK image的大小,运行的起始地址等。还能查看到里面所包含的模块,应用程序及相关的信息。 Viewbin的使用格式如下: viewbin parameter filename 举几个例子吧: 1. viewbin -nk.bin ViewBin. nk.bin Image Start = 0xC02C0000, length = 0x00D5E380 Start address = 0xC02C1006 Checking record #126 for potential TOC (ROMOFFSET = 0x40000000) Found pTOC = 0x8101c8d0 ROMOFFSET = 0x40000000 Done. 这条命令可以查看NK image的起始地址,长度等信息,这些信息应该和config.bib文件中定义的一致。 2. viewbin -t nk.bin output.txt 这条命令可以将NK image里面包含的模块及相关信息列成一个表并输出到output.txt里面,这样打开output.txt就可以看到里面包含了哪些模块,其中包括驱动,应用程序等。 3. viewbin -r nk.bin output.txt 打印记录信息到output.txt中。 - 在WinCE中有很多的环境变量,那么如何设置/删除/查询这些环境变量呢: 1. 查询环境变量:无论是在WinCE5.0还是WinCE6.0,当我们在PB里打开或者创建一个工程以后,我们可以在菜单中点 “build”-“Open Release Directory in Build Window”,然后会弹出命令行对话框。在对话框中输入“set”命令,然后回车,就会看到当前工程下所有的环境变量以及相应的值。 2. 添加环境变量:有两种方法添加环境变量,一种是点“build”-“Open Release Directory in Build Window”,再弹出的对话框中添加新的环境变量,例如:set WINCE_TEST=1。这句话的意思是添加一个环境变量叫WINCE_TEST,它的值为1。还有另一种方法添加环境变量,以WinCE6.0为例, 在“Solution Explorer”窗口中,右击工程的名字,然后选择“Properties”。在弹出的对话框中选择“Configuration Properties”-“Enviroment”,然后在右侧的窗口中添加环境变量。 3. 删除环境变量:同样两种方法,一种是点“build”-“Open Release Directory in Build Window”,再弹出的对话框中删除已经定义的环境变量,例如:set WINCE_TEST=。这句话的意思是删除环境变量叫WINCE_TEST。另一种删除环境变量的方法是在“Solution Explorer”窗口中,右击工程的名字,然后选择“Properties”。在弹出的对话框中选择“Configuration Properties”-“Enviroment”,然后在右侧的窗口中删除已经定义的环境变量。 4. 通过环境变量对代码进行选择性编译:对代码进行选择性编译如下: #ifdef NANDFLASH_ECC . #endif 对platform.reg进行选择性加载如下: IF NANDFLASH_ECC . ENDIF - 在WinCE下面,创建工程,然后编译是需要花很长时间的。当我们第一编译完工程以后,如果需要改我们的驱动或者BSP,我们是不需要重新编译整个工程的: 1. 如果更改了driver,以WinCE6.0为例,我们可以在菜单里面选择“build”-“Open Release Directory in Build Window” ,然后在弹出的命令行窗口中,通过dos命令切换到你要编译的driver的目录下面,然后运行“build”就可以了。也可以运行“build -c”会强制把所有的文件都编译一遍。被编译后的driver的dll会被自动拷贝到release目录下面,然后再切换的工程的release目录下 面,运行一下“make image”就可以了。 2. 如果改变了OAL部分的代码,同样用上面介绍的方法,需要注意的是,OAL部分可能包含多个文件夹,如果改变了OAL里面的代码,不要进入OAL里面的文 件夹去编译,一定要在OAL这层进行编译,这样OAL部分的lib,dll才会被重新编译并拷贝到release目录下面。 3. 如果改变了配置文件,比如config.bib,platform.reg文件,那么直接将这些文件拷贝到你的工程目录下面,然后运行一下“make image”就可以了。 4. 如果改变了eboot部分的代码,那按照步骤1的方法就可以了,可能你都不需要运行“make image”命令,因为可能你只需要eboot.bin或者eboot.nb0。 - 般在ARM架构的CPU上,物理地址都是统一编址的,寻址空间为4GB(32Bit CPU)。也就是说,针对一个ARM的处理器,它可以访问的物理空间是4GB。在WinCE中,ARM中的4GB物理地址空间将被映射为512MB的虚拟 内存空间。 OEMAddressTable就是一个4GB物理地址空间到WinCE Kernel中的512MB虚拟地址空间的映射表。 在BSP中,会定义OEMAddressTable来描述系统中可访问的物理空间及对应的虚拟地址空间,还有大小。这个表会在WinCE系统开始启 动的时候传给MMU,具体到BSP中应该是在OAL中的startup.s中,OEMAddressTable的起始地址会被放到r0寄存器中,然后就跳 转到KernelStart里面,KernelStart会用OEMAddressTable完成MMU得初始化。当WinCE启动以后,就只能访问虚拟 地址空间了。 举个例子,比如我们要开发一个Flash的驱动程序,那么首先我们知道这个flash所接的片选对应的物理起始地址是多少(假如是 0x60000000),大小是多少(假如是0x2000000)。如果我们要在WinCE中访问它,就必须为它定义一个虚拟地址(假如是 0x80000000),并添加到OEMAddressTable中,这样,我们才能在我们的驱动里面通过这个虚拟地址访问到flash。 虚拟地址不是随便定义的,WinCE中有规定,必须在0x80000000-0x9FFFFFFF。实际上WinCE创建了两套虚拟地址空间, 一个是0x80000000-0x9FFFFFFF,是Cache Enabled。另一个是0xA0000000-0xBFFFFFFF,是Cache Disabled。有啥区别呢: 如果我们访问的这个空间只是一段内存空间(比如SDRAM),那么就可以用Cache Enabled的空间来访问,这样存取数据的速度会比较快,因为数据被保存在Cache中。 如果我们访问的这个空间是一个外设的地址,那么我们就要使用Cached Disabled的空间来访问,这样才能使CPU与外设同步。 可能说得有点绕,我的经验就是:只要是SDRAM,可以用Cache Enabled空间访问。如果是寄存器,就用Cache Disabled空间访问。 如何定义OEMAddressTable呢,如果安装了WinCE5.0或者6.0,那么提供的参考BSP中都已经有定义了,在BSP目录下搜索“OEMAddressTable”,一看代码就明白了,这里重复一下,格式如下: 虚拟地址 物理地址 大小 比如: OEMAddressTable: dd 0x80000000 0x60000000 0x2000000 dd 0 0 0 上面这个表定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论