链接文件lds

一段典型脚本:(hello.lds)

ENTRY(helloworld)

SECTIONS

{

    . = 0x20008000;

    .text :

    {

        start.o(.text);

        *(.text);

    }

    . = ALIGN(4);

    .data :

    {

        *(.data);

    }

    .bss :

    {

        *(.bss);

    }

}   

----------------------------------

1、点号(.):

    点号在SECTIONS命令里称为位置计数器,代表了当前位置。如上面的0x20008000表示代码段的起始位置从这个值开始。

    也可以不指定,如.data段和.bss段;代表紧挨着上面的段分布。如果一开始就不指定,则默认值为0。

2、输出段(.text/.data/.bss):

    各关键字代表了输出段的段名,花括号内定义了各段对应的内容。段名可任意定义,输出段的实际内容与段名无关,只与花括号内的具体内容有关。

    如:.text,把列出的(*代表任意)输入文件的.text段合并成一个.text(其中,start.o中的.text放在最前面);

    该段的地址由定位器符号的值指定,即0x20008000;

3、ALIGN(N):

    产生对齐的代码或数据,很多体系结构对对齐的代码或数据有严格的要求。

    如 . = ALIGN(4)表示位置计数器向高地址方向取最近的4字节的整数倍。

4、ENTRY(SYMBOL):

    相等于-e,将符号SYMBOL的值设置成入口地址(进程执行的第一条用户空间的指令,在进程地址空间的地址)。

    arm-linux-ld 有多种方法设置进程入口地址:按以下顺序,优先级依次之:

    1、arm-linux-ld 命令行的 -e 选项;

    2、连接脚本的ENTRY(SYMBOL)命令;

    3、如果定义了start符号,使用start符号值;

    4、如果存在.text section,使用.text section的第一字节的位置值;

    5、使用值0;

-----------------------------------

使用:(运行链接命令时,借助于-T参数)

    arm-linux-ld -T hello.lds -o file.eld

你可能感兴趣的:(基础知识)