AT91Bootstrap1.16源码中连接脚本文件(elf32-littlearm.lds)分析

该连接文件在AT91Bootstrap1.16\Bootstrap-v1.16目录下

elf32-littlearm.lds

连接脚本文件主要用于规定如何把输入文件内的section放入输出文件内,并控制输出文件内各部分在程序地址空间内的布局

OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm", "elf32-littlearm")

            //指定输出可执行文件是elf格式,32位ARM指令,小端

OUTPUT_ARCH(arm)

//指定输出可执行文件的平台为ARM

ENTRY(reset)

//将符号reset的值设成入口地址, 指定输出可执行文件的起始代码段为reset

SECTIONS //程序具体在flash中分配格式

{

//默认从0x0位置开始分配空间

            . = ALIGN(4);//以下按照4字节对齐 有对齐约束  //指定代码段

            .text : { //代码段将所有的输入文件.text sectin合并成一个.text section

      //该段的地址由定位器符号的指定,即0x0

                   _stext= .; //把_stext赋值为当前位置,即text段的开始位置

                   *(.text)  //所有输入文件的.text section

                   *(.rodata)                 /* read-only data (constants) */

                   *(.rodata*)

                  . = ALIGN(4); //以下按照4字节对齐 有对齐约束

                  _etext = . ; //把_etext赋值为当前位置,即text段的结束位置

               }

            /* collectall initialized .data sections */

            .data : AT( ADDR (.text) + SIZEOF (.text) ) { //已初始化数据段DATA

                   _sdata= .; //把_sdata赋值为当前位置,即data段的开始位置

                   *(.vectors)

                   *(.data)

                   _edata= .; //把_sdata赋值为当前位置,即data段的结束位置

            }

            /* collectall uninitialized .bss sections */

            .bss(NOLOAD) : { 未初始化数据段BSS

                   . =ALIGN(4);

                   _sbss= .;  //把_sbss赋值为当前位置,即bss段的开始位置

                   *(.bss)

                   _ebss= .;  //把_ebss赋值为当前位置,即bss段的结束位置

            }

}

end = .;  /* define aglobal symbol marking the end of application */定义一个全局符号,标记的应用程序的最终


该链接文件需要详细分析出程序代码在Flash中的具体的存储分配结构图。具体需要编译出dis文件???



你可能感兴趣的:(脚本,Flash,application,存储,output,Constants)