我在没有闪存的嵌入式系统上实现GCC链接器脚本,它只有RAM。
MEMORY {
RAM(rwx) :ORIGIN = 0x04000000, LENGTH = 160K
DLM(rwx) :ORIGIN = 0x08000000, LENGTH = 32K
}
SECTIONS
{
.text :
{
*(.text*)
}>RAM AT>RAM
.data :
{
*(.data*)
}>RAM AT>RAM
.bss :
{
*(.bss*)
*(COMMON)
}>RAM AT>RAM
}
结果是.bss部分占用LMA视图上的RAM内存大小,这是不合理的。 .bss不应占用LMA视图中的RAM大小,并且当系统运行.bss区域init时会占用VMA内存大小
但我修改如下
.bss :
{
*(.bss*)
*(COMMON)
}>DLM AT>RAM
结果是.bss部分在LMA视图上不占用大小,这是根据GCC ld预期的。
但是当LMA和VMA都在同一个内存(RAM)中时,为什么.bss部分会占用RAM内存大小?它没有意义。