4.链接器脚本

发布者:电子艺术大师最新更新时间:2024-10-31 来源: cnblogs关键字:链接器脚本  编译  烧写 手机看文章 扫描二维码
随时随地手机看文章

一、体验:

首先先看一个例子:图1-1:

编译烧写的过程:

main.c的截图:

可以看到在main函数中点亮了第一个盏灯:

图1-1 点灯

在这个例子中的gboot.lds的代码为:

OUTPUT_ARCH(arm)

ENTRY(_start)

SECTIONS {

    . = 0x50008000;

    

    . = ALIGN(4);

    .text :

    {

    start.o (.text) //.text指明的是代码段,代码段里指定第一个执行的文件是start.o.

                //接下来改变这个文件,改为main.o的运行结果如下。图1-2

    *(.text)

    }

 

    . = ALIGN(4);

    .data :

    {

    *(.data)

    }

    

    . = ALIGN(4);

    bss_start = .;

    .bss :

    {

    *(.bss)

    }

    bss_end = .;

}

 

当在lds文件里改变第一个运行的文件后的截图:图1-2:

Gboot.lds代码:

OUTPUT_ARCH(arm)

ENTRY(_start)

SECTIONS {

    . = 0x50008000;

    

    . = ALIGN(4);

    .text :

    {

    main.o (.text)//改变为main.o为第一个运行的文件。结果等点不亮。图1-2:

    *(.text)

    }

 

    . = ALIGN(4);

    .data :

    {

    *(.data)

    }

    

    . = ALIGN(4);

    bss_start = .;

    .bss :

    {

    *(.bss)

    }

    bss_end = .;

}

 

 

图1-2

这就是链接器脚本的作用,能够影响整个工程的结果。下面对链接器脚本进行介绍。

 

二、链接器脚本:

        链接器脚本的构成:

  1. 基本构成是:段

  2. 起始链接地址

  3. 对齐

  4. 变量

  5. 代码段首文件

一个可执行程序通常包括:代码段,数据段,bss段。由此,一个链接器用于链接这个程序,就会反映这几个段的信息。

SECTIONS {//固定格式

    . = 0x50008000;//.点表示程序的起始地址,现在设置程序运行的起始地址是0x50008000

                //可以反汇编查看程序运行的起始地址图1-3:

    . = ALIGN(4);//设置四字节对齐,就是地址能整除4。这是因为ARM访问内存是4字节

//对齐的,为了提高效率,所以在存放数据的时候做到4字节对齐。所以ALIGN(4)的功

//能就是使当前的地址调整为四字节对齐。例如当前的地址是1,它会自动加上3,变

//四字节对齐。

    .text :

    {

    start.o (.text) //设置段首文件为start.o,就是上电第一个运行的代码。

    *(.text) //.text代码段,代码段是所有文件(*)的代码段

    }

 

    . = ALIGN(4);

    .data :

    {

    *(.data) //.data数据段,数据段是所有文件(*)的数据段

    }

    

    . = ALIGN(4);

    bss_start = .;//链接器脚本的变量,记录当前的地址

    .bss : //bss段开始

    {

    *(.bss) //.bss段,bss段是所有文件(*)的bss段

    }

    bss_end = .; //链接器脚本的变量,记录当前的地址。通过与前面的bss_start的差就是这

    //bss段的大小。

}

 

查看程序运行的起始地址确实是0x50008000:图1-3:

图1-3

这里,只要知道可以从这里改变程序的起始链接地址就可以了。后面会讲该操作的重要性。

这些就是lds链接文件的基本知识。


关键字:链接器脚本  编译  烧写 引用地址:4.链接器脚本

上一篇:5.Eclipse集成开发环境
下一篇:3.Makefile工程管理

推荐阅读最新更新时间:2026-03-25 12:45

[国嵌笔记][018][链接脚本]
链接器脚本 一个可执行程序通常由:代码段、数据段、bss段构成。在用于链接这个程序的链接器脚本中,反应的是这几个段的信息。 创建链接器脚本 1.创建链接器脚本 vim led.lds 2.设置起始链接地址 . = 0x30008000 3.对其设置 . = ALIGN(4); arm处理器在访问数据的时候是以4字节对齐的方式访问的,所以在存储数据时以4字节对齐可以提高访问效率 4.使用变量 start_adr = .; 使用变量保存下来的地址可以在程序中使用 5.设置代码段的首文件 led.o(.text) 通过设置首文件,保证一个文件在程序开始时被执行 1 2 3 4 5 6 7 8 9 10 11 12 13
[单片机]
ESP32学习笔记(51)——搭建环境、编译烧写(Windows+Espressif-IDE)
一、搭建环境 1.1 官方资料 ESP-IDF 编程指南 1.2 下载Espressif-IDE安装器 官网下载:https://dl.espressif.cn/dl/esp-idf/?idf=4.4 百度网盘:https://pan.baidu.com/s/1cXP7lRmmohUu-PkNdxYHVw?pwd=g33x 提取码:g33x 打开 espressif-ide-setup-espressif-ide-2.5.0-with-esp-idf-4.4.exe 安装前系统检测,如果需要应用修复,则点击应用修复完成后点击下一步 选择安装目标位置 不要安装在带有空格的路径 选择安装组件 准备安
[单片机]
GD32F103学习笔记(1)——搭建环境、编译烧写
一、搭建环境 1.1 官方资料 GD32F10x 资料下载 1.2 安装Keil 5 官网下载: http://www2.keil.com/mdk5/ 百度网盘: https://pan.baidu.com/s/1T_eF5NDYeq38bR0cqjiZkw 提取码:562z 阿里云盘: https://www.aliyundrive.com/s/giDvR2ShJR9 1.3 下载SDK 官网下载: http://www.gd32mcu.com/download/down/document_id/180/path_type/1 百度网盘: https://pan.baidu.com/s/1vneR70WP9qm9S
[单片机]
S3C2440移植uboot之编译烧写uboot
文章目录 移植环境 获取uboot 更新交叉编译工具 配置环境变量 移植环境 主 机:VMWare–ubuntu16.04 开发板:S3C2440 编译器:arm-linux-gcc-4.3.2.tgz u-boot:u-boot-2012.04.01.tar.bz2 获取uboot 进入https://www.denx.de/wiki/U-Boot下载uboot 一直往下拉选择如下 将下载好的压缩包解压到任意文件夹,并创建source insight工程。将下载好的u-boot-2012.04.01.tar_2.bz2放到ubuntu服务器/work/system中。执行以下命令解压uboot: cd
[单片机]
S3C2440移植uboot之<font color='red'>编译</font><font color='red'>烧写</font>uboot
2.如何用手机烧写STM32的程序
一、如何用手机通过DFU烧写STM32的程序 DFU DFU就是一种通过USB烧写程序的方式。无需J-LINK和ST_LINK。 如何操作? 1.首先安装程序。 StmDfuUsb_1.14.apk(见附件一) 2.连接手机与单片机。可以通过一根type-c线和一根USB转type-c的转接线(注意主从机问题,转接线要连在手机上)来连接。 3.打开程序。 可以发现现在我们的单片机还没被识别。 4.按住核心板上的BOOT0,并按一下NRST。很快啊,手机就有反应了。之后就可以松开BOOT0了。 选确定 这样就连上了。 5.点这里选择文件(.hex) 6.有一些设置可以调,比如: 7.烧写! 8
[单片机]
2.如何用手机<font color='red'>烧写</font>STM32的程序
STM32F429-Discovery 使用stlink-1.2.0 在Linux下烧写调试RTEMS
STM32F429-Discovery默认带有STLink,可以在Linux环境下使用。我用的是VM CenOS 6.6。 编译:stlink-1.2.0 下载最新的或是stlink-1.2.0 release 解压缩。 在配置安装前,需要安装环境需要的工具软件: libusb-1.0或更高 与 pkgconfig-0.17.2 安装完后,进入stlink目录下。 # ./autogen.sh (会提示上面的两个工具软件是否正常安装) # ./configure # make # make install (安装后,可以在shell下直接使用st-util st-flash 等命令) 如果出现错误,可能是RTEMS 4.11工具
[单片机]
4412开发板一键烧写QT程序到开发板-安装ssh
我们把之前我们做好的 QT 的文件系统拷贝到 Ubuntu 上,然后新建一个名为 root 的文件夹,在这个文件夹下解压我们拷贝到 Ubuntu 的 QT 的文件系统或者将没有打包的文件系统放进去。因为我们要把编译好的 ssh 安装到文件系统里面。如图 62.6.2.1 所示: 在解压或者拷贝到的文件系统“/usr/libexec“、 “/usr/local/etc ” 、 “/usr/local/bin ” 三个目录, 使用命令“mkdir -p ./usr/libexec ./usr/local/etc ./usr/local/bin ” ,如图 62.6.2.2 所示 在虚拟机 Ubuntu 上,将 openssh-6.
[单片机]
4412开发板一键<font color='red'>烧写</font>QT程序到开发板-安装ssh
迅为i.MX6ULL终结者Mfgtools修改单独只烧写Uboot,内核,文件系统
1.打开mfgtools_for_6ULL文件夹,找到cfg.ini文件,如果您的板子是EMMC的修改如图 1: 如果您的板子是NAND的,修改如图 2: 2.打开“Profiles Linux OS Firmwareucl2.xml文件,修改此文件 如果您想mfgtools只烧写uboot,就把下图的代码注释掉,其余的不要动 图 3是修改NAND的板子 图 4是修改EMMC的板子 图 5是修改NAND的板子,如果您想mfgtools只烧写内核,就把下面图一的代码注释掉,其余的不要动。 图 6是修改EMMC的板子,如果您想mfgtools只烧写zImage,就注释掉下面图二的代码,其余的不要动。 图 7是修改EMMC的板子
[单片机]
迅为i.MX6ULL终结者Mfgtools修改单独只<font color='red'>烧写</font>Uboot,内核,文件系统
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved