一、.ld文件作用

程序代码(.s 和 .c)源文件会经过预编译、编译、汇编、链接最后生成目标可执行文件,.ld文件是作用在链接过程。

链接的作用是:

  1. 合并各个.obj文件的section,合并符号表,进行符号解析;

  1. 符号地址重定位;

  1. 生成可执行文件。

linker_flash.ld:Flash和SRAM内存分配,为Flash构建目标分配代码段和数据段;

linker_ram.ld:SRAM内存分配,为RAM构建目标分配代码段和数据段。

可以利用.ld文件将函数和变量放置到自定义的地址中。

二、文件讲解

1.常用关键词介绍

ENTRY命令:运行一个程序时第一个被执行到的指令的"入口点"。

MEMORY命令:内存块配置命令,一个连接脚本最多一个’MEMORY’命令。

SECTIONS命令:’段’命令,段中又包含多个’节’, SECTIONS命令告诉连接器如何把输入节映射到输出节, 如何把输入节放入到内存中。

KEEP()命令:防止垃圾收集机制把这个节排除在外,同时保证向量表在段中的位置处于最顶端。

ALTGN命令:以多少位对齐,例如ALTGN(4)表示以4位对齐。

.命令:一个点“.”可以用来获取当前内存地址。

*:‘’是一个通配符,可以与所有文件名匹配。例如表达式(.text)表示所有输入文件的.text输入段。

2..ld文件解析

按照常用关键词去解析.ld文件内容即可。

三、指定地址操作

:无法直接将变量或函数直接存到绝对地址(指定地址语法见下),如:

__attribute__ ((at (0x10000000))) uint32_t value = 0x01;

会出现此警告:

表示‘at’后面的指定地址方式不支持,因此忽略掉了。

指定变量地址支持的语法语法:

__attribute__ ((section (".SectionName"))) uint32_t value=0x01;

因此需要自定义一个节用来存放变量或函数。

1.指定地址语法

1)将变量存放指定地址的语法(例如将变量‘uint32_t value’存放到‘standby_ram_data’节中):

__attribute__ ((section (".standby_ram_data"))) uint32_t value=0x01;

编译后.map文件:

2)将函数存放指定地址的语法(例如将函数‘main’存放到‘abcd’节中):

编译后.map文件:

2.自定义节

在linker_flash.ld文件中将int_sram拆分出一段并命名为standby_sram:

在sections{}中编写新的节

编译后在.map文件中能够看到自定义的节:

3.操作演示

在main.c文件中定义变量:

uint32_t value0 = 0x01;
uint32_t value1 = 0x02;
uint32_t zero0 = 0;
uint32_t zero1 = 1;

将初始值不为‘0’的变量放入‘standby_ram_data’节,初始值为‘0’的变量放入‘standby_ram_bss’节。

编译后.map文件:

在maun.c文件中定义函数:

int fun0(void)
{return (0U);
}
int fun1(void)
{return (0U);
}

将‘main()’、‘fun0()’、‘fun1()’放入‘abcd’节。

编译后.map文件:

S32DS中.ld(链接)文件学习相关推荐

  1. 小猫爪:嵌入式小知识07-MCUXpresso GCC ld链接文件解析-链接代码至RAM

    小猫爪:嵌入式小知识07-MCUXpresso GCC ld链接文件解析-链接代码至RAM 1 前言 2 基本语法 3 实例解析 4 链接代码至RAM 4.1 链接自定义section至RAM 4.2 ...

  2. Linux系统中的链接文件

    日志文件系统ext xfs里 1.节点区域 记录的都是文件属性,ls -l file可以看到的内容 ,文件的元数据inode tables 2.数据区域 放的是cat file看到的一切,数据块 ca ...

  3. linux中硬链接文件,科学网—Linux:文件的符号链接和硬链接 - 刘洋洋的博文

    参考:中国大学MOOC课程<Linux系统管理>,授课教师:颜晨阳. 推荐阅读: t.cn/RLXkhpc 1 符号(symbolic)链接 与Windows的快捷方式很像,这些文件很小, ...

  4. Linux中的链接文件

    链接文件分为两种:一种是符号链接(Symbolic Link,国内通常叫软链接),另外一种是硬链接(hard Link).默认情况下,ln命令产生硬链接.ln -s(小写)命令产生符号链接 硬链接与软 ...

  5. 痞子衡嵌入式:MCUXpresso IDE下工程链接文件配置管理与自动生成机制

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso IDE下工程链接文件配置管理与自动生成机制. 痞子衡在 2018 年初写过一个专题 <嵌入式开发文件系列&g ...

  6. RISC-V MCU ld链接脚本说明

    1.什么是ld链接脚本? 通常,程序编译的最后一步就是链接,此过程根据"*.ld"链接文件将多个目标文件(.o)和库文件(.a)输入文件链接成一个可执行输出文件(.elf).涉及到 ...

  7. vue、cnpm不是内部文件_UBoot链接文件 搞懂程序内部长什么样

    对于一个程序而言,他们内部的结构.组成通常是不可见的,但是不可见并不意味着其内部是杂乱无章的排布,仅仅是众多的二进制数据拼凑而成.一份源代码生成最终的可执行文件来驱动我们的机器正常工作,中间必经的两个 ...

  8. 勒索软件好多都使用恶意LNK链接文件欺骗用户 来看趋势科技分析新型LNK-PowerShell攻击...

    当你在桌面或者邮件中看到一个熟悉的图标快捷方式,你估计不会想到一个1.2K的文件,就足以让你中招勒索软件.本文就是给你展示这么小的文件中,会包含多少恶意信息.在文章的开头,先让我们来看两个概念,Lnk ...

  9. 【转载】CodeWarrior IDE使用tips之prm链接文件详解(自定义存储器分区以及自定义RAM数据初始化与在RAM中运行函数)...

    CodeWarrior IDE使用tips之prm链接文件详解(自定义存储器分区以及自定义RAM数据初始化与在RAM中运行函数) 2017-08-19 胡恩伟 汽车电子expert成长之路 内容提要 ...

最新文章

  1. 以实用著称的《PHP与MySQL程序设计(第3版)》问世啦!
  2. bugku ctf 域名解析
  3. 深度学习项目-人群密度估计
  4. python读txt转array_python将txt文件读入为np.array的方法
  5. 想领取开发套件,就来参加AIoT开发者大赛
  6. Reverse原理背后的数学和魔幻艺术
  7. influxDb 异常:{“error“:“retention policy not found: default“}
  8. HTTP响应头信息 Content-Disposition 文件的显示或下载
  9. Rational Rose学习笔记02:创建用例图
  10. zookeeper之理论基础
  11. 洛谷P1018乘积最大——区间DP
  12. php 5.5 preg replace,解决ecshop在php5.5以上环境preg_replace报错方法
  13. Percona PT-kill重构版(PHP)
  14. 一线顶级互联网公司offer的成功经验【转自IT面试】
  15. Android异常与性能优化相关问题及解决办法
  16. KeyBERT进行中文关键词提取
  17. imx533 配置 制作SD卡启动文件系统
  18. spark 并行处理_如何使用Spark集群并行处理大数据
  19. vite打包报错EPERM: operation not permitted
  20. 一个能永久存储网页快照的网站

热门文章

  1. Linux Deploy在安卓手机安装LINUX系统
  2. php创建多级栏目_PHP 实现无限极栏目分类
  3. 纯C语言写计算器界面
  4. Java并发——CountDownLatch
  5. (20200921Solved)UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xca in position 0: invalid cont
  6. js——浏览器缓存(http缓存)和本地存储
  7. JavaScript中字符串数组赋值失败,不是每个字符串,却是字符。
  8. criteria 用法
  9. 谷粒学院 01_在线教育行业介绍
  10. 中国碳酸氢钠市场趋势报告、技术动态创新及市场预测