目的】
便于大家对 scatter 文件的理解学习.
【适用范围】
用到 scatter 文件的地方
【参考文献】
1. ARM 体系结构与编程(主要参考章节,第十一章)
2. 网络资料
【概述】
主要写了 scatter 文件的组成,作用。
【详细描述】
一. 知识点预备:
1. 关于 RO,RW,ZI, 一般而言,一个程序包括只读的代码段和可读写的数据段。在 ARM
的集成开发环境中,只读的代码段和常量被称作 RO 段(ReadOnly);可读写的全局
变量和静态变量被称作 RW 段(ReadWrite);RW 段中要被初始化为零的变量被称为
ZI 段(ZeroInit)。
写一个小程序的例子说明如下:
Int a=0;//ZI 段 可读写
Int b; //ZI 段 可读写
Int c =5;//RW 段 可读写
Const int m=5;//RO 段 只读
Void main(void)//RO 段(也可称作代码段) 只读。
{
Int total;
total = 1000*5;
}
2. 关于 ARM 的映像文件,ARM 中的各种源文件(包括汇编程序.C 语言程序. 以及 C++
程序)生成 ELF 格式的目标文件。这些目标文件和相应的 C/C++ 运行时经过 ARM 连
接器处理后生成 ELF 格式的映像文件(image)。
ARM 映像文件的组成:一个映像文件是一个层次性结构的文件,其中包含了域
(region),输出段(output section)和输入段(input section)。各部分的关系如下 :
. 一个映像文件由一个或多个域组成。
.每个域包含一个或者多个输出段。
. 每个输出段包含一个或多个输入段。
.各输入段包含目标代码文件中的代码和数据。
下面介绍一下各组成部分:
输入段:输入段也就是我我们常说的.o 和.obj 文件,输入段中包含了 4 种内容:代
码,已经初始化的数据,未经初始化的存储区域,内存初始化为 0 存储区域。他们的
属性分别是 RO, RW ZI 。
输出段:一个输出段中包含了一系列具有相同的 RO,RW 和 ZI 属性的输入段。
域:一个域中包含 1~3 个输出段,其中各段的输入属性各不相同。其各输入端的排
列顺序是由其属性决定的。RO 的属性在前,其次是 RW,最后是 ZI.
二:为什么我们要使用 scatter 文件
通常一个映像文件中包含若干域,各域又包含若干输出段。ARM 连接器就需要知道如