ATJ2157 sct语法
公共知识篇
BNF 简介
巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur,首次引入一种形式化符号来描述给定语言的语法。
简称为:BNF符号。
现在,几乎每一位新编程语言书籍的作者都使用巴科斯范式来定义编程语言的语法规则巴科斯范式的内容
在双引号中的字(“word”)代表着这些字符本身。而double_quote用来代表双引号。
在双引号外的字(有可能有下划线)代表着语法部分。
尖括号( < > )内包含的为必选项。
方括号( [ ] )内包含的为可选项。
大括号( { } )内包含的为可重复0至无数次的项。
竖线( | )表示在其左右两边任选一项,相当于"OR"的意思。
::= 是“被定义为”的意思。
关于具体的例子可以上网搜索,网上资料比较齐全
Sct脚本
Sct 的全称是 Scatter File Syntax,
Sct的作用
在学习一个东西之前,首先要明白,她是干什么的?那么sct脚本文件到底是什么东西?
其实吧,sct脚本文件是描述如何把输入文件中的节(sections)映射到输出文件中,并控制输出文件的存储布局的脚本文件。并且sct的语法是遵守BNF的语法规则的。
Sct的语法规则
一个.sct文件,包括了一个或者多个加载域(load region),每个加载域也包括一个或者多个执行域(execution region)
下面是一个.sct文件的文件结构图
1. 加载域描述(Loadd region descriptions)
其实加载域就是用来描述下内存的区域,这个区域是用来存放执行域的
加载区域描述的组件允许您唯一标识加载区域,并控制ELF文件的哪些部分放置在该区域中
加载域的具体结构
一个加载域描述,应该包括哪些内容呢?
1:名字(被编译器用来识别不同的加载域)
2:一个基地址(代码或数据的开始地址)
3:属性说明
4:大小
5:一个或者多个执行域
加载域的语法详解
符合BNF的规则,对规则不了解的可以百度下
load_region_description ::= load_region_name (base_address | (“+”
offset)) [attribute_list] [max_size]
“{”
execution_region_description+
“}”
load_region_name:
加载域的名字,这个是区域中区分大小写的
base_address :
这个区域内被链接的地址,注意要满足对齐的要求
+offset:
描述一个基地址,其偏移字节超出了前一个加载区域的结尾,offset必须是4字节对齐,如果这是第一个加载区域,那么+offset意味着基址从零开始偏移字节。如果使用+offset,则加载区域可能从以前的加载区域继承某些属性
attribute_list:
待定补充
max_size:
指定加载区域的最大大小。这是在执行任何解压缩或零初始化之前加载区域的大小。如果指定了可选的max_size值,那么如果分配给armlink的区域超过max_size字节,则armlink将生成错误
execution_region_description:
指定执行区域名称、地址和内容
加载的属性问题
PI 与地址无关方式存放;
RELOC 重新部署,保留定位信息,以便重新定位该段到新的执行区;
OVERLAY 覆盖,允许多个可执行区域在同一个地址,ADS不支持;
ABSOLUTE 绝对地址(默认);
加载域的继承问题
一个加载域继承另一个加载域的属性,请使用+offset
RELOC属性的继承规则
如果显性设置了一个加载域的属性为RELOC,那么执行域只能承认,不能设置
如下:
LR1 0x8000 RELOC
{
ER1 +0 ; inherits RELOC from LR1