嵌入式系统基础教程第12讲第6章ARM开发工具.ppt
《嵌入式系统基础教程第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嵌入式开发工具分类,单一工具与套件工具SkyEyeArmulatorADSRVDS商用操作系统IDE工具/开源操作系统IED工具ARM+VxWorks和TornadoARM+Linux和VMwareWindows平台和Linux平台通用工具和公司内部专用工具,2008年6月28日,南京大学计算机系,5,ADS、SDT和GNU,在Windows环境中,其代表性的工具产品是ARM公司的SDT(Software Develop
3、ment 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月28日,南京大学计算机系,7,ELF目
4、标文件,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工具将映像文件中的调试信息和注释过滤掉,生成二进制的可加载映像文件(通常带后缀.bi
5、n,也可以无后缀)。可加载映像文件可写入嵌入式设备的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日,南京大学计算机系,11,三种ELF文件类
6、型,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文件当作由节头部表(section header tabl
7、e)描述的一组逻辑节(section),而系统加载器则把ELF文件当作由程序头部表(program header table)描述的一组代码段(segment)。在一个代码段通常几个节组成。,2008年6月28日,南京大学计算机系,13,ELF文件格式的两种视图(图6-1),2008年6月28日,南京大学计算机系,14,连接视图和执行视图,由于ELF文件既可以是可重定位的目标文件,又可以是可执行文件。这样我们可以从两个视图来观察ELF文件的主体数据结构。参看上一幅幻灯片视图(图6-1)。其中的(a)分图给出的视图是连接视图,(b)分图 给出的视图是执行视图。,2008年6月28日,南京大学计算
8、机系,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 x7F454C46,也就是0 x7F+E+L+F。,2
9、008年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字节)标识程序头部表在文件中的字节偏移量(无程序头部表时为0);e_shoff字段(4字节)标识节头部
11、表在文件中的位置(无节头部表时为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字节)保存了节头部表表项字节数;e_shnum字段(2字节)保存了节头部表包含的
12、表项数目;e_shstmdx字段(2字节)保存了节名称字符串表表项在节头部表中的索引。累计52Bytes,2008年6月28日,南京大学计算机系,23,节头部表和程序头部表的数据结构,ELF文件的节头部表和程序头部表的数据结构也在图6-2中给出。图6-2(b)给出了连接视图的节头部表的数据结构,图6-2(c)给出了执行视图的程序头部表的数据结构。,2008年6月28日,南京大学计算机系,24,程序头部表的作用,程序头部表(Program Header Table),如果存在的话,告诉系统如何创建进程映像。用来构造进程映像的目标文件必须具有程序头部表,可重定位文件不需要这个表。,2008年6月2
13、8日,南京大学计算机系,25,节区头部表的作用,节区头部表(Section Heade Table)包含了描述文件节区的信息,每个节区在表中都有一项,每一项给出诸如节区名称、节区大小这类信息。用于链接的目标文件必须包含节区头部表,其他目标文件可以有,也可以没有这个表。,2008年6月28日,南京大学计算机系,26,6.2.2 ARM映像文件的组成,ARM处理器的映像文件是.axf文件或者.bin文件。.axf文件和.bin文件的区别之处在于前者包含有调试信息和注释信息,后者没有。编译器输出的ARM映像文件以.axf文件为主。通过fromelf工具,可以把AXF文件转换成.bin文件。实际下载到
14、系统板的映像文件多数是.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可以打开和阅读.axf文件有关objdump命令的格式说明如下:objdump-显示二进制文件
15、信息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-x-start-address=address-stop-address=address-adjust-vma=offset-version-help
16、 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。,2008年6月28日,南京大学计算机系,31,ADS 1.2 集成开发环境的文件处理流程(图6-3),2008年6月28日,南京大学计算机系,32,三种编译连接方式,
17、在Windows环境下,可以有三种方式完成图6-3中的文件处理:(1)行命令方式;(2)类似Makefile性质的批命令程序,例如:make.bat。批命令实质是一系列单步行命令的顺序集中执行。该程序是文本文件,其内容构成是行命令方式的所有命令按照执行顺序排列;(3)ADS开发套件。,2008年6月28日,南京大学计算机系,33,ARM可执行ELF文件,ARM可执行ELF文件的内部结构简单描述如表6-1所示。注意:只有ELF头信息是固定的,其余部分的实际顺序可能有所不同。ELF文件所有其余部分的位置由ELF头信息、程序程序头部表和节头部表定义。,2008年6月28日,南京大学计算机系,34,A
18、RM处理器的可执行ELF文件的概念结构(表6-1),2008年6月28日,南京大学计算机系,35,ARM的ELF文件的段(Segment)结构,ARM的ELF文件有三种段结构:Text、Data和BSS。Text段包含了可执行的代码。Data段包含了经过初始化的可读可写的可执行数据。BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,它是英文Block Started by Symbol的简称。BSS段属于静态内存分配,存放了未初始化的全局C变量。,2008年6月28日,南京大学计算机系,36,ARM的ELF文件的节(Section)结构,在ELF文件规范
19、中,一个可执行目标文件能够包含一个节头部表,节头部表对文件中的节进行定义。在ARM的ELF文件中,所有的可执行代码至少具有两个节,除非连接器激活时附带了“-nodebug”参数。这两个节分别是:Symbol Table Section(符号表节)String Table Section(字符串表节),2008年6月28日,南京大学计算机系,37,目标文件和映像文件的内部结构块,ARM映像文件内部组织具有层次结构的性质,含三种成分:域(region)、输出段(output section)和输入段(input section)。注意:以下讲解ARM映像文件内部成分时,不光考虑了链接视图,还考虑了
20、加载视图和执行视图的描述,所以对英文术语“section”统称为中文术语“段”。,2008年6月28日,南京大学计算机系,38,域、输出段和输入段之间的关系,各成分的关系如下:各输入段包含了目标文件中的代码和数据。连接器读入并处理若干个由程序员指定的输入段,而后输出一个映像文件。一个映像文件由一个或多个域组成,每个域包含13个输出段,每个输出段包含一个或多个输入段。参看图6-4。,2008年6月28日,南京大学计算机系,39,ARM映像文件的生成,2008年6月28日,南京大学计算机系,40,输入段的内容,输入段中包含了4种内容:代码、已经初始化的数据、未经过初始化的存储区域、内容初始化成0的
21、存储区域。每个输入段有相应的属性,可以是只读(RO)、可读写(RW)以及初始化成0(ZI:Zero-initialized)。其中,目标文件的RODATA段会产生映像文件的RO 输入段,目标文件的BSS段会产生ZI段。ARM连接器根据各输入段的属性将这些输入段分组,再组成不同的输出段以及域。,2008年6月28日,南京大学计算机系,41,输出段的内容,每个输出段是由具有相同属性(RO、RW或者ZI)的若干个输入段组成。这就是说输出段的属性与其中包含的输入段属性相同。在一个输出段内部,各输入段是按照一定的规则排序的。,2008年6月28日,南京大学计算机系,42,域的结构,一个域中包含13个输出
22、段,其中各输出段的属性各不相同。各输出段的排列顺序是由其属性决定的。其中,RO属性的输出段排在最前面,其次是RW属性的输出段,最后是ZI属性的输出段。一个域通常映射到一个物理存储器上,如ROM、RAM和外部设备等。,2008年6月28日,南京大学计算机系,43,映像文件的加载视图和执行视图,映像文件域在加载时被映射存放到系统存储区。在执行映像时,往往需要移动一些域到执行地址并且产生ZI输出段。例如,初始化的RW数据也许要被迫从ROM区的加载地址拷贝到RAM区的执行地址。加载视图:根据映像文件装载到存储器时的地址描述每一个域和段,该视图是映像文件开始执行前它的域和段的位置视图。执行视图:该视图根
23、据映像文件在执行时每一个域和段的地址描述映像的各个组成部分。,2008年6月28日,南京大学计算机系,44,加载视图与执行视图的比较(图6-5),2008年6月28日,南京大学计算机系,45,图6-5中带有“$”符号的含义,说明如下:Image$RO$baseRO输出段运行时起始地址Image$RO$limitRO输出段运行时存储区界限Image$RW$baseRW输出段运行时起始地址Image$RW$limitRW输出段运行时存储区界限Image$ZI$baseZI输出段运行时起始地址Image$ZI$limitZI输出段运行时存储区界限,2008年6月28日,南京大学计算机系,46,三个段
24、空间计算公式,RO段大小=Image$RO$limit-Image$RO$baseRW段大小=Image$RW$limit-Image$RW$baseZI段大小=Image$ZI$limit-Image$ZI$base,2008年6月28日,南京大学计算机系,47,段大小计算小结,段大小的设置,加载时,RO段+RW段=整个程序大小。运行时,RO段+RW段 整个程序大小注意:ZI段被包含在RW段中间。这些符号具体取值可以在ADS或者SDT中设置。-ro-base选项对应设置Image$RO$base,-rw-base选项对应设置Image$RW$base。,2008年6月28日,南京大学计算机系
25、,48,使用配置文件定义映像文件的地址映像,在生成映像文件时,ARM连接器需要知道下列信息:分组信息 决定如何将各个输入段组织成相应的输出段和域。定位信息 决定各个域在存储空间中的起始地址。,2008年6月28日,南京大学计算机系,49,地址映射方式,根据映像文件中地址映射的复杂程度不同,采取不同的方式通知ARM连接器如何生成映像文件。地址映射关系比较简单的情况下,使用命令行选项。地址映射关系比较复杂场合,使用配置文件(即scatter文件,后缀为.scf)。配置文件是ASC码的文本文件。,2008年6月28日,南京大学计算机系,50,行命令的参数选项,当映像文件中包含最多两个域,每一个域最多
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 基础教程 12 ARM 开发 工具
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5395508.html