连接器脚本 - 2023.2 简体中文

Vitis 统一软件平台文档 嵌入式软件开发 (UG1400)

Document ID
UG1400
Release Date
2023-12-13
Version
2023.2 简体中文

连接器实用工具使用连接器脚本中指定的命令在不同的存储器块上对您的程序进行分割。它描述了所有输入对象中的所有节到可执行文件中的输出节之间的映射。输出节映射到系统中的存储器。如果您不想更改将程序内容连续分配到存储器的默认行为,则无需使用连接器脚本。连接器中提供了一个默认连接器脚本,用于对各节内容进行连续布局。

您可以通过修改 MicroBlaze 处理器上的连接器符号 _TEXT_START_ADDR,或者通过定义 Arm 处理器上的 START_ADDR 来选择仅修改程序的起始地址,如以下示例所示:

mb-gcc <input files and flags> -Wl,-defsym -Wl,_TEXT_START_ADDR=0x100
mb-ld <.o files> -defsym _TEXT_START_ADDR=0x100

默认脚本选项如下所述,这些选项将供来自 $XILINX_/gnu/<procname>/<platform>/<processor_name>/lib/ldscripts 区域的连接器使用,其中 <procname> =microblaze<processor_name> = microblaze,且 <platform> = linnt

  • 默认情况下,当以下情况都不适用时,使用 elf32<procname>.x
  • 当调用的连接器包含 -n 选项时,使用 elf32<procname>.xn
  • 当调用的连接器包含 -N 选项时,使用 elf32<procname>.xbn
  • 当调用的连接器包含 -r 选项时,使用 elf32<procname>.xr
  • 当调用的连接器包含 -Ur 选项时,使用 elf32<procname>.xu

要使用连接器脚本,请在 GCC 命令行上提供该脚本。将命令行选项 -T <script> 用于编译器,如下所述:

compiler -T <linker_script> <Other Options and Input Files>

如果连接器自行执行,那么请按如下所述方式包含连接器脚本:

linker -T <linker_script> <Other Options and Input Files>

这样即可告知 GCC 使用您的连接器脚本来代替默认内置连接器脚本。可从 IP integrator 和 Vitis 软件平台内为您的程序生成连接器脚本。

在 IP integrator 或 Vitis IDE 内,选择Tools > Generate Linker Script(工具 > 生成连接器脚本)。

这样即可打开连接器脚本生成器实用工具。在此处完成将各节映射到存储器的操作。此处可设置堆栈大小以及堆栈的存储器映射。在 IP integrator 或 Vitis 环境内编译对应的应用时,会将生成的连接器脚本作为输入自动提供给 GCC。

连接器脚本可用于向特定存储器分配特定变量或函数。此操作是通过 C 语言代码中的节 (section) 属性来完成的。连接器脚本还可用于向存储器内各节分配特定对象文件。在 binutils 手册所包含的 GNU 连接器文档中对 GNU 连接器脚本的这些特性以及其他特性进行了详细的解释。要获取由 MicroBlaze 处理器连接器脚本所分配的输入节的具体列表,请参阅 MicroBlaze 连接器脚本的各节