【发布时间】:2019-11-27 04:54:26
【问题描述】:
我有一个非对称双核 (ARM) 控制器(A5 核和 M4 核)。
我想创建一个二进制文件,我可以将其写入控制器的 RAM/ROM,然后为两个内核执行代码。
我将 M4 代码作为 .o 文件包含在 A5 链接器 ld 中。由于选项--gc-sections,该部分被垃圾收集。有什么方法可以保留此部分,但仍对所有其他部分使用选项 --gc-sections?
更详细:
我构建了 m4 代码并从二进制输出中创建了一个 .o 文件。
COMMAND arm-none-eabi-objcopy.exe -O binary --gap-fill 0xff m4_tester.elf m4_tester.bin
COMMAND arm-none-eabi-objcopy.exe -I binary -O elf32-littlearm -B arm m4_tester.bin m4_tester.o
我将这个文件作为一个部分包含在 A5 项目链接器 .ld 文件中:
SECTIONS
{
.m4stuff : {
. = ALIGN(4);
m4_tester.o
KEEP(*(.m4stuff))
. = ALIGN(4);
} > m4code
...
}
到目前为止,一切正常,在地图文件中看起来像这样:
.m4stuff 0x3f4e0000 0xd68
0x3f4e0000 . = ALIGN (0x4)
m4_tester.o()
.data 0x3f4e0000 0xd68 m4_tester.o
0x3f4e0000 _binary_m4_tester_bin_start
0x3f4e0d68 _binary_m4_tester_bin_end
*(.m4stuff)
0x3f4e0d68 . = ALIGN (0x4)
现在我还想使用链接器选项--gc-sections。根据它的定义,m4stuff 部分现在是垃圾收集:
.m4stuff 0x3f4e0000 0x0
0x3f4e0000 . = ALIGN (0x4)
m4_tester.o()
*(.m4stuff)
0x3f4e0000 . = ALIGN (0x4)
有什么方法可以保留此部分,但仍对所有其他部分使用选项 --gc-sections?
【问题讨论】:
-
这个Include binary in ld script 问题有一些其他方法可以做到这一点,可以避免“保持”并且更适合用例(对于可能会看这里的海报或其他人)。