【发布时间】:2016-06-18 05:06:19
【问题描述】:
GNU LD 链接器命令语言是否有条件语句?
上下文:我正在为 arm cortex m0+ 开发固件,该固件由引导加载程序和应用程序组成。两者都在单独的项目中进行编译和闪存,但我使用了一个框架,其中包含指向驱动程序、makefile 和加载程序脚本的符号链接,这样我就可以为我制作的每个应用程序重用这些文件,而无需为每个应用程序复制这些文件。 目前我有两个加载器文件,用于引导加载器和应用程序(makefile 自动指定适当的一个),内存分配如下:
引导加载程序
MEMORY {
flash (rx) : ORIGIN = 0x00000000, LENGTH = 16K
ram (rwx) : ORIGIN = 0x1FFFF000, LENGTH = 16K
}
应用程序
MEMORY {
flash (rx) : ORIGIN = 0x00004000, LENGTH = 112K
ram (rwx) : ORIGIN = 0x1FFFF000, LENGTH = 16K
}
像 makefile 一样,我想将它们合并成这样的东西(使用 C 表达式来澄清)
MEMORY {
#ifdef(bootloaderSymbol)
flash (rx) : ORIGIN = 0x00000000, LENGTH = 16K
#else
flash (rx) : ORIGIN = 0x00004000, LENGTH = 112K
#endif
ram (rwx) : ORIGIN = 0x1FFFF000, LENGTH = 16K
}
【问题讨论】:
-
查看一些 Linux 内核链接器脚本。它们是高度宏观化的,并且始终是您可以使用 GCC 和 Binutils 做的各种疯狂事情的一个很好的例子。
标签: ld cortex-m linker-scripts