工具链 介绍部分 1b
工具链 本讲介绍 Symbian OS 的工具链和开发环境 强调的是提供工具的背景和目的 学习使用工具
构建工具(Build Tools) 理解bldmake, bld.inf 和 abld.bat基本用法 理解项目定义文件(MMP)的目的和典型语法 理解Symbian OS资源和文字本地化文件的角色
构建工具 为了构建Symbian OS程序,需要两个构建文件: 组件描述文件 (bld.inf) 项目定义文件 (projectname.mmp)
构建处理 Symbian OS 有自己平台独立的构建文件格式 bldmake 工具 由bld.inf 使用 以指示一个程序如何被构建 它包括关联的项目定义文件 产生一个批处理文件 - abld.bat
构建处理 bldmake 工具能够使用如下选项调用: bldmake bldfiles 产生 abld.bat 和关联的.make 文件 bldmake clean 删除所有由bldmake bldfiles 产生的文件 bldmake inf 显示 bld.inf 的基本语法 bldmake plat 显示支持的构建平台列表
构建处理 构建平台 当abld.bat被调用 最常使用的构建平台是: 表示各种目标平台和二进制格式 例如 —— 用来构建代码 特定的平台(模拟器或硬件)由一个参数指定 最常使用的构建平台是: WINSCW 创建一个运行在Windows模拟器上的x86格式的二进制文件 GCCE 或 ARMV5 创建运行在手机硬件上的二进制代码 - 分别使用GCCE和RVCT编译器构建
构建处理 当指定其中一个平台 bld.inf 的语法非常直接 最简单的例子是 以 abld.bat 命令的一个参数 针对该平台的makefile文件将被创建和执行 bld.inf 的语法非常直接 它的主要目的就是列出项目定义文件 以及构建工具必须在构建之前导出到另一个位置的文件 最简单的例子是 bld.inf 只列举了要构建的项目定义文件 在关键字 PRJ_MMPFILES 后指定
bld.inf 关键字 更加复杂的bld.inf 文件 使用如下关键字: PRJ_TESTMMPFILES 可以有很多部分组成 为测试代码指定一个或者多个项目定义文件 测试代码可以通过调用abld test build 而不是abld build构建
bld.inf 关键字 PRJ_EXPORTS PRJ_TESTEXPORTS 列举一系列要从项目目录复制到另一个目录的文件 通常是 \epoc32 下面的目录 可以调用abld export 来初始化导出操作 导出工作作为abld build 命令的一部分会自动执行 PRJ_TESTEXPORTS 可以调用abld test export 来初始化导出操作 导出工作作为abld test build 命令的一部分会自动执行
bld.inf 关键字 PRJ_PLATFORMS 如果没有指定 每个关键字 除了这些关键字 可用于列出组件支持的平台 abld 命令使用缺省的集合 每个关键字 可以以任何顺序指定多次 除了这些关键字 扩展 makefile文件可用于构建任务 它不是有构建产生的makefile文件提供的 例如调用特定的工具或转换工具
构建处理 当对bld.inf 做了改动 abld.bat 命令 最常见的用法如下.. 例如 – PRJ_EXPORTS下面添加了新的头文件 bldmake bldfiles 必须被重新调用 以产生新版本的abld.bat 以及它所使用的构建用makefile文件 abld.bat 命令 能用不同参数从命令行调用 最常见的用法如下..
abld.bat 命令行参数 abld build abld test build 组合许多其他参数 export, makefile, library, resource, target 和final 以构建bld.inf文件中PRJ_MMP-FILES 关键字下定义的MMP文件中指定的组件 abld test build 构建bld.inf 中PRJ_TESTMMPFILES 下指定的组件
abld.bat 命令行参数 abld makefile 使用Symbian OS makmake 工具 为bld.inf中指定的每个工程创建makefile文件 .这些makefile文件之后被abld 用 于执行不同阶段的组件构建 每次构建组件,这个命令都会被调用 makefile 文件总是要重新创建 无论对应的MMP文件是否修改
abld.bat 命令行参数 abld freeze abld clean abld reallyclean 冻结新的DLL导出函数到.def 文件中 abld clean 删除由对应的abld 命令创建的所有文件 编译时产生的所有中间文件 由linker产生的所有可执行文件和导入库 abld reallyclean 做 abld clean 要做的事情 还删除由abld export 导出的文件 以及由abld makefile 或 abld test 对应命令产生的makefile文件
abld.bat 命令行参数 每个命令 会针对bld.inf 中 PRJ_MMPFILES 下指定的所有工程都调用 通过使用abld XXX ,其中XXX 是命令 对于PRJ_TESTMMPFILES 中指定的测试工程 则使用abld test XXX
工程定义文件和MMP 文件语法 一个工程定义文件 这包括 工程定义文件中的每一行语句都以一个关键字开头... 是一个描述构建一个工程所需细节的文本文件 通常是指工程的MMP 文件 这包括 工程的源文件 导入库 由#include 预处理指令指定的被包含文件的位置 工程定义文件中的每一行语句都以一个关键字开头...
工程定义文件和MMP 文件语法 一个典型MMP文件中的主要关键字描述如下: TARGET ASDExample.exe TARGETTYPE exe UID 0 0xF1101100 CAPABILITY NONE SOURCEPATH ..\src SOURCE ASDExampleAppUi.cpp SOURCE ASDExampleDocument.cpp SOURCE ASDExampleApplication.cpp SOURCE ASDExampleView.cpp SYSTEMINCLUDE \epoc32\include USERINCLUDE ..\inc SOURCEPATH ..\data START RESOURCE ASDExample.rss TARGETPATH \resource\apps HEADER END START RESOURCE ASDExample_reg.rss TARGETPATH \private\10003A3F\apps // 通用的Symbian OS库 LIBRARY euser.lib efsrv.lib ... // 为清晰起见,忽略其他库文件
工程定义文件和MMP 文件语法 TARGET TARGETTYPE 最常用的Symbian OS 目标类型是 指定要构建的文件的名称 - ASDExample.exe TARGETTYPE 指要构建名称的类型 本例中,是一个可执行应用程序 (EXE) 最常用的Symbian OS 目标类型是 DLL EXE PLUGIN (ECOM 插件)
工程定义文件和MMP 文件语法 其他支持的TARGETTYPEs 包括 EPOCEXE 和 EXEDLL PDD – 物理设备驱动器 LDD – 逻辑设备驱动器 LIB - 静态库,其二进制代码直接包含在链接它的组件中 EXEXP - 导出函数的可执行文件 EPOCEXE 和 EXEDLL 在Symbian OS EKA1 中有时使用 在EKA2 中不再需要 因为它改进了进程模拟
工程定义文件和MMP 文件语法 UID 目标有三个UIDs 没有两个可执行文件 指定目标用以标识组件的三个唯一标识符的最后两个 因为它由构建工具根据TARGETTYPE 自动提供 没有两个可执行文件 具有相同的UID3 值 它们的UID3值都必须从Symbian申请 Symbian从一个中心数据库中分配
工程定义文件和MMP 文件语法 SECUREID SID 在没有指定UID3的MMP文件中 是本例中没有使用的另一个可选关键字 用以标识该可执行文件 SID 可以通过工程MMP文件中的SECUREID 语句指定 如果它没有指定,则用UID3值 在没有指定UID3的MMP文件中 SDI和UID3的值都用KNullUID (=0)
工程定义文件和MMP 文件语法 VENDORID 一个EXE 文件 也是本例中没有使用的可选关键字 Symbian OS v9.1 中新引入的 一个EXE 文件 可能包含一个厂商标识(VID) 由VENDORID 关键字指定 使用VID 来指明二进制代码的提供商 它不是必须使用的
工程定义文件和MMP 文件语法 CAPABILITY 为一个可执行文件分配的能力 如果没有使用CAPABILITY Symbian OS v9.1 中的新关键字 用于限制特定敏感系统API的使用 限制针对调用者,以一定的权限等级 为一个可执行文件分配的能力 列举在CAPABILITY 关键字后 如果没有使用CAPABILITY 赋予二进制代码的缺省能力是CAPABILITY NONE
工程定义文件和MMP 文件语法 可用能力的最大集合 一般而言 可以指定为CAPABILITY ALL 极少的组件会以这样的权限等级构建 对于具有高权限等级的代码 其最大能力集合会是 CAPABILITY ALL -TCB
工程定义文件和MMP 文件语法 SOURCEPATH 该关键字 指定SOURCE语句中列举的源文件和资源文件的位置 可以是相对位置 或者是绝对路径 该关键字 可以多次使用以指定不同的目录 也可以完全忽略,如果所有的源文件和MMP文件在同一个目录.
工程定义文件和MMP 文件语法 SYSTEMINCLUDE 所有全局头文件 指定代码中包含文件的目录 应该存储在\epoc32\include 中 或者其子目录中
工程定义文件和MMP 文件语法 USERINCLUDE 由USERINCLUDE 指定的目录 其他两个是: 指定代码中的包含文件所在目录 可以使用相对路径 或者绝对路径 由USERINCLUDE 指定的目录 只是搜索头文件的三个位置之一 其他两个是: 源文件目录 SYSTEMINCLUDE 目录.
工程定义文件和MMP 文件语法 START RESOURCE … END 这些关键字 一个应用程序可以有许多资源文件 指定一个资源文件 它包含了文字和用户接口元素的详情 这些关键字 替代了RESOURCE 语句 它在Symbian OS v9.1以前的MMP文件中使用 一个应用程序可以有许多资源文件 每个都由START RESOURCE … END 语句块分别指定 如果工程具有图形用户界面(GUI) 至少需要一个资源文件
工程定义文件和MMP 文件语法 START RESOURCE 资源文件 END 指示包含程序资源信息的语句块开始 或者在其他目录,该目录需要在SOURCEPATH语句中进行声明,并且该声明要直接在资 源文件之前 END 指示语句块结束
工程定义文件和MMP 文件语法 本例中 该文件包含 第二个块指定了ASDExample应用程序的注册资源文件 应用程序启动器(application launcher)需要的非本地化信息 START RESOURCE ASDExample_reg.rss TARGETPATH \private\10003A3F\apps END
工程定义文件和MMP 文件语法 例如 这些定义的位置 应用程序名称 UID 和属性 以及其他启动器需要的信息 应用程序显示在系统菜单中的标题 以及另外独立定义的图标——便于本地化 这些定义的位置 由注册文件提供
工程定义文件和MMP 文件语法 TARGETPATH 在本例中 第二个资源 指定编译后的资源(下一节介绍)的位置 ASDExample.rss 资源被编译 在\resource\apps 目录中产生输出 这是编译后资源文件的标准位置 第二个资源 注册文件被构建到 \private\10003a3f\apps 中 它是注册信息的标准位置
工程定义文件和MMP 文件语法 由C++代码编译得到的二进制文件的 但是 的构建位置 由关键字TARGETPATH 指定 在Symbian OS v9.1的安全平台中 所有的可执行代码必须从手机的\sys\bin 目录运行 所有现在TARGETPATH 关键字是多余的 除了构建资源文件到适当的位置
工程定义文件和MMP 文件语法 HEADER 本例中 是可选关键字 是一个资源头文件 (.rsg) 被创建到系统包含文件目录中 (\epoc32\include) 它允许C++代码使用特定资源的名称 在关联的资源文件中定义的 本例中 产生的头文件 用于访问ASDExample.rss中指定的资源 注册资源文件不产生资源头文件
工程定义文件和MMP 文件语法 LIBRARY 列举应用程序需要的导入库 不需要给出路径 每个库声明语句可以包含多个库,它们由空格隔开
工程定义文件和MMP 文件语法 EPOCSTACKSIZE 该选项应该小心使用 如果一个应用程序需要大的栈 该关键字用于将栈的大小增加 到关键字后面的十进制或者十六进制值 该选项应该小心使用 给一个应用程序分配额外的栈空间 减少其他应用程序的可用空间 如果一个应用程序需要大的栈 应该对它进行分析,以研究潜在的提高和优化的可能
工程定义文件和MMP 文件语法 EPOCHEAPSIZE 最小尺寸 是另一个关键字——本例中没有使用 它可用于指定一个进程初始堆的最小和最大尺寸 以十进制或十六进制值 缺省的最小值是4 KB ,最大值是 1 MB 最小尺寸 指定最初映射给堆使用的RAM 该进程然后可以根据需要获得更多的对内存,直到达到最大值 这些值应该是页面大小(4KB)的整倍数
工程定义文件和MMP 文件语法 EXPORTUNFROZEN 是一个可选关键字 由DLL使用,它没有为导出一个完整的.def 文件而冻结 导入库.lib被创建,并且所有的导出函数 包括未冻结的出现在导入库中
资源文件 资源文件 资源文件也可用于定义: 典型的用于指定GUI应用程序的用户界面元素 例如菜单条和对话框 它们也可以用于任何应用程序类型 Symbian OS应用程序的行为和功能 应用程序启动器所使用的应用程序的属性 应用程序使用的其他文字字符串和常量数据 例如对话框文字和错误信息
资源文件 为了对一组硬件保持平台独立性 资源被指定在 这种分离 资源说明是与每个目标平台的可执行文件分离的 直接可读的文本文件中 由Symbian OS资源编译器独立编译成单独的二进制文件 这种分离 减少了应用程序在不同硬件平台移植时所需要的代价
资源文件 资源说明使用的语法 这不仅便于翻译 提供了对本地化很好的支持 通过允许文字和图形资源的分离 而且可以创建多语言应用程序 而不需要重新编译主程序的代码 应用程序的提供(发布)包括单个可执行文件 和许多语言特定的二进制资源文件
资源文件 资源文件 然后它们独自被编译 或者作为标准构建工具链的部分 以Symbian OS特定的语法 写成文本文件 用命令行资源构建工具 epocrc 该工具将资源文件传递给C++预处理器 然后用Symbina OS资源编译器rcomp编译它 或者作为标准构建工具链的部分 从命令行或IDE编译
资源文件 资源文件 例如 资源文件的名字具有后缀名.rss 包含许多元素,它们都由一个Symbian OS资源关键字开头 RESOURCE STRUCT ENUM 资源文件的名字具有后缀名.rss 在.rss文件上调用资源编译器时 它产生两个输出...
资源文件 资源编译器产生两个输出 .rsg 文件 二进制资源文件.rsc 一个位于\epoc32\include 的.rsg 头文件 ——如果MMP在START RESOURCE … END 块中指定了HEADER 关键字 .rsg 文件 包含定义在.rss 文件中的每个资源的#define 声明 头文件可以被C++应用程序代码使用 以访问二进制资源文件中的元素 通过用#include 预处理指令将其包含在代码中
资源文件 本地文件是一个文本文件,其命名为 其他的Symbian OS 的头文件类型 .hrh .rh UIQ平台的后缀名为 .rls S60平台的后缀名为 .loc 直接包含在资源文件中 其他的Symbian OS 的头文件类型 可以用于资源文件的包括 .hrh 可以在C++和资源文件中共享的头文件 .rh 仅仅由资源文件使用的头文件
硬件构建 理解ARM C++ EABI是一种为嵌入式应用程序开发优化的工业标准 了解RVCT和GCCE编译器的基本信息,它们用于目标硬件构建 理解AMV5同时支持32位ARM和16位THUMB指令集,了解速度和大小的区别
EABI 标准 Symbian OS 运行在本地ARM 处理器上 该标准被设计成 代码必须由支持嵌入式应用程序接口(Embedded Application Binary Interface, EABI)的编译器构建 这是一个运行在ARM环境的二进制代码接口标准 它使得由不同符合该标准的编译器产生二进制代码进行互操作 该标准被设计成 具有在内存使用和数据访问时间方面非常高效 提供不同厂商的编译器之间的互用性
EABI 标准 Symbian OS 构建工具定义本地构建目标,它要么调用: RVCT 用于 一个适合版本的GNU 编译器集合 (GCC), 其目标在Symbian OS构建工具中被称为 GCCE 或者ARM’s RealView 编译器工具 RVCT 2.2, 其目标在Symbian OS构建工具中被称 为ARMV5 RVCT 用于 Symbian 授权使用者如 Nokia 和 Sony Ericsson 以构建它们手机产品的ROM GCCE 则由绝大多数的Symbian 开发者使用 它随着基于Symbian OS v9.1的任何手机产品的SDK一起交付 它也可以从Internet上直接下载
GCCE 目标编译器 GCCE 是开源的GNU C++编译器的一个版本 使用GCCE 可以通过 GCCE 构建目标 它只用于构建应用程序 不能用于编译整个OS 使用GCCE 可以通过 命令行 或者从开发IDE环境,如CodeWarrior 或 Carbide.c++中调用 GCCE 构建目标 使用和ARMV5目标一样的.def 文件格式 构建工具缺省在工程的\EABI 目录中查找.def 文件
GCCE 目标编译器 GCCE 编译器是非常严格的 在检查源代码是否符合ANSI C++ 标准方面 一些源代码以前由较不严格的编译器编译的(例如RCVT2.1),可能不再能够编译
RVCT 目标编译器 RVCT 被Symbian用于编译Symbian OS 像GCCE 一样 以及被授权的厂商用于开发基于ROM的代码 相对于其他类似工具,它能够提供最好的性能和最小的代码 它必须单独购买 像GCCE 一样 RVCT 要么从命令行使用 要么从开发IDE环境,如CodeWarrior 或 Carbide.c++中调用
ARM 和 THUMB 所有现在的Symbian OS 智能手机 它有两种指令集: ARM 指令集较快 THUMB 指令集则更精简,但是较慢 由一个指令集编译的代码可以和由另一种指令集编译的代码进行互操作 ARM 指令集较快 每个指令使用更多的内存 THUMB 指令集则更精简,但是较慢 因为需要更多的指令来执行相同的操作
ARM 和 THUMB 在构建工程时,构建工具应用这样的策略: 内核一侧的代码构建成ARM 其他代码(用户一侧)则构建成THUMB 所有代码都构建到\epoc32\release\的ARMv5子目录下
ARM 和 THUMB 有很多途径来越过该策略将用户一侧代码构成为ARM格式: bld.inf 文件中限定词BUILD_AS_ARM 可以用来指示ARMV5的构建版本不是THUMB 指令集 而是显式的指定为ARM指令集 为了指示一个工程总应构架成ARM 在MMP文件中应该指定关键字ALWAYS_BUILD_AS_ARM PRJ_MMPFILES ASDExample.mmp BUILD_AS_ARM
安装应用程序到手机硬件上 认识用于创建SIS安装文件的包文件格式
安装应用程序到手机硬件上 不像Windows 模拟器 将代码部署到手机硬件的唯一方法 为了创建一个SIS 文件 打包文件包括 其中二进制文件只是简单的拷贝以用于测试 将代码部署到手机硬件的唯一方法 是由软件安装器从安装包即SIS文件(后缀为.sis)中读入 为了创建一个SIS 文件 要使用打包文件 (.pkg) 来指定应用程序关联的文件和原数据 打包文件会传递给SIS 文件创建工具 (MakeSIS) 打包文件包括 应用程序需要的一组文件、规则、选项和依赖关系的列表
安装应用程序到手机硬件上 基于PC的MakeSIS 工具 SIS 文件包含 不是大多数手持设备厂商 读入.pkg 打包文件并产生一个SIS 文件 SIS 文件包含 Symbian OS软件安装器安装一个应用程序到手机上所需要的所有信息 除了数字签名 不是大多数手持设备厂商 会要求在应用程序被安装到手机上之前安装包应当进行数据签名
安装应用程序到手机硬件上 下面是应用程序ASDExample 的安装包例子 在.pkg 文件中,有分号开始的行是注释行,并且空行会被忽略 Continued ... ; ASDExample.pkg; ; Languages - English and French &EN, FR ; List of localized vendor names %{"SymbianPress", "SymbianPress"} ; The non-localized, globally unique vendor name :"SymbianPress” ; Package header #{"ASDExample"}, {"ASDExample"}, (0xF1101100), 1, 0, 0, TYPE=SA ; ProductID for UIQ 3.0 [0x101F6300], 3, 0, 0, {"UIQ30ProductID"}
安装应用程序到手机硬件上 ; Files to install for my directory application ; Paths are relative or fully qualified {"english_info.txt" "french_info.txt"} - "!:\Documents\ASDExampleGuide.txt” "..\epoc32\release\gcce\urel\ASDExample.exe"- "!:\sys\bin\ASDExample.exe” "..\epoc32\data\Z\Resource\Apps\ASDExample.rsc"- "!:\Resource\Apps\ASDExample.rsc” "..\epoc32\data\z\Private\10003a3f\Apps\ASDExample_reg.rsc"- "!:\private\10003a3f\import\apps\ASDExample_reg.rsc” IF tkeyboard=1 ; phone has keypad only "keypad_shortcut_config.txt”-"!:\private\F1101100\shortcut.txt” ELSEIF tkeyboard=2 ; phone has full QWERTY keyboard "keyboard_shortcut_config.txt"-"!:\private\F1101100\shortcut.txt” ELSE ; Display a "No shortcuts are available for this phone" message "noshortcut.txt"-"", FILETEXT, TEXTCONTINUE ENDIF "readme.txt"-"", FILETEXT, TEXTCONTINUE
安装应用程序到手机硬件上 以& 开始的行是语言部分 本例中 由% 的部分: 它列出应用程序所支持的所有语言 使用两个字母的代码, 如同Symbian OS Library 中语言列表描述的那样 本例中 ASDExample.exe 应用程序支持英语(EN) 和法语(FR) 由% 的部分: 是厂商本地化和非本地化的名称 本地化名称被用于对话框中,显示给用户 而非本地化厂商名称则由软件安装器内部使用
安装应用程序到手机硬件上 以# 开头的行是包的头部 打包类型指明了安装的类型 本例中使用TYPE=SISAPP 本行提供了应用程序的名称,它将在安装对话框中显示 应用程序的UID (如同MMP 文件中指定的), 版本信息和安装包的类型 打包类型指明了安装的类型 因为不同的类型在文件如何安装和卸载时有不同的规则 本例中使用TYPE=SISAPP 也可以使用缩写 SA 或者忽略,因为它是缺省的 该类型表示组件作为一个应用程序安装 其他类型包含补丁类型和部分更新类型
安装应用程序到手机硬件上 以一个包含在中括号中十六进制UID 开头的行是必需的 本例中 它用于确保只有为特定手机硬件设计和测试的应用程序才能安装 重要的是值是十六进制的UID [0x101F6300] 以及引号中的串 (UIQ30ProductID) 本例中 限制ASDExample.exe 只能安装到UIQ 3.0 的手机上 只能安装到S60 3.0平台的的对应描述是 [0x101F7961], 0, 0, 0, {"Series60ProductID"}
安装应用程序到手机硬件上 条件语句块 (IF … ELSEIF … ELSE … END) 本例中 可用于对安装进行一定的控制 条件块在安装时测试 TKeyboard 属性(由 HalData::TAttribute获得) 根据该手机是QWERTY键盘还是简单数字键盘,决定安装一个快捷配置文件
安装应用程序到手机硬件上 如果TKeyboard 属性都不是期望的值 (=1 或 =2) 显示指令包含一些选项: 一个文本文件(noshortcut.txt)的内容就在安装时显示给用户 因为它不会安装到手机上,没有指定给它的目标目录 显示指令包含一些选项: FILETEXT 指示在安装时显示文件 其他选项包含运行可执行文件或者在指定目录创建空文件 TEXTCONTINUE 提供了一个继续按钮,它将关闭文本显示然后继续安装 其他选项包括强制安装退出或者为用户提供选择以退出安装
安装应用程序到手机硬件上 这种文件显示 本例 打包文件的剩余部分列出了要安装的文件 可用于显示基本信息 例如在安装时显示许可证协议 也利用它显示了一个readme.txt 文件,在安装ASDExample.exe时 打包文件的剩余部分列出了要安装的文件 在连字符之前的是PC上的文件名 而后面的是手机上的目标目录
安装应用程序到手机硬件上 推荐 如果磁盘被硬编码 以 { 开头的行指示了一个文件列表 在目标文件名的盘符号前指定一个感叹号 它意味着用户会看见一个对话框,让它选择在那个盘安装应用程序 如果磁盘被硬编码 用户可能在该盘没有足够的空间了,这将使得安装该程序变得不可能 最好让用户选择安装的磁盘 以 { 开头的行指示了一个文件列表 其中只有一个文件会被安装 这取决与用户安装时所选定的语言
Symbian OS 模拟器 理解Symbian OS的Windows 模拟器的目的 认识模拟器上和目标硬件上运行代码的不同
Symbian OS 模拟器 Symbian OS 模拟器是一个应用程序 模拟器使Symbian OS 模拟器运行在单个进程中 调用EPOC.EXE ,它在PC上模拟器手机硬件 它实际上是Symbian OS内核部分在win32平台的一个移植 模拟器使Symbian OS 软件开发在其早期阶段是完全基于PC的 最终的开发阶段将需要使用手机硬件 模拟器运行在单个进程中 这意味着在Windows上,每个Symbian OS进程实际上是以一个DLL加载的 并运行在Win模拟器进程中的一个单独线程中
使用Symbian OS 模拟器的原因 模拟器在开发的早期阶段节省时间 例如,如果代码发生了致命错误 因为代码开发IDE例如CodeWarrior 或 Carbide.c++ 能被用于调试代码,解决绝大多数的初始bug和问题 例如,如果代码发生了致命错误 调试器(debugger) 能提供全面的信息以诊断引起它的错误情景
使用Symbian OS 模拟器的原因 对于硬件测试 这可能是很耗时间的 一个安装文件必须创建并且必要时进行签名 传输到手机上并予以安装 在开发的早期阶段代码的改动会很频繁 模拟器不需要代码被正式的安装 这使得开发过程更快
使用Symbian OS 模拟器的原因 对于模拟器构建,系统也会写输出到文件中 文件位于 如果发生了致命异常,可能需要检查它以获取相关信息 以检查系统警告,如平台安装冲突等 文件位于 Windows环境变量TEMP 所关联的目录 其名称为epocwind.out (%TEMP%\epocwind.out)
使用Symbian OS 模拟器的原因 模拟器可以进行配置 对于正常使用,epoc.ini 但是它可用于—— 例如 该文件保存在\epoc32\data 中,所有模拟器配置文件都在该目录 对于正常使用,epoc.ini 不需要修改 但是它可用于—— 例如 添加定制化的虚拟磁盘 改变堆的大小 或者映射模拟器的面板区域到虚拟按键 这允许模拟手机硬件的按键,例如导航键
模拟器与手机硬件的区别 模拟器编程环境 一些代码可能成功运行在模拟器上,但是在真机上却会失败 倾向于比运行在手机上的本地代码的环境的更加宽松 例如.. 使用非常量静态变量的代码对模拟器能够编译通过,但是不能对ARM平台进行编译 一些代码可能成功运行在模拟器上,但是在真机上却会失败 例如... 在Windows模拟器上,一个进程可能会访问另一个进程的内存而不会引起内存异常 但是在硬件上,内存保护由Symbian OS内存管理负责执行,同样的代码则会产生一个 内存异常
模拟器与手机硬件的区别 Symbian 已经尝试确保Windows 模拟器 但是,也有一些区别 底层硬件是不同的 因为这个原因 提供对运行在目标硬件上的Symbian OS尽量忠实的模拟 模拟器具有进程和线程调度,它跟真的Symbian OS手机硬件上的工作几乎是相同的 但是,也有一些区别 例如,真机的内存模型与模拟器上的就有区别 底层硬件是不同的 不可能在模拟器和真机上使用相同的设备驱动器和硬件抽象层代码 因为这个原因 模拟器不能用于低级编程,例如编写设备驱动器
模拟器与手机硬件的区别 模拟器和硬件的其他区别包括 引导程序: 文件系统支持: 在真机上,第一个运行的Symbian OS程序是引导程序(bootstrap) 它在启动内核之前执行各种硬件初始化任务 模拟器不需要执行这样的任务,只是简单的启动内核 引导过程的其他部分在模拟器和目标硬件上是相似的 文件系统支持: 模拟器可以模拟许多文件系统和磁盘类型 但是模拟磁盘的性能和大小都不会与真机的精确相同
模拟器与手机硬件的区别 浮点行为: Symbian 提供对IEEE-754 单精度和双精度浮点值的访问 通过类型TReal32 (C++ 浮点类型) 和TReal64 (C++ 双精度类型) 模拟器是实现在Intel x86处理器上的,它具有浮点支持硬件——这种支持被用到了 目标硬件可能有,也可能没有浮点硬件支持 在没有浮点硬件时——浮点计算由软件执行 这样,使用浮点算法的代码在模拟器和硬件上的版本可能会有显著的性能差别
模拟器与手机硬件的区别 串口: 模拟器通过Windows串口提供串口模拟 这通常能满足大多数目的T,但是不能提供与真实设备一样的性能
模拟器与手机硬件的区别 定时器: 在所有平台上,包括模拟器,标准的定时器精度是1/64秒 也可以通过User::AfterHighRes() 和 RTimer::HighRes()等方法获得精度更加 的定时器 这在参考硬件上是1毫秒的精度 缺省的在模拟器上是5毫秒 但是它可以通过设置定时器周期(以毫秒为单位)予以修改 利用配置文件epoc.ini 中的TimerResolution 变量
模拟器与手机硬件的区别 机器字对齐: 手机硬件使用的是32位RISC架构 要求32位数值必须与32位机器字边界对齐 即是它们的地址必须是四的倍数否则会产生访问冲突 这于模拟器上的情况不一样,在模拟器上代码能够成功运行
模拟器与手机硬件的区别 像素大小: USB 支持: Windows模拟器和手机硬件上,像素大小有显著区别 因此,文字和图形在手机上显示的情况与模拟器上不一样 USB 支持: Symbian OS 在手机硬件上提供USB客户端支持 但是模拟器上没有这样的支持
模拟器文件系统 手机上的文件系统映射到PC上如下所示: 模拟器的配置文件可以修改 内部可写磁盘(c:) 通常映射到 \epoc32\ winscw\c ROM 映射到 \epoc32\release\winscw\udeb\z ,它用于调试构建(debug build) 而\epoc32\release\winscw\udeb\z 则用于发布构建(release build) 模拟器的配置文件可以修改 如果需要,可以添加其他虚拟磁盘 标准磁盘也可以根据需要映射到其他位置
模拟器文件系统 在文件系统映射中存在一个意外 在手机上 在模拟器上 即可执行文件的位置 所有可执行文件都存储在\sys\bin 目录中 可执行文件是从它们被构建的地方加载的 即\epoc32\release\wins\udeb 或 \epoc32\release\wins\urel 目录
模拟器文件系统 模拟器也可以进行设置 这可以用于测试一个应用程序如何行动 以便它的行为可以像存在一个可移动介质一样 例如 ——- 存储棒或MMC 这可以用于测试一个应用程序如何行动 当在卡上读写数据时 或者当卡被拔出或插入时
模拟器文件系统 也可以模拟It is possible to emulate MMC模拟不会调用对任何硬件接口的访问 用户打开或关闭可移动存储介质上的盖 替换或者移除存储卡 为一个模拟的存储卡赋密码 MMC模拟不会调用对任何硬件接口的访问 相反,每个模拟存储卡的内存区域被表现为一个文件 是Windows系统临时目录中的一个.bin 类型的文件
工具链 构建工具 硬件构建 安装应用程序到手机硬件上 Symbian OS 模拟器