GNU 链接文件介绍

本文详细介绍了GNU链接文件的脚本格式,分析了STM32链接文件,讲解了ENTRY、GROUP、OUTPUT等关键命令,并通过实例展示了如何在实际项目中运用这些链接文件,以实现有效的内存管理和程序组织。
摘要由CSDN通过智能技术生成

GNU链接语法

1. 脚本格式

链接脚本是由若干条命令组成,每个命令是由关键字组成
/ * */ 里面放的是注释信息。

2. 对STM32链接文件进行简单分析


/* Entry Point */
/* 入口地址 */
ENTRY(Reset_Handler)

/* Highest address of the user mode stack */
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */

_Min_Heap_Size = 0x200 ; /* required amount of heap */
_Min_Stack_Size = 0x400 ; /* required amount of stack */

/* Memories definition */
MEMORY
{
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 64K
  FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 512K
}
/* Sections */
SECTIONS
{
	/* The startup code into "FLASH" Rom type memory */
	.isr_vector :
	{
		. = ALIGN(4);
		KEEP(*(.isr_vector)) /* Startup code */
		. = ALIGN(4);
	} >FLASH
}

可以简单分析出:

  1. 程序启动地址是Reset_Handler。
  2. 内存分一个空间,起始位置: 0x20000000 长度: 64K
  3. FLASH分一个空间,起始地址: 0x08000000 长度: 512K

3. 命令介绍

  • ENTRY(SYMBOL); SYMBOL可以是一个符号,或者是一个地址。
    选择可执行文件的入口地址,该地址可以由以下方式指定:
  1. 使用gnu-ld命令行的-e选项,后跟入口地址
  2. 脚本的ENTRY命令
  3. 如果定义了start符号,则可以使用start符号值。这个可能和实际链接器有关系。
  4. 使用.text section的开始地址
  5. 使用0
    优先级顺序,1最高,5最低
  • INCLUDE(file) 包含名为file的链接文件,搜索路径按照默认配置路径
    和C代码的#include类似,可以在需要的位置,包含另一个外部链接脚本。搜索路径需要由-L指定。脚本的嵌套使用最高支持10层,超过之后可能会有问题。
  • INPUT(files) 将files作为输入文件。参加链接过程
    首先会在当前路径下,搜索该文件,如果没有找到,则会去-L的指定路径下,进行查找。如果出现在多个脚本,则回按照执行顺序进行链接。
  • GROUP(file) 指定要重复搜索符号定义的多个输入文件。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值