首页 > 其他分享 >ld链接脚本一些随笔

ld链接脚本一些随笔

时间:2023-06-02 18:23:51浏览次数:57  
标签:ld AREA FLASH 区域 内存 随笔 链接 加载


链接:将多个目标文件(xx.o)、库文件(xx.a)、动态库(.so)等等链接成一个可执行文件。


常见段含义:
.text 代码段 存放程序执行代码区域
.data 初始化数据段 存放程序中已初始化的全局变量
.bss 未初始化的数据段 存放程序中未初始化的全局变量
.rodata 只读数据段 存放C中的字符串和#define定义的常量
(存放被初始化的数据)
.heap 堆 存放进程运行中被动态分配的内存段(malloc)
.stack 栈 存放程序临时创建的局部变量及函数调用压栈入栈(static 变量存放在数据段) 

 

输入部分是目标文件中的一段数据,它们通常由编译器或汇编器从源代码文件生成。在链接脚本中,可以使用 *(section_name) 语法来选择特定的输入部分并将它们放置在链接脚本中定义的输出部分中。

在链接过程中,链接器会根据链接脚本中的指令,将多个目标文件中的输入部分合并在一起,并确定它们在内存中的位置。最终生成的可执行文件或库文件包含了所有必要的信息,可以被操作系统加载并执行。

因此,输入部分是从目标文件中输入到链接脚本定义的输出部分中。最终,它们将被放置在内存中的相应位置。

 

 


那就是最后结束的地方>MALLOC要加上AT> FLASH,如果不加上的话,bin文件将连续生成,由于我们外部sram的地址在0x68000000,因此,gcc将会把这部分当做flash的地址一部分,也就是说将会生成一个超大的bin文件!

 

>RAM AT>FLASH
解释:

  >RAM:指出区间而不是具体地址:运行时的虚拟地址

  AT>FLASH:指出区间:装载时的装载地址

 

 

CPU执行每条指令,本质上包含5步:取指、译码、执行、访存、写回

Load$$LOAD_AP_FIRAM_ASMB$$Base 的值为 .load_ap_firam_asmb 区域的加载地址。加载地址是指内存区域在可执行文件中的位置。
Image$$LOAD_AP_FIRAM_ASMB$$Base 的值为当前位置。当前位置是指链接器在处理链接脚本时,当前所处的位置。
这两个符号通常用于计算内存区域在运行时的地址。例如,如果你知道某个变量在 .load_ap_firam_asmb 区域中的偏移量,那么你可以使用这两个符号来计算该变量在运行时的地址。

 

在许多嵌入式系统中,程序可以在Flash(非易失性存储器)或SRAM(静态随机访问存储器)中运行。通常,Flash中的代码执行速度较慢,但具有较大的存储容量,而SRAM中的代码执行速度更快,但存储容量较小。

 

该脚本定义了两个符号:Load$$LOAD_DRAM_SHARED$$Base 和 Image$$LOAD_DRAM_SHARED$$Base。这些符号分别表示该内存区域在加载时和运行时的起始地址。

然后,该脚本将所有 .data 段的内容放入该内存区域中。最后,该脚本再次对齐地址。

>MSMB_AREA AT>FLASH_AREA 指定了该内存区域的位置和加载地址。这意味着该内存区域将被放置在 MSMB_AREA 中,并且在加载时将被放置在 FLASH_AREA 中。

链接脚本中的 >MSMB_AREA AT>FLASH_AREA 指定了内存区域的位置和加载地址。>MSMB_AREA 指定了该内存区域在运行时的位置,即该内存区域将被放置在 MSMB_AREA 中。AT>FLASH_AREA 指定了该内存区域在加载时的位置,即该内存区域在加载时将被放置在 FLASH_AREA 中。

这意味着,在程序运行时,该内存区域中的数据将位于 MSMB_AREA 中。但是,在程序加载时,该内存区域中的数据将被临时放置在 FLASH_AREA 中。一旦程序加载完成,数据将被复制到 MSMB_AREA 中。

 

标签:ld,AREA,FLASH,区域,内存,随笔,链接,加载
From: https://www.cnblogs.com/zhouxingxing7920/p/17452649.html

相关文章

  • lucene底层数据结构——FST,针对field使用列存储,delta encode压缩doc ids数组,LZ4压缩算
    参考:http://www.slideshare.net/lucenerevolution/what-is-inaluceneagrandfinalhttp://www.slideshare.net/jpountz/how-does-lucene-store-your-data摘录一些重要的:看一下Lucene的倒排索引是怎么构成的。我们来看一个实际的例子,假设有如下的数据: docid年龄性别118女220女318男 ......
  • wiredtiger引擎性能——比levelDB更牛叉!
    WE'VEJOINEDMONGODB! We'reproudtoannouncethatMongoDBhasacquiredWiredTiger,andwe'vejoinedtheMongoDBteam! WewillbedirectlyinvolvedinsupportingtheWiredTigerstorageengineinMongoDB3.0andwillcontinuetodevelopWire......
  • 自动化软件TIA Portal(博途) V17安装教程和下载链接
    软件介绍 TIA博途是全集成自动化软件TIAportal的简称,是西门子工业自动化集团发布的一款全新的全集成自动化软件。它是业内首个采用统一的工程组态和软件项目环境的自动化软件,几乎适用于所有自动化任务。借助该全新的工程技术软件平台,用户能够快速、直观地开发和调试自动化系统。......
  • How to Find Django ImageField URL
    Thissetupisworkingforme,maybeitwillhelpyou.ItisforlatestversionofDjango.ManyanswersinOSareforolderDjangoversions.URLS:fromdjango.conf.urls.staticimportstaticfromdjango.confimportsettingsurlpatterns=[#url]+static(s......
  • 日本行,一些随笔和照片
    国庆后一周,一家人去了趟日本,因为带着刚一岁出头的包子同学,所以,虽然安排得比较休闲,但还是比较累。图为包子同学在伏见稻荷大社后山,自己下山今天总算慢慢回到工作状态,回顾一下说点感受,贴点图。对于出国游来说,日本是绝对的easy模式,各种指示牌基本都有英文,加上夹杂汉字的日文,连蒙带猜还......
  • 利用Flutter的LayoutBuilder、BoxConstraints创建自适应布局控件
    简介在Flutter中,LayoutBuilder是一个Widget,用于构建一个包含父组件约束的子组件。它可以获取父组件的约束信息并将其传递给子组件进行布局。LayoutBuilder的主要作用是让子组件根据父组件的大小进行自适应布局。LayoutBuilder的作用是在子控件构建之前获取父级容器的大小,并将其传......
  • ubuntu报错:The following signatures couldn't be verified because the public key i
    当在ubuntu中加入了第三方源,没有设置公钥更新索引的时候就会提示Thefollowingsignaturescouldn'tbeverifiedbecausethepublickeyisnotavailable:NO_PUBKEY082AB56BA14FE591Readingpackagelists...DoneW:GPGerror:http://mirrors.tuna.tsinghua.edu.cn/za......
  • Windows 下 JNA 调用动态链接库 dll
    1.创建动态链接库项目创建jnaTest项目下一步中填写项目名称和存储的目录;然后直接创建即可创建结果2.定义头文件#pragmaonce#ifndefJNA_TEST_H#defineJNA_TEST_H#ifdef__cplusplusextern"C"{#endif__declspec(dllexport)intadd(inta,intb);__declspec......
  • ECharts点击横坐标事件实现超链接跳转
    需求:微博排行榜,横坐标展示出了微博对应的id,现在需要通过点击横坐标来实现跳转到对应的微博页面。设置横坐标中的triggerEvent属性为true;xAxis:{...triggerEvent:true,...},添加on点击事件。thisChart.on("click",function(params){window.location.......
  • go helloworld 部署到k8s
    打包容器shutdown_Dockerfile同级目录执行sudodockerbuild-thello:v0.01-fshutdown_Dockerfile. 导出docker容器AAA:8.2,8.2表示镜像版本号dockersave-otar名称.tarAAA:8.2BBB:5.6 推送到其它node节点[email protected]:/home/deployscp导......