嵌入式系统基础教程第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嵌入式开发工具分类,单一工具与套件工具 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段 +
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 基础教程 12 ARM 开发 工具
链接地址:https://www.31doc.com/p-2600341.html