ADS1.2_map文件说明

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[-scatter file][-debug|-nodebug][-remove?RO/RW/ZI/DBG]|-noremove] [-entry location ]
[-keep section-id] [-first section-id] [-last section-id] [-libpath pathlist] [-scanlib|-noscanlib]
一、ARM1.2
ADS1.2 是 ARM 公司推出的新一代 ARM 集成开发工具,提供了代码编辑,代码 调试,armasm(ARM 和 Thumb 的编译器),armcc(ARM C 的编译器),armcpp (ARM C++编译器),tcc(Thumb C 编译器),tcpp(Thumb C++编译器),armlink (ARM 连接器)和 fromelf(ARM 映象文件转换工具)等工具,可以适用于 AMR7、 ARM9 等 ARM 核处理器。用户可以建立 MCP 工程来编译代码工程,也可以写 bat 文 件或 makefile 文件用命令行方式来编译代码工程。armasm,armcc,armcpp,tcc, tcpp,armlink 和 fromelf 的使用说明可以在 command 下通过输入相应的 exe 文件得到。
MAP 文件由连接器 armlink 生成,完整的 armlink 命令语法如下:
armlink [-help] [-vsn] [-partial] [-output file] [-elf] [-reloc][-ro-base address] [-ropi]
[-rw-base address] [-rwpi] [-split]
1.-map:此选项创建映像文件的信息图。映像文件信息图一般包括映像文件中的 每个加载域,运行域和输入段的大小和地址,这里的输入段还包括调试信息和连接 器产生的输入段。
2.-list file:此选项将-info,-map,-symbols,-xref,-xreffrom 和–xrefto 这几个选 项的输出重新定向到文件 file 中。这个定向的文件就是本文所指的 MAP 文件。
RO-删除所有未使用的 RO 属性的段; RW-删除所有未使用的 RW 属性的段; ZI-删除所有未使用的 ZI 属性的段; DBG-删除所有未使用的 DEBUG 属性的段
注意:此选项并非生成 MAP 文件必须项,选择此项的目的是统计真正连接到 目标时哪些段是无用的段,便于系统工程师或软件设计人员分析。一般嵌入式系统 选项是-remove (RO/RW/ZI/DBG),ADS 默认也是如此。
present.
-4-
E_mail: ee_lyz@hotmail.com
5.-remove(RO/RW/ZI/DBG):使用这个选项会将在输入段未使用的段从映像文件 中删除。如果输入段中含有映像文件入口点或者该输入段被一个使用的段所引用, 则这样的输入段会当作已使用的段。在使用这个选项时候要注意,不要删除异常处 理函数。使用-keep 选项来标识异常处理函数,或用 ENTRY 伪指令标明是入口。可 以使用以下的段属性限制符:
版权作者所有,欢迎转载
Yesterday is a history, tomorrow is a mystery, and today is god's gift, that's why we call it the
present.
-5-
E_mail: ee_lyz@hotmail.com
Removing fs.o(.bss), (12 bytes).//删除未用无初值的全局量
(2)totals--为输入对象文件和库,列出代码和数据(这里的数据包括,RO 数 据,RW 数据,ZI 数据和 Debug 数据) 总的大小;
(3)unused--列出由于使用-remove 选项而从映像文件中被删除的所有未使用段
生成 MAP 文件时最后包括以上参个类型标识符列表,在分析 MAP 文件时候比较常 用到,格式为-info sizes –info totals –info unused,或-info totals,sizes,unused
MAP 文件结构和内容
首先声明,本文 MAP 文件是指包括了映像文件信息图和其他信息(更多信息可以 通过增加其他参数获得)的一个映射文件,为叙述方便笔者称为 MAP 文件,读者不必 较真。
在引入 MAP 文件以前对几个概念做一下说明。
段(section):描述映像文件的代码或数据块。 输入段(input section):它包含着代码,初始化数据或描述了在应用程序运 行之前必须要初始化为 0 的一段内存。 输出段(output section):它包含了一系列具有相同的 RO,RW 或 ZI 属性 的输入段。 RO:是 Read-only 的简写形式,包括 RO-DATA 和 RO-CODE。 RW:是 Read-write.的简写形式,包括 RW-DATA 和 RW-CODE,RWDATA 由程序初始化初值。 ZI:是 Zero-initialized 的简写形式,由编译器初始化为零。 加载域(load view):保留应用程序的代码和数据(典型应用为 ROM) 执行域(executive view):在程序执行的同时保留了程序的代码和数据。在 应用程序启动 期间,每个加载域都可创建一个或多个可执行域。
[-unmangled |-mangled] [-match crossmangled][-via file] [-strict]
为了使生成的 MAP 文件信息丰富,便于嵌入式软件开发管理人员分析研究整 个工程的代码质量和代码效率,在生成 MAP 文件时除根据系统需要选择必要参数 外还应选择以下几个参数。
这里首先把前面提到的一些概念做一下对应,即对号入座
CODE 是 RO-CODE 同义词,也是.text 同义词,反之亦然; CONST 是 RO-DATA 同义词,也是. constdata 同义词,反之亦然; DATA 是 RW-DATA 同义词,也是.data 同义词,反之亦然; ZI 是.bss 的同义词,反之亦然
版权作者所有,欢迎转载
Yesterday is a history, tomorrow is a mystery, and today is god's gift, that's why we call it the
present.
-2-
E_mail: ee_lyz@hotmail.com
行时的分布状态。连接参数为-scatter file,后面加*.scf 文件,因为是文本文
件,文件扩展名没有定死。
编译连接过程如图 1 所示
汇源自文库文件
armasm
C/C++ 文件
armcc/tcc armcpp/tcpp
C/C++ 库文件
A
fromelf
bin 文件
R
M L
map 文件
I
N
K
符号文件
分散加载文件
图 1 ARM 编译连接过程
由图 1 可以看出整个编译连接的过程,输出的文件可以根据不同选项来选择,bin 文件类型也可以通过设置 linker 选项来设置,其他的一些 armlink 输出文件这里没有列 出,如 static graphic 文件。
背景
ARM(Advanced RISC Machines)微处理器实际上是采用 ARM 核的微处理器的通 称,ARM 处理器是在嵌入式系统中应用比较广的一种处理器。在手机终端中,ARM 核处理器占有很大的市场份额。本文是通过学习 ARM 核处理器来认识嵌入式系统,认 识怎样编写嵌入式系统软件。
ARM 编译连接过程
二、ARMLINK 过程
一个比较典型的嵌入式系统编译连接工程所需元素基本包括以下几个元素:
汇编文件,即*.s 文件,负责 boot 过程、中断处理过程等 c 文件(或 c++文件)负责操作系统及其他具体应用实现 lib 文件,armlink 所需的库文件,也可能是部分连接(参数-partial)生成文 件,也可能是第三方提供的 lib 文件(需注意 endian 等因素影响) scatter file 文件,scatter file 文件是一个配置文件,用于实现分散加载技术。 分散加载技术 ARM 工具的一个特性,用来指定最终生成的目标映像文件运
有时为了看 MAP 文件清晰方便可以选择-nodebug,即在输出文件中不包含调 试信息,但是注意不能进行源码级的调试。
其他一些 armlink 参数本文不再说明,请读者参阅相关的文献资料 。
二、MAP 文件结构与内容
在使用连接器时,如果使用了上述的参数选项就会生成一个统计信息的 MAP 文件,文件结构和内容取决于所用的参数。
版权作者所有,欢迎转载
Yesterday is a history, tomorrow is a mystery, and today is god's gift, that's why we call it the
present.
-3-
E_mail: ee_lyz@hotmail.com
一、MAP 文件生成
本文摘要:本文主要介绍了基于 ARM 核微处理器工程编译连接生成的 MAP 文件 结构、内容,简单分析工程各组成元素和生成的映象文件之间的关系。通过实际例子 分析说明 MAP 文件,并浅谈 MAP 文件对编写代码的作用,认识怎样编写嵌入式系统 软件。
关键词:ADS1.2,MAP 文件,输入段,输出段
4.-symbols:此选项列出了连接的时候使用的每一个局部和全局符号该符号,还包 括连接生成的符号。
版权作者所有,欢迎转载
Yesterday is a history, tomorrow is a mystery, and today is god's gift, that's why we call it the
. . . x unused section(s) (total xxxx bytes) removed from the image.//总数删除统计
2.域符号映射和全局,局部符号及生成符号映射统计信息
对应参数-symbols,示例如下: Image Symbol Table
Mapping Symbols//域空间地址映射(可以看出域空间使用情况)
3.-info topics:此选项打印出关于指定种类的信息,这里的参数 topics 是指用逗号 间隔的类型标识符列表。类型标识符列表可以是下面所列出的任意一个:
(1)sizes--为在映像文件中的每一个输入对象和库成员列出了代码和数据(这里 的数据包括,RO 数据,RW 数据,ZI 数据和 Debug 数据)的大小;
如果上述 5 个参数在连接的时候都使用的话,那一个 MAP 文件包括以五部分 内容:
1.从映象文件中删除的输入段中未使用的段的统计信息
对应参数-remove(RO/RW/ZI/DBG),示例如下: Removing Unused input sections from the image.
Removing fs.o(.text), (40 bytes).//删除未用代码 Removing fs.o(.constdata), (350 bytes).//删除未用只读数据 Removing fs.o(.data), (42 bytes).//删除未用有初值的全局量
[-locals|-nolocals] [-callgraph] [-info topics] [-map] [-symbols] [-symdefs file] [-edit file] [-xref]
[-xreffrom object(section)] [-xrefto object(section)] [-errors file] [-list file] [-verbose]
Yesterday is a history, tomorrow is a mystery, and today is god's gift, that's why we call it the
present.
-1-
E_mail: ee_lyz@hotmail.com
MAP 文件认识初步
JOHNNY LEE
相关文档
最新文档