微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > armlink 使用方法详解

armlink 使用方法详解

时间:11-11 来源:互联网 点击:

置了位置无关属性;检查在各段之间的重定址是否有效;生成基于静态寄存器sb的条目,这些在RO和RW域被拷贝和初始化的时候会用到。编译器并不会强制可写的数据一定要为位置无关的,这就是说,即使在为编译器和汇编器指定了RWPI选项,armlink也可能生成数据不是RWPI的信息。

11)-split这个选项将包含RO和RW属性的输出段的加载域,分割成2个加载域。一个是包含RO输出段的加载域,默认的加载地址为0x8000,但是可以用-ro-base选项设置其他的地址值,另一个加载域包含RW属性的输出段,由-rw-base选项指定加载地址,如果没有使用-rw-base选项的话,默认使用的是-rw-base0。

12)-scatterfile这个选项使用在file中包含的分组和定位信息来创建映像内存映射。注意,如果使用了该选项的话,必须要重新实现堆栈初始化函数__user_initial_stackheap()。

13)-debug这个选项使输出文件包含调试信息,调试信息包括,调试输入段,符号和字符串表。这是默认的选项。

14)-nodebug这个选项使得在输出文件中不包含调试信息。生成的映像文件短小,但是不能进行源码级的调试。armlink对在输入的目标文件和库函数中发现的任何调试输入段都不予处理,当加载映像文件到调试器中的时候,也不包含符号和字符串信息表。这个选项仅仅是对装载到调试器的映像文件的大小有影响,但是对要下载到目标板上的二进制代码的大小没有任何影响。如果用armlink进行部分链接生成目标文件而不是映像文件,则虽然在生成的目标文件中不含有调试输入段,但是会包含符号和字符串信息表。这里特别请读者注意的是:如果要在链接完成后使用fromELF工具的话,不可使用-nodebug选项,这是因为如果生成的映像文件中不包含调试信息的话,则有下面的影响:fromELF不能将映像文件转换成其他格式的文件;fromELF不能生成有意义的反汇编列表。

15)-remove(RO/RW/ZI/DBG)使用这个选项会将在输入段未使用的段从映像文件中删除。如果输入段中含有映像文件入口点或者该输入段被一个使用的段所引用,则这样的输入段会当作已使用的段。
在使用这个选项时候要注意,不要删除异常处理函数。使用-keep选项来标识异常处理函数,或用ENTRY伪指令标明是入口点。为了更精确的控制删除未使用的段,可以使用段属性限制符。可以使用以下的段属性限制符:
RO删除所有未使用的RO属性的段;
RW删除所有未使用的RW属性的段;
ZI删除所有未使用的ZI属性的段;
DBG删除所有未使用的DEBUG属性的段。
这些限制符出现的顺序是任意的,但是它们必须要有”()”括住,多个限制符之间要用符号”/”进行间隔。ADS软件中默认选项是-remove(RO/RW/ZI/DBG)。如果没有指定段属性限制符,则所有未使用的段都会被删除。因为-remove就等价于-remove(RO/RW/ZI/DBG)选项。

16)-noremove这个选项保留映像文件中所有未被使用的段。

17)-entrylocation这个选项指定映像文件中唯一的初始化入口点。一个映像文件可以包含多个入口点,使用这个命令定义的初始化入口点是存放在可执行文件的头部,以供加载程序加载时使用。当一个映像文件被装载时,ARM调试器使用这个入口点地址来初始化PC指针。初始化入口点必须满足下面的条件:映像文件的入口点必须位于运行域内;运行域必须是非覆盖的,并且必须是固定域(就是说,加载域和运行域的地址相同)。
在这里可以用以下的参数代替location参数:
1.入口点地址:这是一个数值,例如-entry0x0;
2.符号:该选项指定映像文件的入口点为该符号所代表的地址处,比如:
-entryint_handler表示程序入口点在符号int_handler所在处。如果该符号有多处定义存在,armlink将产生出错信息。
-entryoffset+object(section):该选项指定在某个目标文件的段的内部的某个偏移量处为映像文件的入口地址,例如:-entry8+startup(startupseg)如果偏移量值为0,可以简写成object(section),如果输入段只有一个,则可以简化为object。

18)-keepsection-id使用该选项,可以指定保留一个输入段,这样的话,即使该输入段没有在映像文件中使用,也不会被删除。
参数section-id取下面一些格式:
1.symbol该选项指定定义symbol的输入段不会在删除未使用的段时被删除。如果映像文件中有多处symbol定义存在,则所有包含symbol定义的输入段都不会被删除。例如:-keepint_handler则所有定义int_handler的符号的段都会保留,而不被删除。为了保留所有含有以_handler结尾的符号的段,可以使用如下的选项:-keep*_handler
2.object(section)这个选项指定了在删除未使用段时,保留目标文件中的section段。输入段和目标名是不区分大小写的,例如,为了在目标文件vectors.o中保留vect段,使用:-keepvectors.o(vect)为了保留vectors.o中的所有以vec开头的段名,可以使用选项:-keepvectors.o(vec*)
3.object这个选项指定在删除未使用段时,保留该目标文件唯一的输入段。目标名是不区分大小写的,如果使用这个选项的时候,目标文件中所含的输入段不止一个的话,armlink会给出出错信息。比如,为了保留每一个以

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top