嵌入式学习-uboot-lesson1-链接器脚本基础知识

1.链接器脚本的作用

链接脚本的作用是描述输入文件中的各个段(数据段,代码段,堆,栈,bss)如何被映射到输出文件中,并控制输出文件的内存排布

2.链接器脚本的组成
一个可执行程序通常是由:代码段,数据段,bss段构成的。同样,在用于链接这个程序的链接器脚本中,就会反应出这几个段的信息。

3.编程实例
一个链接器脚本主要分为几个方面:
段,起始链接地址,对齐设置,变量的使用

3.1 段信息
主要为代码段,数据段,bss段

SECTIONS{    //SECTIONS 固定格式
        .text: //代码段
        {
        *(.text)  //所有文件的代码
        }

        .data:  //数据段
        {
        *(.data)  //所有文件的数据段
        }        

        .bss:  //
        {
        *(.bss)  //
        }        
}

3.2设置链接地址

SECTIONS{    //SECTIONS 固定格式
        .= 0x50008000;     //. 代表当前位置,也就是起始位置

        .text: //代码段
        {
        *(.text)  //所有文件的代码
        }

        .data:  //数据段
        {
        *(.data)  //所有文件的数据段
        }        

        .bss:  //
        {
        *(.bss)  //
        }        
}

3.3对齐设置
arm处理器在访问的时候,是采用4字节的方式访问的,所以在存取数据的时候字节用4字节对齐,可以提高效率

SECTIONS{    //SECTIONS 固定格式
        . = 0x50008000;     //. 代表当前位置,也就是起始位置
        . = ALIGN(4);       //当前地址做到4字节对齐
        .text: //代码段
        {
        *(.text)  //所有文件的代码
        }

        . = ALIGN(4);       //数据段也要做到4字节对齐
        .data:  //数据段
        {
        *(.data)  //所有文件的数据段
        }        

        . = ALIGN(4);       //bss端也要做到4字节对齐
        .bss:  //
        {
        *(.bss)  //
        }        
}

3.4使用变量

SECTIONS{    //SECTIONS 固定格式
        . = 0x50008000;     //. 代表当前位置,也就是起始位置
        . = ALIGN(4);       //当前地址做到4字节对齐
        .text: //代码段
        {
        *(.text)  //所有文件的代码
        }

        . = ALIGN(4);       //数据段也要做到4字节对齐
        .data:  //数据段
        {
        *(.data)  //所有文件的数据段
        }        

        . = ALIGN(4);       //bss端也要做到4字节对齐
        bss_start = .;      //bss_start为自定义的变量,将当前地址赋给bss_start
        .bss:  //
        {
        *(.bss)  //
        }    
        bss_end = .;      //假设.的地址为100 则bss_start为100  bss段总长度为200 则bss_end地址为300
}

3.5设置代码段的首文件

SECTIONS{    //SECTIONS 固定格式
        . = 0x50008000;     //. 代表当前位置,也就是起始位置
        . = ALIGN(4);       //当前地址做到4字节对齐
        .text: //代码段
        {
        start.o(.text)      //首文件,即start.s
        *(.text)  //所有文件的代码
        }

        . = ALIGN(4);       //数据段也要做到4字节对齐
        .data:  //数据段
        {
        *(.data)  //所有文件的数据段
        }        

        . = ALIGN(4);       //bss端也要做到4字节对齐
        bss_start = .;      //bss_start为自定义的变量,将当前地址赋给bss_start
        .bss:  //
        {
        *(.bss)  //
        }    
        bss_end = .;      //假设.为100 则bss_start为100  bss段长度为200 则bss_end为300
}

菜鸟一枚,如有错误,欢迎指教。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值