嵌入式系统基础教程_第12讲_第6章ARM开发工具.ppt
《嵌入式系统基础教程_第12讲_第6章ARM开发工具.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统基础教程_第12讲_第6章ARM开发工具.ppt(146页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、嵌入式系统原理与开发嵌入式系统原理与开发第第1 12讲讲南京大学计算机系 俞建新主讲2008年春季第第6章章 ARM开发工具开发工具l本章主要介绍以下内容:lARM开发工具概述lARM映像文件格式lADS基本工具与用法lADS生成应用程序及调试的实例lRealViewDevelopmentSuite(RVDS)介绍lLinux环境下GNUARM工具链介绍2008年6月28日2南京大学计算机系6.1 ARM开发工具概述开发工具概述lARM开发工具根据功能的不同,可分为编译器、汇编器、连接器、调试器、嵌入式实时操作系统、函数库、评估板、JTAG仿真器、在线仿真器等。l目前世界上约有四十多家公司提供
2、以上不同类别的产品。l在ARM开发工具中,ARM公司自己开发的套件工具功能最全面,最先进,最满足ARM规范,是学习和掌握的重点。2008年6月28日3南京大学计算机系ARM嵌入式开发工具分类嵌入式开发工具分类l单一工具与套件工具lSkyEyelArmulatorlADSlRVDSl商用操作系统IDE工具/开源操作系统IED工具lARM+VxWorks和TornadolARM+Linux和VMwarelWindows平台和Linux平台l通用工具和公司内部专用工具2008年6月28日4南京大学计算机系ADS、SDT和和GNUl在Windows环境中,其代表性的工具产品是ARM公司的SDT(Sof
3、twareDevelopmentToolkit)、ADS和新推出的RVDS。l在Linux环境中,主要是GNU开发工具,因这些工具互相兼容、前后贯穿、彼此配合,通常又称作GNU/LinuxARM工具链(GUN/LinuxARMtoolchain)或者GNU/LinuxARM交叉工具链(GUN/LinuxARMcrosstoolchain)。2008年6月28日5南京大学计算机系6.2 ARM映像文件格式映像文件格式l什么是映像文件l映像文件(image)是一个计算机上的可执行文件,在执行之前被加载到计算机的存储器中。通常,一个映像文件中包含多个线程。2008年6月28日6南京大学计算机系ELF
4、目标文件目标文件lARM集成开发环境中的各种源文件(包括汇编程序、C程序以及C+程序)经过ARM编译器编译之后,生成ELF格式的目标文件。lELF目标文件的文件名后缀是.o。2008年6月28日7南京大学计算机系ARM映像文件映像文件.axfl目标文件.o和相应的C/C+运行时库.a经过ARM连接器连接后,生成.axf映像文件。.axf映像文件也是ELF格式的,只是包含特定格式的调试信息,可在开发板上调试运行。2008年6月28日8南京大学计算机系不含调试信息的映像文件不含调试信息的映像文件l映像文件调试结束之后,可以使用fromelf工具将映像文件中的调试信息和注释过滤掉,生成二进制的可加载
5、映像文件(通常带后缀.bin,也可以无后缀)。可加载映像文件可写入嵌入式设备的ROM中,在加电启动过程执行。2008年6月28日9南京大学计算机系6.2.1 ELF文件格式简介文件格式简介lELF(ExecutableandLinkingFormat)格式是可执行连接文件格式,是Unix系统实验室(USL)作为一种应用程序二进制(文件)接口(ABI,ApplicationBinaryInterface)而开发和发布的。工具接口标准委员会(TIS)选择了正在发展中的ELF标准作为工作在32位Intel体系结构上不同操作系统之间可移植的二进制文件格式。2008年6月28日10南京大学计算机系三种三
6、种ELF文件类型文件类型lELF文件是x86Linux下的一种常用目标文件格式,也是ARM处理器的常用目标文件格式。它有三种主要类型:(1)适于连接的可重定位文件(relocatablefile),通常后缀为.o。(2)适于执行的可执行文件(execuablefile),规定了如何创建一个程序的进程映像,加载到内存执行。(3)共享目标文件(sharedobjectfile),Unix/Linux环境下的后缀为.so,ADS环境下的后缀为.a。2008年6月28日11南京大学计算机系ELF文件结构文件结构lELF文件具有双重特性:ARM连接器把ELF文件当作由节头部表(sectionheader
7、table)描述的一组逻辑节(section),而系统加载器则把ELF文件当作由程序头部表(programheadertable)描述的一组代码段(segment)。l在一个代码段通常几个节组成。2008年6月28日12南京大学计算机系ELF文件格式的两种视图(图文件格式的两种视图(图6-1)2008年6月28日13南京大学计算机系连接视图和执行视图连接视图和执行视图l由于ELF文件既可以是可重定位的目标文件,又可以是可执行文件。这样我们可以从两个视图来观察ELF文件的主体数据结构。参看上一幅幻灯片视图(图6-1)。l其中的(a)分图给出的视图是连接视图,(b)分图给出的视图是执行视图。200
8、8年6月28日14南京大学计算机系ELF 头部结构头部结构l每一个ELF文件都是以一个ELFheader结构字段开始。ELFheader结构字段的定义在下一页幻灯片视图给出,该结构为52个字节长,由14个字段组成。2008年6月28日15南京大学计算机系ELF文件中的结构信息(图文件中的结构信息(图6-2)2008年6月28日16南京大学计算机系ELF文件头部结构文件头部结构14个字段说明个字段说明-1 le_ident字段是ELF文件的标识信息,占16个字节;位于ELFheader结构的最前面;该字段的头4个字节是用来标识ELF文件的幻数或者魔幻数(magicnumber),其内容是0 x7
9、F454C46,也就是0 x7F+E+L+F。2008年6月28日17南京大学计算机系ELF文件头部结构文件头部结构14个字段说明个字段说明-2l接下来的字节是class+data+version+pad。如果是ARM的ELF文件,设定e_identEI_CLASS为ELFCLASS32;并且设定e_identEI_DATA为ELFCLASS2LSB(小端序),或者ELFCLASS2MSB(大端序)。注意:由目标文件决定的目标端序将提交给连接器,如果端序提交不正确将会导致连接器报错。2008年6月28日18南京大学计算机系ELF文件头部结构文件头部结构14个字段说明个字段说明-3le_type
10、字段(2字节)标识目标文件的类型,例如:可重定位文件、可执行文件、共享文件等;le_machine字段(2字节)标识目标文件的目标主机体系结构,例如:3标识Intel80386处理器,8表示MIPSRS3000处理器;如果是ARM的ELF文件,设定为EM_ARM,取值为40。le_version字段(4字节)标识目标文件版本号;取值:1当前版本,0非法版本。l累计24bytes2008年6月28日19南京大学计算机系ELF文件头部结构文件头部结构14个字段说明个字段说明-4le_entry字段(4字节)标识可执行文件执行时的入口地址(不可执行文件的入口地址为0);le_phoff字段(4字节)
11、标识程序头部表在文件中的字节偏移量(无程序头部表时为0);le_shoff字段(4字节)标识节头部表在文件中的位置(无节头部表时为0);l累计36bytes2008年6月28日20南京大学计算机系ELF文件头部结构文件头部结构14个字段说明个字段说明-5le_flags字段(4字节)保存了与特定处理器有关的标志位;le_ehsize字段(2字节)保存了ELF头部的字节数大小;le_phentsize字段(2字节)保存了程序头部表表项字节数;le_phnum字段(2字节)保存了程序头部表包含的表项数目;l累计46Bytes2008年6月28日21南京大学计算机系ELF文件头部结构文件头部结构14
12、个字段说明个字段说明-6le_shentsize字段(2字节)保存了节头部表表项字节数;le_shnum字段(2字节)保存了节头部表包含的表项数目;le_shstmdx字段(2字节)保存了节名称字符串表表项在节头部表中的索引。l累计52Bytes2008年6月28日22南京大学计算机系节头部表和程序头部表的数据结构节头部表和程序头部表的数据结构lELF文件的节头部表和程序头部表的数据结构也在图6-2中给出。图6-2(b)给出了连接视图的节头部表的数据结构,图6-2(c)给出了执行视图的程序头部表的数据结构。2008年6月28日23南京大学计算机系程序头部表的作用程序头部表的作用l程序头部表(P
13、rogramHeaderTable),如果存在的话,告诉系统如何创建进程映像。l用来构造进程映像的目标文件必须具有程序头部表,可重定位文件不需要这个表。2008年6月28日24南京大学计算机系节区头部表的作用节区头部表的作用l节区头部表(SectionHeadeTable)包含了描述文件节区的信息,每个节区在表中都有一项,每一项给出诸如节区名称、节区大小这类信息。l用于链接的目标文件必须包含节区头部表,其他目标文件可以有,也可以没有这个表。2008年6月28日25南京大学计算机系6.2.2 ARM映像文件的组成映像文件的组成lARM处理器的映像文件是.axf文件或者.bin文件。l.axf文件
14、和.bin文件的区别之处在于前者包含有调试信息和注释信息,后者没有。编译器输出的ARM映像文件以.axf文件为主。通过fromelf工具,可以把AXF文件转换成.bin文件。实际下载到系统板的映像文件多数是.bin格式文件。2008年6月28日26南京大学计算机系.axf文件是什么样的映像文件?文件是什么样的映像文件?l.axf文件是一种满足DWARFV2.0调试文件格式的ELF文件,而DWARF调试文件格式又是UNIX操作系统的调试文件格式。DWARF即DebugWithArbitraryRecordFormat(带任意记录格式的调试)。目前DWARF的最高版本是V3.0。2008年6月28
15、日27南京大学计算机系如何阅读如何阅读.axf文件里面的内容文件里面的内容lLinux下使用工具objdump可以打开和阅读.axf文件l有关objdump命令的格式说明如下:lobjdump-显示二进制文件信息lobjdump-a-bbfdname|-target=bfdname-C-debugging-d-D-disassemble-zeroes-EB|-EL|-endian=big|little-f-h-i|-info-jsection|-section=section-l-mmachine-prefix-addresses-r-R-s|-full-contents-S|-source-
16、no-show-raw-insn-stabs-t-T-x-start-address=address-stop-address=address-adjust-vma=offset-version-helpobjfile.2008年6月28日28南京大学计算机系.axf文件的内部数据举例文件的内部数据举例l在教材的第184页给出了.axf文件的内部数据举例。2008年6月28日29南京大学计算机系ELF映像格式映像格式lLinux编译器GCC输出文件格式就是符合DWARFV2.0调试规范的ELF映像格式,Windows平台集成开发环境ADS1.2输出的也是符合DWARFV2.0调试规范的ELF映
17、像格式,即AXF格式文件。参看图6-3。2008年6月28日30南京大学计算机系ADS 1.2 集成开发环境的文件处理集成开发环境的文件处理流程流程(图(图6-3)2008年6月28日31南京大学计算机系三种编译连接方式三种编译连接方式l在Windows环境下,可以有三种方式完成图6-3中的文件处理:(1)行命令方式;(2)类似Makefile性质的批命令程序,例如:make.bat。批命令实质是一系列单步行命令的顺序集中执行。该程序是文本文件,其内容构成是行命令方式的所有命令按照执行顺序排列;(3)ADS开发套件。2008年6月28日32南京大学计算机系ARM可执行可执行ELF文件文件lAR
18、M可执行ELF文件的内部结构简单描述如表6-1所示。注意:只有ELF头信息是固定的,其余部分的实际顺序可能有所不同。ELF文件所有其余部分的位置由ELF头信息、程序程序头部表和节头部表定义。2008年6月28日33南京大学计算机系ARM处理器的可执行处理器的可执行ELF文件的文件的概念结构概念结构(表(表6-1)ELF头头信息信息程序头部表代码段数据段未初始化全局变量段“.Symtab”节“.Strtab”节“.shstrtab”节调试节节头部表2008年6月28日34南京大学计算机系ARM的的ELF文件的段(文件的段(Segment)结)结构构 lARM的ELF文件有三种段结构:Text、D
19、ata和BSS。lText段段包含了可执行的代码。Data段段包含了经过初始化的可读可写的可执行数据。BSS段段(bsssegment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,它是英文BlockStartedbySymbol的简称。BSS段属于静态内存分配,存放了未初始化的全局C变量。2008年6月28日35南京大学计算机系ARM的的ELF文件的节(文件的节(Section)结构结构 在ELF文件规范中,一个可执行目标文件能够包含一个节头部表,节头部表对文件中的节进行定义。在ARM的ELF文件中,所有的可执行代码至少具有两个节,除非连接器激活时附带了“-nodebug”参数。这
20、两个节分别是:Symbol Table Section(符号表节)(符号表节)String Table Section (字符串表节)(字符串表节)2008年6月28日36南京大学计算机系目标文件和映像文件的内部结构块目标文件和映像文件的内部结构块 lARM映像文件内部组织具有层次结构的性质,含三种成分:域(region)、输出段(outputsection)和输入段(inputsection)。l注意:以下讲解ARM映像文件内部成分时,不光考虑了链接视图,还考虑了加载视图和执行视图的描述,所以对英文术语“section”统称为中文术语“段”。2008年6月28日37南京大学计算机系域、输出段
21、和输入段之间的关系域、输出段和输入段之间的关系l各成分的关系如下:各输入段包含了目标文件中的代码和数据。连接器读入并处理若干个由程序员指定的输入段,而后输出一个映像文件。一个映像文件由一个或多个域组成,每个域包含13个输出段,每个输出段包含一个或多个输入段。参看图6-4。2008年6月28日38南京大学计算机系ARM映像文件的生成映像文件的生成 2008年6月28日39南京大学计算机系输入段的内容输入段的内容l输入段中包含了4种内容:代码、已经初始化的数据、未经过初始化的存储区域、内容初始化成0的存储区域。每个输入段有相应的属性,可以是只读(RO)、可读写(RW)以及初始化成0(ZI:Zero
22、-initialized)。其中,目标文件的RODATA段会产生映像文件的RO输入段,目标文件的BSS段会产生ZI段。ARM连接器根据各输入段的属性将这些输入段分组,再组成不同的输出段以及域。2008年6月28日40南京大学计算机系输出段的内容输出段的内容l每个输出段是由具有相同属性(RO、RW或者ZI)的若干个输入段组成。这就是说输出段的属性与其中包含的输入段属性相同。在一个输出段内部,各输入段是按照一定的规则排序的。2008年6月28日41南京大学计算机系域的结构域的结构l一个域中包含13个输出段,其中各输出段的属性各不相同。各输出段的排列顺序是由其属性决定的。其中,RO属性的输出段排在最
23、前面,其次是RW属性的输出段,最后是ZI属性的输出段。一个域通常映射到一个物理存储器上,如ROM、RAM和外部设备等。2008年6月28日42南京大学计算机系映像文件的加载视图和执行视图映像文件的加载视图和执行视图 l映像文件域在加载时被映射存放到系统存储区。在执行映像时,往往需要移动一些域到执行地址并且产生ZI输出段。例如,初始化的RW数据也许要被迫从ROM区的加载地址拷贝到RAM区的执行地址。l加载视图:根据映像文件装载到存储器时的地址描述每一个域和段,该视图是映像文件开始执行前它的域和段的位置视图。l执行视图:该视图根据映像文件在执行时每一个域和段的地址描述映像的各个组成部分。2008年
24、6月28日43南京大学计算机系加载视图与执行视图的比较加载视图与执行视图的比较(图(图6-5)2008年6月28日44南京大学计算机系图图6-5中带有中带有“$”符号的含义符号的含义 l说明如下:Image$RO$baseRO输出段运行时起始地址Image$RO$limitRO输出段运行时存储区界限Image$RW$baseRW输出段运行时起始地址Image$RW$limitRW输出段运行时存储区界限Image$ZI$baseZI输出段运行时起始地址Image$ZI$limitZI输出段运行时存储区界限2008年6月28日45南京大学计算机系三个段空间计算公式三个段空间计算公式RO段大小=Im
25、age$RO$limit-Image$RO$baseRW段大小=Image$RW$limit-Image$RW$baseZI段大小=Image$ZI$limit-Image$ZI$base2008年6月28日46南京大学计算机系段大小计算小结,段大小的设置段大小计算小结,段大小的设置l加载时,RO段+RW段=整个程序大小。l运行时,RO段+RW段整个程序大小l注意:ZI段被包含在RW段中间。l这些符号具体取值可以在ADS或者SDT中设置。l-ro-base选项对应设置Image$RO$base,l-rw-base选项对应设置Image$RW$base。2008年6月28日47南京大学计算机系使
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 基础教程 12 ARM 开发 工具
限制150内