第二章 scatter语法(一)基本结构
先来看一下,一个scatter文件的整体结构,如下图:

接下来分别对其进行详细说明。
2.1 加载region的描述信息
加载region的描述信息指出了它的孩子——执行region——的放置情况
2.1.1 加载region的描述信息组成元素
加载region描述信息由下面组成:
- 名字——被链接器用于标记唯一的加载region
- 基址——在这个region下的数据和代码开始的地址
- 属性
- 可选的最大长度
- 一个或多个执行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:
该属性阻止:
- 加载region的重叠
- venner的共享
- 使用–merge选项共享字符串
注意:venner,指的是链接器生成的一小段代码,这段代码可能用于长距离的跳转等。
RELOC:
标记该region是可重定位的。重定位信息会被保存,使其能够被其他的工具移动到其他位置,已达到可重定位的功效
2.1.3 加载region的地址属性继承规则
加载region可以继承上一个加载region的属性。为了达到此目的,只需要使用+offset的方式设置基址即可。如下情况下无法继承属性:
- 显示的设置了加载region的属性
- 前一个加载region具有OVERLAY属性
你可以显式的使用ABSOLUTE,PI,RELOC,OVERLAY指定地址属性,当地址属性没有被指定时,下面的继承规则将会被应用:
- OVERLAY属性不会被继承
- 加载和执行region的基址默认为ABSOLUTE
- +offset会继承上一个region的地址属性,如果没有上一个region,则为ABSOLUTE属性。
例如:
LR1 0x8000 PI
{
…
}
LR2 +0 ; LR2从LR1继承PI属性
{
…
}
LR3 0x1000 ; LR3不会继承因为它没有相对基址,所以为默认属性ABSOLUTE
{

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

被折叠的 条评论
为什么被折叠?



