【发布时间】:2021-10-28 16:48:33
【问题描述】:
我正在将 GNU 工具链用于我正在处理的 ARM 项目。该项目包括一个实时操作系统 (RTOS),并利用了 ARM Cortex-R4 CPU 的内存保护单元 (MPU)。
我正在使用链接器命令 (.ld) 文件将 .bss 和 .data 部分映射到可供需要访问的任务使用的内存块。
这个特定的应用程序有几种不同的构建配置。该项目有两个顶级源代码文件夹,出于所有意图和目的,我将其称为common 和custom。 common 文件夹包含所有构建配置使用的所有源代码,custom 文件夹包含每个构建配置的一个子文件夹,其中包含特定于该构建配置的源代码。比如custom/build_cfg1、custom/build_cfg2等。
所有custom 源代码都是从单个 RTOS 任务中调用的。我想设置链接器文件,以便能够根据文件位置将 custom 文件夹中的所有 .data 和 .bss 部分放入一个单独的部分中,但我使用的方法没有捕捉到.data 和 .bss 部分。以下是链接器命令文件的示例:
.custom_bss (NOLOAD) : AT (0)
{
custom_bss_start = .;
"./custom/*" (.bss.*)
custom_bss_end = .;
}
/* Define initialized data separately since it must be loaded. */
.custom_data : AT(ld_custom_data_load_addr)
{
custom_data_start = .;
"./custom/*" (.data.*)
custom_data_end = .;
}
需要注意的几点:
- 我已验证传递给链接器的文件路径以
./custom/开头,并且.data和.bss部分被映射到全部.data和.bss部分。 -
common文件夹中的源文件已根据需要进行映射。 - 我已将构建器配置为仅在编译和链接时包含活动构建配置的文件。
- 部分是使用
.bss.*和.data.*指定的,因为我在编译时使用了-fdata-sections选项。
是否有一种指定文件名的技术,允许我使用链接器命令文件将文件夹及其子文件夹中的所有 .bss 和 .data 部分映射到特定部分?
【问题讨论】: