嵌入式系统基础教程第12讲第6章ARM开发工具.ppt

上传人:本田雅阁 文档编号:3305073 上传时间:2019-08-10 格式:PPT 页数:146 大小:1,019.06KB
返回 下载 相关 举报
嵌入式系统基础教程第12讲第6章ARM开发工具.ppt_第1页
第1页 / 共146页
嵌入式系统基础教程第12讲第6章ARM开发工具.ppt_第2页
第2页 / 共146页
嵌入式系统基础教程第12讲第6章ARM开发工具.ppt_第3页
第3页 / 共146页
嵌入式系统基础教程第12讲第6章ARM开发工具.ppt_第4页
第4页 / 共146页
嵌入式系统基础教程第12讲第6章ARM开发工具.ppt_第5页
第5页 / 共146页
点击查看更多>>
资源描述

《嵌入式系统基础教程第12讲第6章ARM开发工具.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统基础教程第12讲第6章ARM开发工具.ppt(146页珍藏版)》请在三一文库上搜索。

1、嵌入式系统原理与开发,第12讲 南京大学计算机系 俞建新主讲,2008年春季,2008年6月28日,南京大学计算机系,2,第6章 ARM开发工具,本章主要介绍以下内容: ARM开发工具概述 ARM映像文件格式 ADS基本工具与用法 ADS生成应用程序及调试的实例 RealView Development Suite(RVDS)介绍 Linux环境下GNU ARM工具链介绍,2008年6月28日,南京大学计算机系,3,6.1 ARM开发工具概述,ARM开发工具根据功能的不同,可分为编译器、汇编器、连接器、调试器、嵌入式实时操作系统、函数库、评估板、JTAG仿真器、在线仿真器等。 目前世界上约有四

2、十多家公司提供以上不同类别的产品。 在ARM开发工具中,ARM公司自己开发的套件工具功能最全面,最先进,最满足ARM规范,是学习和掌握的重点。,2008年6月28日,南京大学计算机系,4,ARM嵌入式开发工具分类,单一工具与套件工具 SkyEye Armulator ADS RVDS 商用操作系统IDE工具/开源操作系统IED工具 ARM+VxWorks和Tornado ARM+Linux和VMware Windows平台和Linux平台 通用工具和公司内部专用工具,2008年6月28日,南京大学计算机系,5,ADS、SDT和GNU,在Windows环境中,其代表性的工具产品是ARM公司的SD

3、T(Software Development Toolkit)、ADS和新推出的RVDS。 在Linux环境中,主要是GNU开发工具,因这些工具互相兼容、前后贯穿、彼此配合,通常又称作GNU/Linux ARM工具链(GUN/Linux ARM tool chain)或者 GNU/Linux ARM交叉工具链(GUN/Linux ARM cross tool chain)。,2008年6月28日,南京大学计算机系,6,6.2 ARM映像文件格式,什么是映像文件 映像文件(image)是一个计算机上的可执行文件,在执行之前被加载到计算机的存储器中。通常,一个映像文件中包含多个线程。,2008年6

4、月28日,南京大学计算机系,7,ELF目标文件,ARM集成开发环境中的各种源文件(包括汇编程序、C程序以及C+程序)经过ARM编译器编译之后,生成ELF格式的目标文件。 ELF目标文件的文件名后缀是.o。,2008年6月28日,南京大学计算机系,8,ARM映像文件.axf,目标文件.o和相应的C/C+运行时库.a经过ARM连接器连接后,生成.axf映像文件。.axf映像文件也是ELF格式的,只是包含特定格式的调试信息,可在开发板上调试运行。,2008年6月28日,南京大学计算机系,9,不含调试信息的映像文件,映像文件调试结束之后,可以使用fromelf工具将映像文件中的调试信息和注释过滤掉,生

5、成二进制的可加载映像文件(通常带后缀.bin,也可以无后缀)。可加载映像文件可写入嵌入式设备的ROM中,在加电启动过程执行。,2008年6月28日,南京大学计算机系,10,6.2.1 ELF文件格式简介,ELF(Executable and Linking Format)格式是可执行连接文件格式,是Unix系统实验室(USL)作为一种应用程序二进制(文件)接口(ABI, Application Binary Interface)而开发和发布的。工具接口标准委员会(TIS)选择了正在发展中的ELF标准作为工作在32位Intel体系结构上不同操作系统之间可移植的二进制文件格式。,2008年6月28

6、日,南京大学计算机系,11,三种ELF文件类型,ELF文件是x86 Linux下的一种常用目标文件格式,也是ARM处理器的常用目标文件格式。它有三种主要类型: (1)适于连接的可重定位文件(relocatable file),通常后缀为.o。 (2)适于执行的可执行文件(execuable file),规定了如何创建一个程序的进程映像,加载到内存执行。 (3)共享目标文件(shared object file),Unix/Linux环境下的后缀为.so,ADS环境下的后缀为.a。,2008年6月28日,南京大学计算机系,12,ELF文件结构,ELF文件具有双重特性: ARM连接器把ELF文件当

7、作由节头部表(section header table)描述的一组逻辑节(section),而系统加载器则把ELF文件当作由程序头部表(program header table)描述的一组代码段(segment)。 在一个代码段通常几个节组成。,2008年6月28日,南京大学计算机系,13,ELF文件格式的两种视图(图6-1),2008年6月28日,南京大学计算机系,14,连接视图和执行视图,由于ELF文件既可以是可重定位的目标文件,又可以是可执行文件。这样我们可以从两个视图来观察ELF文件的主体数据结构。参看上一幅幻灯片视图(图6-1)。 其中的(a)分图给出的视图是连接视图,(b)分图 给

8、出的视图是执行视图。,2008年6月28日,南京大学计算机系,15,ELF 头部结构,每一个ELF文件都是以一个ELF header结构字段开始。ELF header结构字段的定义在下一页幻灯片视图给出,该结构为52个字节长,由14个字段组成。,2008年6月28日,南京大学计算机系,16,ELF文件中的结构信息(图6-2),2008年6月28日,南京大学计算机系,17,ELF文件头部结构14个字段说明-1,e_ident字段是ELF文件的标识信息,占16个字节;位于ELF header结构的最前面;该字段的头4个字节是用来标识ELF文件的幻数或者魔幻数(magic number),其内容是0

9、x7F454C46,也就是0x7F+E+L+F。,2008年6月28日,南京大学计算机系,18,ELF文件头部结构14个字段说明-2,接下来的字节是class+data+version+pad。如果是ARM的ELF文件,设定e_identEI_CLASS为ELFCLASS32;并且设定e_identEI_DATA为ELFCLASS2LSB(小端序),或者ELFCLASS2MSB(大端序)。注意:由目标文件决定的目标端序将提交给连接器,如果端序提交不正确将会导致连接器报错。,2008年6月28日,南京大学计算机系,19,ELF文件头部结构14个字段说明-3,e_type字段(2字节)标识目标文件

10、的类型,例如:可重定位文件、可执行文件、共享文件等; e_machine字段(2字节)标识目标文件的目标主机体系结构,例如:3标识Intel 80386处理器,8表示MIPS RS3000处理器;如果是ARM的ELF文件,设定为EM_ARM,取值为40。 e_version字段(4字节)标识目标文件版本号;取值:1当前版本,0非法版本。 累计24bytes,2008年6月28日,南京大学计算机系,20,ELF文件头部结构14个字段说明-4,e_entry字段(4字节)标识可执行文件执行时的入口地址(不可执行文件的入口地址为0); e_phoff字段(4字节)标识程序头部表在文件中的字节偏移量(

11、无程序头部表时为0); e_shoff字段(4字节)标识节头部表在文件中的位置(无节头部表时为0); 累计36bytes,2008年6月28日,南京大学计算机系,21,ELF文件头部结构14个字段说明-5,e_flags字段(4字节)保存了与特定处理器有关的标志位; e_ehsize字段(2字节)保存了ELF头部的字节数大小; e_phentsize字段(2字节)保存了程序头部表表项字节数; e_phnum字段(2字节)保存了程序头部表包含的表项数目; 累计46Bytes,2008年6月28日,南京大学计算机系,22,ELF文件头部结构14个字段说明-6,e_shentsize字段(2字节)保

12、存了节头部表表项字节数; e_shnum字段(2字节)保存了节头部表包含的表项数目; e_shstmdx字段(2字节)保存了节名称字符串表表项在节头部表中的索引。 累计52Bytes,2008年6月28日,南京大学计算机系,23,节头部表和程序头部表的数据结构,ELF文件的节头部表和程序头部表的数据结构也在图6-2中给出。图6-2(b)给出了连接视图的节头部表的数据结构,图6-2(c)给出了执行视图的程序头部表的数据结构。,2008年6月28日,南京大学计算机系,24,程序头部表的作用,程序头部表(Program Header Table),如果存在的话,告诉系统如何创建进程映像。 用来构造进

13、程映像的目标文件必须具有程序头部表,可重定位文件不需要这个表。,2008年6月28日,南京大学计算机系,25,节区头部表的作用,节区头部表(Section Heade Table)包含了描述文件节区的信息,每个节区在表中都有一项,每一项给出诸如节区名称、节区大小这类信息。 用于链接的目标文件必须包含节区头部表,其他目标文件可以有,也可以没有这个表。,2008年6月28日,南京大学计算机系,26,6.2.2 ARM映像文件的组成,ARM处理器的映像文件是.axf文件或者.bin文件。 .axf文件和.bin文件的区别之处在于前者包含有调试信息和注释信息,后者没有。编译器输出的ARM映像文件以.a

14、xf文件为主。通过fromelf工具,可以把AXF文件转换成.bin文件。实际下载到系统板的映像文件多数是.bin格式文件。,2008年6月28日,南京大学计算机系,27,.axf文件是什么样的映像文件?,.axf文件是一种满足DWARF V2.0调试文件格式的ELF文件,而DWARF调试文件格式又是UNIX操作系统的调试文件格式。DWARF即Debug With Arbitrary Record Format(带任意记录格式的调试)。目前DWARF的最高版本是V3.0。,2008年6月28日,南京大学计算机系,28,如何阅读.axf文件里面的内容,Linux下使用工具objdump可以打开和

15、阅读.axf文件 有关objdump命令的格式说明如下: objdump - 显示二进制文件信息 objdump -a -b bfdname | -target=bfdname -C -debugging -d -D -disassemble-zeroes -EB|-EL|-endian=big|little -f -h -i|-info -j section | -section=section -l -m machine -prefix-addresses -r -R -s|-full-contents -S|-source -no-show-raw-insn -stabs -t -T -

16、x -start-address=address -stop-address=address -adjust-vma=offset -version -help objfile.,2008年6月28日,南京大学计算机系,29,.axf文件的内部数据举例,在教材的第184页给出了.axf文件的内部数据举例。,2008年6月28日,南京大学计算机系,30,ELF映像格式,Linux编译器GCC输出文件格式就是符合DWARF V2.0调试规范的ELF映像格式,Windows平台集成开发环境ADS1.2输出的也是符合DWARF V2.0调试规范的ELF映像格式,即AXF格式文件。参看图6-3。,200

17、8年6月28日,南京大学计算机系,31,ADS 1.2 集成开发环境的文件处理流程 (图6-3),2008年6月28日,南京大学计算机系,32,三种编译连接方式,在Windows环境下,可以有三种方式完成图6-3中的文件处理: (1)行命令方式; (2)类似Makefile性质的批命令程序,例如:make.bat。批命令实质是一系列单步行命令的顺序集中执行。该程序是文本文件,其内容构成是行命令方式的所有命令按照执行顺序排列; (3)ADS开发套件。,2008年6月28日,南京大学计算机系,33,ARM可执行ELF文件,ARM可执行ELF文件的内部结构简单描述如表6-1所示。注意:只有ELF头信

18、息是固定的,其余部分的实际顺序可能有所不同。ELF文件所有其余部分的位置由ELF头信息、程序程序头部表和节头部表定义。,2008年6月28日,南京大学计算机系,34,ARM处理器的可执行ELF文件的概念结构 (表6-1),2008年6月28日,南京大学计算机系,35,ARM的ELF文件的段(Segment)结构,ARM的ELF文件有三种段结构:Text 、Data和BSS。 Text段包含了可执行的代码。Data段包含了经过初始化的可读可写的可执行数据。BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,它是英文Block Started by Symbo

19、l的简称。BSS段属于静态内存分配,存放了未初始化的全局C变量。,2008年6月28日,南京大学计算机系,36,ARM的ELF文件的节(Section)结构,在ELF文件规范中,一个可执行目标文件能够包含一个节头部表,节头部表对文件中的节进行定义。在ARM的ELF文件中,所有的可执行代码至少具有两个节,除非连接器激活时附带了“-nodebug”参数。这两个节分别是: Symbol Table Section(符号表节) String Table Section (字符串表节),2008年6月28日,南京大学计算机系,37,目标文件和映像文件的内部结构块,ARM映像文件内部组织具有层次结构的性质

20、,含三种成分:域(region)、输出段(output section)和输入段(input section)。 注意:以下讲解ARM映像文件内部成分时,不光考虑了链接视图,还考虑了加载视图和执行视图的描述,所以对英文术语“section”统称为中文术语“段”。,2008年6月28日,南京大学计算机系,38,域、输出段和输入段之间的关系,各成分的关系如下:各输入段包含了目标文件中的代码和数据。连接器读入并处理若干个由程序员指定的输入段,而后输出一个映像文件。一个映像文件由一个或多个域组成,每个域包含13个输出段,每个输出段包含一个或多个输入段。参看图6-4。,2008年6月28日,南京大学计算

21、机系,39,ARM映像文件的生成,2008年6月28日,南京大学计算机系,40,输入段的内容,输入段中包含了4种内容:代码、已经初始化的数据、未经过初始化的存储区域、内容初始化成0的存储区域。每个输入段有相应的属性,可以是只读(RO)、可读写(RW)以及初始化成0(ZI:Zero-initialized)。其中,目标文件的RODATA段会产生映像文件的RO 输入段,目标文件的BSS段会产生ZI段。ARM连接器根据各输入段的属性将这些输入段分组,再组成不同的输出段以及域。,2008年6月28日,南京大学计算机系,41,输出段的内容,每个输出段是由具有相同属性(RO、RW或者ZI)的若干个输入段组

22、成。这就是说输出段的属性与其中包含的输入段属性相同。在一个输出段内部,各输入段是按照一定的规则排序的。,2008年6月28日,南京大学计算机系,42,域的结构,一个域中包含13个输出段,其中各输出段的属性各不相同。各输出段的排列顺序是由其属性决定的。其中,RO属性的输出段排在最前面,其次是RW属性的输出段,最后是ZI属性的输出段。一个域通常映射到一个物理存储器上,如ROM 、RAM和外部设备等。,2008年6月28日,南京大学计算机系,43,映像文件的加载视图和执行视图,映像文件域在加载时被映射存放到系统存储区。在执行映像时,往往需要移动一些域到执行地址并且产生ZI输出段。例如,初始化的RW数

23、据也许要被迫从ROM区的加载地址拷贝到RAM区的执行地址。 加载视图:根据映像文件装载到存储器时的地址描述每一个域和段,该视图是映像文件开始执行前它的域和段的位置视图。 执行视图:该视图根据映像文件在执行时每一个域和段的地址描述映像的各个组成部分。,2008年6月28日,南京大学计算机系,44,加载视图与执行视图的比较 (图6-5),2008年6月28日,南京大学计算机系,45,图6-5中带有“$” 符号的含义,说明如下: Image$RO$base RO输出段运行时起始地址 Image$RO$limit RO输出段运行时存储区界限 Image$RW$base RW输出段运行时起始地址 Ima

24、ge$RW$limit RW输出段运行时存储区界限 Image$ZI$base ZI输出段运行时起始地址 Image$ZI$limit ZI输出段运行时存储区界限,2008年6月28日,南京大学计算机系,46,三个段空间计算公式,RO段大小= Image$RO$limit - Image$RO$base RW段大小= Image$RW$limit - Image$RW$base ZI段大小= Image$ZI$limit - Image$ZI$base,2008年6月28日,南京大学计算机系,47,段大小计算小结,段大小的设置,加载时,RO段 + RW段 = 整个程序大小。 运行时,RO段 +

25、 RW段 整个程序大小 注意:ZI段被包含在RW段中间。 这些符号具体取值可以在ADS或者SDT中设置。 -ro-base选项对应设置Image$RO$base, -rw-base选项对应设置Image$RW$base。,2008年6月28日,南京大学计算机系,48,使用配置文件定义映像文件的地址映像,在生成映像文件时,ARM连接器需要知道下列信息: 分组信息 决定如何将各个输入段组织成相应的输出段和域。 定位信息 决定各个域在存储空间中的起始地址。,2008年6月28日,南京大学计算机系,49,地址映射方式,根据映像文件中地址映射的复杂程度不同,采取不同的方式通知ARM连接器如何生成映像文件

26、。 地址映射关系比较简单的情况下,使用命令行选项。 地址映射关系比较复杂场合,使用配置文件(即scatter文件,后缀为.scf)。配置文件是ASC码的文本文件。,2008年6月28日,南京大学计算机系,50,行命令的参数选项,当映像文件中包含最多两个域,每一个域最多有3个输出段时,可以使用这5个选项, -ropi, -rw-base, -rwpi, -split -ro-base, 来通知ARM连接器相关的地址映射关系。具体解释参看ADS命令行开发工具。,2008年6月28日,南京大学计算机系,51,行命令的配置文件选项,当映像文件中地址映射关系比上述情况更复杂时,使用一个配置文件通知ARM

27、连接器(行命令armlink程序)如何进行地址映射。 此时在连接命令后面需要增加一个与配置文件相关的选项,即: -scatter filename,2008年6月28日,南京大学计算机系,52,地址配置文件的映像举例,图6-6给出了案例映像文件的地址映射图。该映像文件是一个简单的按照配置文件(.SCF格式文件)生成的映像文件,它有1个加载时域和6个运行时域。随后我们将给出该配置文件(Example_A.scf)的全部代码。,2008年6月28日,南京大学计算机系,53,一个简单的按配置文件进行地址映射的映像文件内部地址分布图 图6-6,2008年6月28日,南京大学计算机系,54,图6-6的地

28、址映射图说明,(1)ROM地址固定不变,没有地址重映射; (2)RAM起始地址是0x8000000,用于存放数据、栈和堆; (3)用于UART的I/O地址映射是0x1600000。,2008年6月28日,南京大学计算机系,55,与图6-6地址映射模式相对应的配置文件代码:Example_A.scf,ROM_DOWNLOAD 0x0 ROM_EXEC 0x0 Vector.o (Vect, +First) * (+RO) RAM 0x8000000 * (+RW, +ZI) MP3 0x1FF0000 mp3.o (+RO, +RW, +ZI) ,2008年6月28日,南京大学计算机系,56,与

29、图6-6地址映射模式相对应的配置文件代码:Example_A.scf,HEAP +0 UNINIT heap.o (+ZI) STACKS 0xBFFFFFF UNINIT stack.o (+ZI) UART 0x16000000 UNINIT uart.o (+ZI) ,2008年6月28日,南京大学计算机系,57,ADS编译成功后输出的映像文件内部成分统计表 举例(图6-7),2008年6月28日,南京大学计算机系,58,映像文件统计报告,在ADS集成开发环境下,对工程文件进行编译之后,会输出一个映像文件的统计报告。该报告中会分别给出目标文件(.o)文件和库(.a)文件中5种组成成分的占

30、空间大小。这5种组成成分是:代码、RO数据、RW数据、ZI数据和Debug数据,如图6-7所示。此外,还会分别给出总RO空间(代码+RO数据)、总RW空间(RW数据+ZI数据)和总ROM空间(代码+RO数据+RW数据)的大小。,2008年6月28日,南京大学计算机系,59,6.3 ADS的组成与使用,ADS全称ARM开发套件(ARM Developer Suite),是ARM公司推出的ARM开发工具包。ADS的最新版本是1.2,它取代了早期的ADS 1.0版和1.1版和SDT。它除了可以安装在Windows系列操作系统下,还支持某些UNIX系统。,2008年6月28日,南京大学计算机系,60,

31、ADS概貌,ADS由一系列应用程序及相关的文档、范例组成,包括以下基本组成部分:命令行开发工具、GUI开发工具、实用工具和支持软件。有了这些部件,用户就可以为ARM系列的RISC处理器编写和调试自己的应用程序。,2008年6月28日,南京大学计算机系,61,ADS的组件1,代码生成工具(Code Generation Tools) 代码生成工具由源程序编译、汇编、链接工具集组成。ARM公司针对ARM系列每一种结构都进行了专门的优化处理,这一点除了作为ARM结构的设计者的ARM公司,其他公司都无法办到,ARM公司宣称,其代码生成工具最终生成的可执行文件最多可以比其他公司工具套件生成的文件小20%

32、。,2008年6月28日,南京大学计算机系,62,ADS的组件2,集成开发环境 CodeWarrior IDE from Metrowerks CodeWarrior IDE是Metrowerks公司一套比较有名的集成开发环境,有不少厂商将它作为界面工具集成在自己的产品中。CodeWarrior IDE包含工程管理器、代码生成接口、语法敏感编辑器、源文件和类浏览器、源代码版本控制系统接口、文本搜索引擎等,其功能与Visual Studio相似,但界面风格比较独特。ADS仅在其PC机版本中集成了该IDE。,2008年6月28日,南京大学计算机系,63,ADS的组件3,调试器(Debuggers)

33、 调试器部分包括两个调试器:ARM扩展调试器AXD(ARM eXtended Debugger )、ARM符号调试器armsd(ARM symbolic debugger)。 AXD基于Windows9X/NT风格,具有一般意义上调试器的所有功能,包括简单和复杂断点设置、栈显示、寄存器和存储区显示、命令行接口等。 Armsd作为一个命令行工具辅助调试或者用在其他操作系统平台上。,2008年6月28日,南京大学计算机系,64,ADS的组件4,指令集模拟器(Instruction Set Simulators) 用户使用指令集模拟器无需任何硬件即可在PC机上完成一部分调试工作。,2008年6月28

34、日,南京大学计算机系,65,ADS的组件5,ARM 开发包(ARM Firmware Suite) ARM开发包由一些底层的例程和库组成,帮助用户快速开发基于ARM的应用和操作系统。具体包括系统启动代码、串行口驱动程序、时钟例程、中断处理程序等,Angel调试软件也包含在其中。,2008年6月28日,南京大学计算机系,66,ADS的组件6,ARM应用库(ARM Applications Library) ADS的ARM应用库完善和增强了SDT中的函数库,同时还包括一些相当有用的提供了源代码的例程。 用户使用ARM ADS开发应用程序与使用ARM SDT完全相同,同样是选择配合Angel驻留模块

35、或者JTAG仿真器进行,目前大部分JTAG仿真器均支持ARM ADS。,2008年6月28日,南京大学计算机系,67,6.3.1 ADS命令行开发工具,2008年6月28日,南京大学计算机系,68,ARM编译器和连接器相关文件类型,2008年6月28日,南京大学计算机系,69,6.3.1.1 ARM编译器,ADS提供四种编译器,表6-6给出了这4种编译器的总结。,2008年6月28日,南京大学计算机系,70,编译器命令行格式,大致如下: compiler source-language search-paths output-formattarget-options debug-options

36、 code-generation-options warning-options source-files,2008年6月28日,南京大学计算机系,71,6.3.1.2 ARM汇编器,ADS包含一个独立的ARM汇编器armasm和一个内置在C/C+编译器中的内联汇编器(inline assembler)。这两个汇编器能够处理基本相同的汇编代码。内敛汇编器是C/C+编译器的一部分,下面主要介绍armasm的使用。典型的命令行格式如下: armasm -apcs none|/qualifier/qualifier.-checkreglist -cpu cpu -depend dependfile

37、| -m |-md,2008年6月28日,南京大学计算机系,72,6.3.1.3 ARM连接器,ARM连接器armlink可以有如下功能: 将一组目标文件或库连接产生一个可执行的ELF映像文件; 将一组目标文件部分连接产生一个新的目标文件,用于以后的连接; 指定代码和数据在内存中的位置; 为连接产生的文件产生调试和引用信息。,2008年6月28日,南京大学计算机系,73,连接操作的输出结果,目标文件由输入段(input section)组成,输入段可以是RO(只读,Read-Only)段、RW(读写,Read/Write)段、ZI(零初始化,Zero-Initialized)段。 armlin

38、k可以利用这些属性把输入段分组归并为更大的生成块,分别是输出段(output section)、域(region)和映像(image)。 输出段大致相当于ELF的段(segment)。,2008年6月28日,南京大学计算机系,74,连接器的输入和输出,连接器的输入是: 一个或多个ELF目标格式的目标文件,或(可选的)一个或多个由armar工具产生的库。 缺省情况下,连接器的输出是非可重定位映像,代码从内存地址0x8000开始,数据段紧随其后。可以通过连接器选项或一个配置文件来指定代码段和数据段存放在什么内存地址。,2008年6月28日,南京大学计算机系,75,连接正确的输出,1一个ELF可执行

39、格式的可执行映像。 2一个ELF目标格式的部分连接的目标文件。 通过fromELF工具,一个ELF的可执行映像也可以转化为其他的文件格式。,2008年6月28日,南京大学计算机系,76,armlink的命令行格式大致如下:,armlink-image_content_options-image_info_options-output_options-diagnostic_options -memory_map_options -help_options -via_options,2008年6月28日,南京大学计算机系,77,6.3.1.4 ARM符号调试器,armsd is an intera

40、ctive source-level debugger providing high level debugging support for languages such as C and low level support for assembly language. Command line format: armsd options Interactive help is available within armsd with the HELP command.,2008年6月28日,南京大学计算机系,78,ARM符号调试器的输出举例,ARM Source-level Debugger,

41、 ADS1.2 Build 805 Software supplied by: Team-EFA ARMulator ADS1.2 Build 805 Software supplied by: Team-EFA ARM7TDMI, BIU, Little endian, Semihosting, Debug Comms Channel, 4GB, Mapfile, Timer, Profiler, Tube, Millisecond 20000 cycles_per_millisecond, Pagetables, IntCtrl, Tracer, RDI Codesequences Obj

42、ect program file _image.axf Hello World! 2*4 = 8 Program terminated normally at PC = 0x00009f84 (_sys_exit + 0x8) +0008 0x00009f84: 0xef123456 V4 : swi 0x123456 Quitting,2008年6月28日,南京大学计算机系,79,6.3.1.5 ARM运行时库,ADS提供的运行时库包括ANSI C运行时库和C+运行时库,用以支持被编译的C和C+代码。 ANSI C运行时库包括: ISO C标准中定义的函数; 运行在半主机(semihost)

43、环境中、与目标系统相关的函数。用户可以重新定义这部分内容,以适应特定的运行环境。 C/C+编译器需要的支持函数(helper function)。,2008年6月28日,南京大学计算机系,80,半主机环境与运行时库,所谓半主机环境是利用主机资源,实现在目标机上运行的程序所需要的输入输出功能的调试技术环境。ARM提供的ANSI C运行时库就是利用半主机环境实现输入/输出功能的,ANSI C运行时库包括一些必须在半主机环境中运行的函数。,2008年6月28日,南京大学计算机系,81,ARM开发工具多数支持半主机技术,ARM公司提供的开发工具ARMulator,Angel,Multi-ICE和Emb

44、eddedICE都支持半主机技术。随后讲解的AxD也支持半主机技术。,2008年6月28日,南京大学计算机系,82,C+运行时库的组成,C+运行时库包括了ISO C+标准定义的函数。它本身不包含与特定目标相关的部分,而是依赖相应的C运行时库来实现与特定目标相关的部分。它由以下几部分组成的: 版本为2.01.01 的Rogue Wave标准C+库; C+编译器使用的支持函数(helper function); Rogue Wave标准C+库所不支持的其他的C+函数。,2008年6月28日,南京大学计算机系,83,ANSI C运行时库和C+运行时库的存放位置,假设ADS的安装路径为install_

45、directory,则ANSI C运行时库和C+运行时库的存放位置分别为: intall_directorylibarmlib和intall_directorylibcpplib 对应的头文件存放路径是:intall_directoryinclude。 可以用下面两种方法指定ARM中C/C+库的存放/搜索路径: 设置环境变量ARMLIB。 在连接时使用选项-libpath。,2008年6月28日,南京大学计算机系,84,6.3.2 GUI开发工具,ADS的GUI开发工具主要包括两个独立的工具:CodeWarrior IDE(CodeWarrior集成开发环境)和AXD(ARM eXecutor

46、 Debugger)。,2008年6月28日,南京大学计算机系,85,6.3.2.1 CodeWarrior集成开发环境,CodeWarrior集成开发环境为管理和开发工程项目提供了简单一致的图形用户界面,可以加速并简化嵌入式开发过程中的每个环节,缩短用户项目周期。可以在CodeWarrior中为ARM 配置前面介绍的各种命令行工具,实现对项目代码的编译、汇编和连接。 CodeWarrior以工程项目的方式组织源代码文件、库文件和其他文件,让用户将这些文件及配置设置放在一个工程项目中。每个工程项目可以创建和管理多个生成选项的配置。,2008年6月28日,南京大学计算机系,86,CodeWarr

47、ior IDE主要提供以下功能:,1按照工程项目(Project)的方式来组织源代码文件、库文件和其他文件。 2设置各种生成选项(Build options),以生成不同配置的映像文件。 3一个源代码编辑器。 4一个文件浏览器。 5在文本文件中进行字符串搜索和替换。 6文本文件比较功能。 7用户自定义界面,2008年6月28日,南京大学计算机系,87,CodeWarrior中常用的两个术语,目标系统(Target system) 目标系统是指应用程序运行的环境,可以是基于ARM 的硬件系统,也可以是ARM仿真运行环境。比如,当应用程序运行在ARM评估板上时,目标系统就是该评估板。 生成目标(B

48、uild target) 生成目标是指生成特定目标文件的选项设置(包括汇编选项、编译选项、连接选项以及连接后的处理选项等)和所用的所有文件的集合。通常一个生成目标对应一个目标映像文件。当使用ADS的工程项目模板生成新工程项目时,,2008年6月28日,南京大学计算机系,88,CodeWarrior工程项目通常包括3个生成目标:,Debug:该生成目标对应的映像文件包含所有调试信息。在开发过程中使用。 Release:该生成目标对应的映像文件不包含调试信息。用于生成实际发行的软件版本。 DebugRel:该生成目标对应的映像文件包含基本的调试信息。,2008年6月28日,南京大学计算机系,89,

49、7种可选的ADS工程项目模板,ARM Executabl Image:ARM可执行映像文件模板。用于由ARM 指令的代码生成一个ELF 格式的可执行映像文件; ARM Object Library:ARM目标文件库模板。用于由ARM 指令的代码生成一个armar 格式的目标文件库; Empty Project:空工程模板。用于创建一个不包含任何库或源文件的工程; Makefile Importer Wizard:Makefile导入向导模板。用于将Visual C 的nmake 或GNU make 文件转入到CodeWarrior IDE工程文件;,2008年6月28日,南京大学计算机系,90,7种可选的ADS工程项目模板(续),Thumb ARM Executable Ima

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1