WINCE--编译环境一二三(转摘)

2024-03-27 14:38

本文主要是介绍WINCE--编译环境一二三(转摘),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

WINCE--编译环境一二三(转摘)

在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%\Public\CEBASE\OAK\Misc\Cesysgen.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中,可以在"\WINCE600\PUBLIC\COMMON\OAK\BIN\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

上面这个表定义了一个flash的物理地址到虚拟地址的映射,物理地址是0x60000000,虚拟地址是0x80000000,大小是32MB。OEMAddressTable最后必须以0结尾,表示OEMAddressTable结束

这篇关于WINCE--编译环境一二三(转摘)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/852431

相关文章

ESP32 esp-idf esp-adf环境安装及.a库创建与编译

简介 ESP32 功能丰富的 Wi-Fi & 蓝牙 MCU, 适用于多样的物联网应用。使用freertos操作系统。 ESP-IDF 官方物联网开发框架。 ESP-ADF 官方音频开发框架。 文档参照 https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/zh-cn/latest/get-started/index

C++工程编译链接错误汇总VisualStudio

目录 一些小的知识点 make工具 可以使用windows下的事件查看器崩溃的地方 dumpbin工具查看dll是32位还是64位的 _MSC_VER .cc 和.cpp 【VC++目录中的包含目录】 vs 【C/C++常规中的附加包含目录】——头文件所在目录如何怎么添加,添加了以后搜索头文件就会到这些个路径下搜索了 include<> 和 include"" WinMain 和

UnrealScriptIDE调试环境部署

先安装vs2010   再安装VSIsoShell.exe, 下载地址 https://pan.baidu.com/s/10kPNUuDGTbWXbz7Nos-1WA       fd3t   最后安装unside,下载地址 https://archive.codeplex.com/?p=uside  安装中间有一步选择Binary文件夹要选对路径。   安装好以后,启动 UDKDe

C/C++的编译和链接过程

目录 从源文件生成可执行文件(书中第2章) 1.Preprocessing预处理——预处理器cpp 2.Compilation编译——编译器cll ps:vs中优化选项设置 3.Assembly汇编——汇编器as ps:vs中汇编输出文件设置 4.Linking链接——链接器ld 符号 模块,库 链接过程——链接器 链接过程 1.简单链接的例子 2.链接过程 3.地址和

Windwos +vs 2022 编译openssl 1.0.2 库

一 前言 先说 结论,编译64位报错,查了一圈没找到解决方案,最后换了32位的。 使用qt访问web接口,因为是https,没有openssl库会报错 QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());if (reply){if (reply->error() == QNetworkReply::NoError

API-环境对象

学习目标: 掌握环境对象 学习内容: 环境对象作用 环境对象: 指的是函数内部特殊的变量this,它代表着当前函数运行时所处的环境。 作用: 弄清楚this的指向,可以让我们代码更简洁。 函数的调用方式不同,this指代的对象也不同。【谁调用,this就是谁】是判断this指向的粗略规则。直接调用函数,其实相当于是window.函数,所以this指代window。

Pycharm配置conda环境(解决新版本无法识别可执行文件问题)

引言: 很多小伙伴在下载最新版本的pycharm或者更新到最新版本后为项目配置conda环境的时候,发现文件夹目录中无法显示可执行文件(一般为python.exe),以下就是本人遇到该问题后试验和解决该问题的一些方法和思路。 一般遇到该问题的人群有两种,一种是刚入门对pycharm进行conda环境配置的小白(例如我),不熟悉相关环境配置的操作和过程,还有一种是入坑pycharm有段时间的老手

青龙面板2.9之Cdle傻妞机器人编译教程

看到有的朋友对傻妞机器人感兴趣,这里写一下傻妞机器人的编译教程。 第一步,这里以linux amd64为例,去官网下载安装go语言安装包: 第二步,输入下方指令 cd /usr/local && wget https://golang.google.cn/dl/go1.16.7.linux-amd64.tar.gz -O go1.16.7.linux-amd64.tar.gz

Redis-在springboot环境下执行lua脚本

文章目录 1、什么lua2、创建SpringBoot工程3、引入相关依赖4、创建LUA脚本5、创建配置类6、创建启动类7、创建测试类 1、什么lua “Lua”的英文全称是“Lightweight Userdata Abstraction Layer”,意思是“轻量级用户数据抽象层”。 2、创建SpringBoot工程 3、引入相关依赖 <?xml version

cocospod 搭建环境和使用

iOS 最新版 CocoaPods 的安装流程 1.移除现有Ruby默认源 $gem sources --remove https://rubygems.org/ 2.使用新的源 $gem sources -a https://ruby.taobao.org/ 3.验证新源是否替换成功 $gem sources -l 4.安装CocoaPods (1)  $sudo gem