2、语法解释
1、MEMORY命令
/*MEMORY命令,指定存储区域*/
/*形如:*/
/*MEMORY {*/
/*NAME1 [(ATTR)] : ORIGIN = ORIGIN1, LENGTH = LEN2*/
/*NAME2 [(ATTR)] : ORIGIN = ORIGIN2, LENGTH = LEN2*/
/*...*/
/*}*/
/*NAME1为存储区域名,ATTR(可选)为存储区域属性,*/
/*ORIGIN(关键字,亦可写成org或o)存储区域起始地址*/
/*LENGTH(关键字,亦可写成len或l)存储区域大小*/
2、SECTIONS命令
1、SECTIONS命令的一般格式
SECTIONS
{
.dport0.rodata : ALIGN(4)
{
_dport0_rodata_start =ABSOLUTE(.);
*(.dport0.rodata)
*(.dport.rodata)
_dport0_rodata_end =ABSOLUTE(.);
} >dport0_0_seg :dport0_0_phdr
}
1、
其中SECTIONS为命令关键字,
2、
.dport0.rodata: ALIGN(4)
{
。
。
。
}>dport0_0_seg :dport0_0_phdr
为输出文件section描述,ALIGN(4),>dport0_0_seg :dport0_0_phdr为输 出section描述的选项。
3、
*(.dport0.rodata)
*(.dport.rodata)
为输入文件section描述
2、SECTIONS命令的详细描述
/*SECTIONS命令,告诉连接器如何把输入文件映射到输出文件*/
/*形如:*/
/*SECTIONS*/
/*{*/
/*SECTIONS-COMMAND*/
/*SECTIONS-COMMAND*/
/*...*/
/*}*/
/*SECTIONS-COMMAND可以是:*/
/*1、ENTRY命令*/
/*2、符号赋值语句*/
/*3、一个输出section描述(output section description)*/
/*4、一个重叠section描述(overlay description)*/
3、输出section描述
/*输出section描述*/
/*形如:*/
/*SECTION [ADDRESS] [(TYPE)] :[AT(LMA)]*/
/*{*/
/*OUTPUT-SECTION-COMMAND*/
/*OUTPUT-SECTION-COMMAND*/
/*...*/
/*} [>REGION][AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP]*/
/*SECTION,即输出section名,ADDRESS,输出section的VMA地址*/
/*TYPE,输出section的类型,AT(LMA),指定输出section的LMA地址*/
/*OUTPUT-SECTION-COMMAND,输出指令,可以是如下指令:*/
/*1、符号赋值语句*/
/*2、一个输入section描述*/
/*3、直接包含的数据值*/
/*4、一个特殊的输出section关键字*/
/*>REGION,指定存储区域名为REGION,AT>LMA_REGION效果同AT()*/
/*PHDR,指定段名为PHDR,可以多个*/
/*=FILLEXP,指定填充碎片所使用的数值为FILLEXP*/
4、输入section描述
/*输入section描述*/
/*形如:FILENAME([EXCLUDE_FILE (FILENAME1 FILENAME2 ...) SECTION1 SECTION2 ...)*/
/*FILENAME,文件名,可以以通配符描述一类文件*/
/*EXCLUDE_FILE,过滤掉FILENAME1,FILENAME2...等文件*/
/*SECTION1,SECTION2...,输入文件section名*/
/*每个输入文件的每个section在整个程序中只引用一次*/