armlink 第二章 scatter语法(一)

本文深入解析scatter文件的基本结构,包括加载region和执行region的描述信息,详细介绍了它们的组成元素、属性及地址属性的继承规则,同时阐述了输入section的描述信息。

第二章 scatter语法(一)基本结构

先来看一下,一个scatter文件的整体结构,如下图:
在这里插入图片描述
接下来分别对其进行详细说明。

2.1 加载region的描述信息

加载region的描述信息指出了它的孩子——执行region——的放置情况

2.1.1 加载region的描述信息组成元素

加载region描述信息由下面组成:

  1. 名字——被链接器用于标记唯一的加载region
  2. 基址——在这个region下的数据和代码开始的地址
  3. 属性
  4. 可选的最大长度
  5. 一个或多个执行regoin

如下图

在这里插入图片描述

2.1.2 加载region的属性

ABSOLUTE:

链接之后,内容被放置在一个固定地址。除非你使用PI或者RELOC属性,否则这个属性是默认值

ALIGN aligment:

将4字节对齐,增加到aligment字节对齐。aligment必须是2的正数幂。如果加载region直接指定基址,那么基址必须对齐;如果加载region使用+offset的方式指定基址,那么链接器自动计算以保证对齐。

NOCOMPRESS:

默认情况下RW数据被压缩,该属性使得RW数据内容不被压缩。

OVERLAY:

该属性使得在同一个地址,具有多个加载region。ARM工具集不会提供overlay机制。为了在同一个位置放置多个加载region,你必须提供自己的overlay管理器。

PI:

标记该region是地址无关的。内容不会依赖于任何固定的地址。

PROTECTED:

该属性阻止:

  1. 加载region的重叠
  2. venner的共享
  3. 使用–merge选项共享字符串

注意:venner,指的是链接器生成的一小段代码,这段代码可能用于长距离的跳转等。

RELOC:

标记该region是可重定位的。重定位信息会被保存,使其能够被其他的工具移动到其他位置,已达到可重定位的功效

2.1.3 加载region的地址属性继承规则

加载region可以继承上一个加载region的属性。为了达到此目的,只需要使用+offset的方式设置基址即可。如下情况下无法继承属性:

  1. 显示的设置了加载region的属性
  2. 前一个加载region具有OVERLAY属性

你可以显式的使用ABSOLUTE,PI,RELOC,OVERLAY指定地址属性,当地址属性没有被指定时,下面的继承规则将会被应用:

  1. OVERLAY属性不会被继承
  2. 加载和执行region的基址默认为ABSOLUTE
  3. +offset会继承上一个region的地址属性,如果没有上一个region,则为ABSOLUTE属性。

例如:

LR1 0x8000 PI
{
   
   }
LR2 +0 ; LR2LR1继承PI属性
{
   
   }
LR3 0x1000 ; LR3不会继承因为它没有相对基址,所以为默认属性ABSOLUTE
{
   
   
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值