- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
gcc链接脚本学习gcc链接脚本学习
GCC的连接脚本学习笔记
来源: ChinaUnix博客 日期: 2009.04.29 14:26 (共有条评论)?我要评论 ? 连接脚本将我整整蒙了1天零一个上午,做了很多实验,看了人家不少例子代码勉强能驾驭了,让linker按照我想要的来处理,做个笔记。1,什么叫输入段,什么叫输出段不知道怎么回事,我对GCC系列的输入和输出两个单词总是进入思维死角,很简单就是 input section 和 output section,这里不是说翻译的问题,我觉得是一种思考的方式的问题。我的问题就是:既然叫输入端,那输入什么?同理,输出的是什么?不知道其他人不会不理解这个问题,我自己的话是理解了不少时间了 -v-所谓的输出段,是指生成的文件,例如 elf 中的每个段所谓的输入段,是指连接的时候提供LD的所有目标文件(OBJ)中的段。2,lma 和 vmalma =??load memory addressvma =??vitual memory address如果有研究过ADS的估计有印象,那里有个 RO BASE 和 RW BASE 和 ZI BASE,也就是说,lma 是装载地址,vma 是运行地址,想搞清楚这两个问题,可以阅读一下《ARM学习报告(杜云海)》作者写的很好,将这个问题分析的很透澈。lma 和vma只是GCC的叫法而已,其实原理是一样的。3,两个基本架构OUTPUT_FORMAT(elf32-littlearm, elf32-bigarm,? ?? ?? ???elf32-littlearm)OUTPUT_ARCH(arm)一句话,照抄......因为我们没有修改的余地,都是系统默认的关键字。第一句指示系统可以有生成两种格式,默认是 elf32-arm,端格式是 little endian4,ENTRY(__ENTRY)指定入口点,LD的手册说,ENTRY POINT 就是程序第一条执行的指令,但是,说老实话,我并不理解,因为这里跟我的理解矛盾了,首先,通常情况,系统需要一个初始化的 STARTUP.S文件来初始化硬件,也就是 bootloader的第一阶段了。那么很自然,入口点需要设置在这段代码的第一条指令中,那么正常运行的时候从第一条指令开始运行。所以这里设置了__ENTRY为入口点,这个在汇编代码中必须得先声明一下为全局,才能用,否则系统找不到。例如:.global __ENTRY但是问题是,如果我用同样的办法,设置另外一个不是第一条指令的入口点,LD并没有报错,但是问题来了,生成的文件和刚才设置入口点为 __ENTRY 的时候一模一样,这就蒙了,到底这个入口点是怎么回事?记得以前ADS的时候也碰到过 entry point的问题,下载仿真的时候确实是自动跳转到 entry point中运行。我想到的可能的原因,第一,生成 elf 文件并不是能直接用在嵌入式平台上面裸跑的,因为我们并没有操作系统,我们不需要elf文件头的那些指示信息提供给操作系统,指示系统怎么去加载文件,在嵌入式上面的完全没有那个必要,只需要将实际的代码提取出来,直接运行就OK,也就是 objcopy的操作,所以我觉得,在裸奔的嵌入式系统上面,entry point是没有意义的,只需要指向整个代码最开始的指令就OK了。暂时我还是不能清晰的理解这个东西。先放下。以后碰到问题再分析。5,一个输出段的标准格式section [address] [(type)] : [AT(lma)]??{? ? output-section-command? ? output-section-command? ? ...??} [region] [ATlma_region] [:phdr :phdr ...] [=fillexp]前面也说了,所谓的输出段是指最终生成的文件里面的段,所以一个输出段就可以理解为最终文件里面的一个块,那么多个块合起来就是一个完成文件了。而每个小块又分别有什么文件来组成呢?那就是输入段了。我自己实际用到有下面的一些,其他暂时不会用。section_name??vma : AT(lma)??{? ? output-section-command? ? output-section-command? ? ...??} [ATlma_region]section_name 根据ld手册说是有个确定的名字,其他没啥,自己添加一些新段也是可以的。默认的4个段是必须有的.text 代码.rodata 常量,例如字符串什么的.data 初始化的全局变量.bss??没有初始化的全局变量其实没什么,可以说,都
您可能关注的文档
- DC-DC3 开关稳压器DC-DC3 开关稳压器.ppt
- dB值的计算方法—射频类dB值的计算方法—射频类.doc
- DCDC全桥变换电路DCDC全桥变换电路.ppt
- DCS800故障解决方案DCS800故障解决方案.doc
- DCN DCWL-7942AP-W墙面式AP产品彩页V1.0DCN DCWL-7942AP-W墙面式AP产品彩页V1.0.pdf
- DCT域中MPEG7描述符主色提取DCT域中MPEG7描述符主色提取.pdf
- DCT德中激光-皮秒冷加工激光加工系统DL500PDCT德中激光-皮秒冷加工激光加工系统DL500P.pdf
- ddl保护ddl保护.ppt
- dede模板标签套用(首页、列表、内容)个人整理版dede模板标签套用(首页、列表、内容)个人整理版.doc
- DC动画长片14部(2007-2012)DC动画长片14部(2007-2012).ppt
- 新的一年工作展望.docx
- 医生年终个人工作的述职报告(3篇).docx
- 2023年消防设施操作员之消防设备中级技能考前冲刺练习题附答案详解.docx
- 2022-2023年环境影响评价工程师之环评技术导则与标准通关练习题包括详细解答.docx
- 2023年中级注册安全工程师之安全生产管理考前冲刺检测卷和答案.docx
- 2023年中级银行从业资格之中级银行管理考前冲刺测试卷提供答案解析.docx
- 2023年公共营养师之二级营养师通关模拟考试试卷附带答案.docx
- 证券分析师之发布证券研究报告业务考前冲刺模拟题库.docx
- 2022-2023年二级建造师之二建建设工程法规及相关知识综合提升测试卷附答案.docx
- 2023年二级建造师之二建机电工程实务通关模拟考试试卷提供答案解析.docx
文档评论(0)