018链接器脚本

1、链接器脚本的神奇作用

  通过使用不同的链接器脚本,不需要更改源代码,就可以实现不同的功能!

  链接器脚本对程序的生成有着至关重要的作用!

2、链接器脚本--->段

  一个可执行程序通常是由:代码段,数据段,bss段构成的。

  同样,在用于链接这个程序的链接器脚本中,就会反映出这几个段的信息。

  段的信息是由SECTIONS固定的标号指明链接器脚本最重要的信息是段;

  代码段里面包含的是所有文件的代码;

  数据段包含的是所有文件的数据;

  最基本的框架如下:

  

3、链接器脚本--->设置起始链接地址

  . = 0x0;

  .(点)表示当前位置,在整个程序中最前面,在代码段之前的位置,当然是程序的起始地址,程序的刚开始地址;

    那么程序是从哪一个地址开始链接呢?后面跟的信息就是程序的链接地址;  

  

  

4、链接器脚本--->对齐设置

  为什么要做4字节对齐?ARM处理器在访问时实际上是采用4字节对齐的方式去访问的,所以说希望在存储一些数据时,尽量的做到4字节对齐,这样能够提高访问的效率;在存放大数据时,希望能够做到4字节对齐,也就是从4的整数倍的这样一个地址开始存放。

  如果起始地址就不能做到4字节对齐,可以使用 . = ALIGN(4); 对地址进行调整;

  

  

5、链接器脚本--->使用变量

  用bss_start记录当前地址,bss_end记录当前地址,但是这两个地址不一样,因为中间隔了一个bss段;

  如果在程序中想计算bss段的长度,就可以用bss_end - bss_start来计算这个长度;

  

  

6、链接器脚本--->设置代码段首文件

  用到不同的链接器脚本,可以让程序运行出完全不同的效果;

  上面那些内容不足以对程序产生那么大影响,虽然有一些修改,但是程序不会体现出完全不同的两种效果,这个神奇之处在代码段的头文件这个位置;

  程序包含多个文件,哪一个文件排在代码段的最前面呢?是有讲究的,二三四的顺序可以不管,但是第一的顺序必须管,第一个文件需要做什么CPU初始化,是首先必须要执行的代码,CPU上电之后,首先必须要执行这个代码,必须要保证,程序在链接时链接到最前面,排第一,怎么做呢?要在代码段中做一个设置。

  

  

  

  

时间: 2024-12-28 19:02:57

018链接器脚本的相关文章

[国嵌笔记][018][链接器脚本]

链接器脚本 一个可执行程序通常由:代码段.数据段.bss段构成.在用于链接这个程序的链接器脚本中,反应的是这几个段的信息. 创建链接器脚本 1.创建链接器脚本 vim led.lds 2.设置起始链接地址 . = 0x30008000 3.对其设置 . = ALIGN(4); arm处理器在访问数据的时候是以4字节对齐的方式访问的,所以在存储数据时以4字节对齐可以提高访问效率 4.使用变量 start_adr = .; 使用变量保存下来的地址可以在程序中使用 5.设置代码段的首文件 led.o(

编写链接器脚本

一个链接器脚本里面有三个段:代码段,数据段,bss段. 除了段的信息,一个链接器脚本还应该包括: 1.规定起始链接地址. 2.指明对齐方式. 3.还可以设置变量. 4.规定哪个文件时代码首文件. 下面敲得是一段完整的链接器脚本的文件.代码首文件是指链接的时候把哪一个文件放在最前面. 使用方法为: 来自为知笔记(Wiz)

链接器脚本

SECTIONS { . = 0x30008000;    //指定链接地址 . = ALIGN(4);        //指定对齐方式4字节对齐 .text :    //代码段 { led.o (.text)          //设置代码段首文件 *(.text)               //表示所有文件的代码段 }   . = ALIGN(4); .rodata : {*(.rodata)} . = ALIGN(4); .data : //数据段 { *(.data) ////表示所

【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705  参考博客 : [嵌入式开发]嵌入式 开发环境 (远程登录 | 文件共享 | NFS TFTP 服务器 | 串口连接 | Win8.1 + RedHat Enterprise 6.3 + Vmware11) 开发环境 : -- 操作系统 : Vmware11 + RedHat6.3 企业版 + Win8.1; -- 硬件 : OK-6410-A 开发

什么是链接器脚本?

链接器脚本 链接定位是系统级软件开发过程中必不可少的一部分,嵌入式软件开发均属于系统级开发,绝大部分嵌入式软件都涉及到链接定位脚本文件;链接定位脚本使得我们的目标代码组织更加灵活. 脚本的构成: 1.      段 一个可执行程序通常包括:代码段:存放代码的地方 数据段:存放初始化之后的全局变量 Bss段:存放未初始化的全局变量 同样,在用于链接这个程序的链接器脚本中,就会反应这几个段的信息. 2.      起始链接地址 3.      对齐 4.      变量 5.      代码段首文件

4.链接器脚本

4.链接器脚本 一.体验: 首先先看一个例子:图1-1: 编译烧写的过程: main.c的截图: 可以看到在main函数中点亮了第一个盏灯: 图1-1 点灯 在这个例子中的gboot.lds的代码为: OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { ????. = 0x50008000; ???? ????. = ALIGN(4); ????.text : ????{ ????start.o (.text) //.text指明的是代码段,代码段里指定第一个执行

lscript.ld 链接器脚本

sumary选项卡 lscript.ld是这个应用程序的链接器脚本. 这是实用的作为一个报告 看看内存是针相应用程序. 它也能够被编辑以改变应用程序的位置.双击Hello_Zynqàsrcà lscript. 如今ld.注意,窗体打开的图形视图 Summary选项卡的左下角. 我们将看看Source选项卡 堆栈大小 Source选项卡: 如今你看到的链接器脚本源码生成摘要.这 也可编辑视图. 假设你想要改变全部部分的芯片上的内存,你能够 做一个全球搜索和替换.是直接的,编辑链接器脚本以这样的方式

2016.4.6 链接器脚本文件的编写

1.链接器脚本文件的组成: 基本构成:段:代码段.text     数据段.data    bss段 .bss 起始链接地址 对齐 变量 代码段首文件 2.实例文件: SECTIONS{ . = 0x0;  //设置程序起始链接地址,=左右两边要空格 . = ALIGN(4);//,设置代码段四字节对齐,=左右两边要空格 .text ://冒号前要空格 { start.o(.text)//设置代码段首文件,CPU一上电就开始执行. *(.text) } . = ALIGN(4);//设置数据段四

007.链接器命令脚本LD文件教程(1)

开发人员如何指定一个二进制镜像文件的内部布局呢?可以传递给链接器一个链接描述文件,也成为链接器命令脚本.可以将这个特殊的文件看做一份构造二进制可执行镜像的"配方".下面代码中显示了U-Boot引导加载程序使用的链接器描述文件的部分内容. 该脚本从这里开始定义了二进制ELF镜像的输出段.它指示链接器将名为.resetvec的代码段放置在数据镜像的固定地址处,即地址0xFFFFFFFC.此外,它还指定这个段的剩余部分全部填充为1(0xffff).这是因为一个闪存的存储阵列在被擦除后内容全部