- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
gcc 链接脚本
连接脚本将我整整蒙了1 天零一个上午,做了很多实验,看了人家不少例子代码
勉强能驾驭了,让linker 按照我想要的来处理,做个笔记。
1,什么叫输入段,什么叫输出段
不知道怎么回事,我对GCC 系列的输入和输出两个单词总是进入思维死角,很简单
就是 input section 和 output section,这里不是说翻译的问题,我觉得是一种
思考的方式的问题。
我的问题就是:既然叫输入端,那输入什么?同理,输出的是什么?不知道其他人
不会不理解这个问题,我自己的话是理解了不少时间了 -v-
所谓的输出段,是指生成的文件,例如 elf 中的每个段
所谓的输入段,是指连接的时候提供LD 的所有目标文件(OBJ)中的段。
2,lma 和 vma
lma = load memory address
vma = 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 endian
4 ,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
您可能关注的文档
- c语言深度解剖(完美高清文字版).pdf
- dcfw-1800ges防火墙快速配置手册--for v3x版本.pdf
- ebox-2300_wifi_installation.pdf
- fortigate防火墙安全配置规范.pdf
- fbi秘籍:如何读懂肢体语言(图文原版).pdf
- gartner如何定义下一代防火墙-sinogrid.pdf
- freelink wifi hdmi 无线媒体分享器使用说明书.pdf
- gbt1.1-2009培训教材(福建标准院内部培训教材).pdf
- gcc hacks in the linux kernel.pdf
- gcc internals and porting.pdf
最近下载
- 思政元素融入课堂教学有效性探究-来源:新教育·(上旬)(第2022009期)-海南师范学院.pdf VIP
- GB13296-2013 锅炉、热交换器用不锈钢无缝钢管.pdf
- Hisense海信电视55E3G-PRO用户手册说明书.pdf
- 2024年湟源县公开选聘优秀大学生到村任职笔试备考题库及答案解析.docx
- 2021年实验室检测化验员考试题库三百题.pdf VIP
- DL_T 991-2022《电力设备金属发射光谱分析技术导则》.pptx
- GB50737-2011 石油储备库设计规范.pdf
- 不合格品控制表格格式.doc VIP
- 入团志愿书空表模板(可打印用).doc VIP
- 司法局扫黑除恶常态化机制.pptx VIP
文档评论(0)