通过简单示例学习链接脚本基本语法

通过简单示例学习链接脚本基本语法

ID:5273816

大小:269.79 KB

页数:9页

时间:2017-12-07

通过简单示例学习链接脚本基本语法_第1页
通过简单示例学习链接脚本基本语法_第2页
通过简单示例学习链接脚本基本语法_第3页
通过简单示例学习链接脚本基本语法_第4页
通过简单示例学习链接脚本基本语法_第5页
资源描述:

《通过简单示例学习链接脚本基本语法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、通过简单示例讲解连接脚本基本语法王兴伟Linux博客地址:harvey.blog.chinaunix.netSOCFPGA客户在采用bm模式或简单实时操作系统时,有时会需要修改工程代码链接的起始地址和地址空间长度。或者在链接脚本中预留栈空间和定义全局变量等。本文以骏龙公司提供的baremetal模式代码工程的脚本为例,介绍一下链接脚本的基本知识,希望起到抛砖引玉的作用。1,初识链接脚本下面的就是骏龙公司提供的baremetal工程的链接脚本。MEMORY{.sram:ORIGIN=0x01000000,LENGTH=(16*1024*1024)}OUTPUT_FORMAT("elf32-

2、littlearm","elf32-littlearm","elf32-littlearm")OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS{.text:{start.o(.text)*(.text*)}>.sram.=ALIGN(4);.rodata:{*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))}>.sram.=ALIGN(4);.data:{*(SORT_BY_ALIGNMENT(.data*))}>.sram.=ALIGN(4);.bss:{.=ALIGN(4);__bss_start=.;*(.bss*).

3、=ALIGN(4);__bss_end__=.;}>.sram}在介绍脚本基本语法之前,先介绍一下上面脚本各个部分的功能,以便给大家一个整体的认识,避免陷入具体的语法细节。1.1代码运行空间在脚本中以MEMORY关键字定义存储空间,其中以ORIGIN定义地址空间的起始地址,LENGTH定义地址空间的长度。如下下面的语句定义了该工程运行的起始地址为0x01000000,地址空间的长度为16MB。这部分内容是大家最经常修改的内容。MEMORY{.sram:ORIGIN=0x01000000,LENGTH=(16*1024*1024)}1.2入口地址定义了本工程代码运行时的入口函数。在本例中入

4、口函数为“_start”,即汇编代码start.s中的入口函数。ENTRY(_start)需要注意如下备注:备注1,链接过程中,需要首先链接start.o文件,以保证_start函数位于程序地址空间的最前端。后面会有说明。备注2,_start函数需要位于start.s最前端。_start通常是上电复位函数。如下图所示1.3程序段链接SECTIONS{.text:{start.o(.text)*(.text*)}>.sram在上面的语句的start.o(.text)指示将编译的工程文件中的start.o的.text段(即代码段)链接到MEMORY定义的sram中。*(.text*)指示将工

5、程中所有目标文件的.text段链接到sram中。在链接*(.text*)时,不会重复链接start.o的.text段。另外,此处的链接过程是按照顺序进行链接的,即先链接start.o,再链接其他的目标文件。这样可以保证start.o被链接到运行地址空间的最前端。2,链接脚本基本语法介绍2.1内存区域定义命令在默认情形下,连接器可以为section分配任意位置的存储区域。你也可以用MEMORY命令定义存储区域,并通过输出section描述的>REGION属性显示地将该输出section限定于某块存储区域,当存储区域大小不能满足要求时,连接器会报告该错误。MEMORY命令的文法如下,MEMO

6、RY{NAME1[(ATTR)]:ORIGIN=ORIGIN1,LENGTH=LEN2NAME2[(ATTR)]:ORIGIN=ORIGIN2,LENGTH=LEN2…}NAME:存储区域的名字,这个名字可以与符号名、文件名、section名重复,因为它处于一个独立的名字空间。ATTR:定义该存储区域的属性,ATTR属性内可以出现以下7个字符,R只读sectionW读/写sectionX可执行sectionA„可分配的‟sectionI初始化了的sectionL同I!不满足该字符之后的任何一个属性的sectionORIGIN:关键字,区域的开始地址,可简写成org或oLENGTH:关键字

7、,区域的大小,可简写成len或l例子1,MEMORY{rom(rx):ORIGIN=0,LENGTH=256Kram(!rx):org=0×40000000,l=4M}例子2MEMORY{.sram:ORIGIN=0x00200000,LENGTH=(32*1024*1024)}OUTPUT_ARCH(arm)ENTRY(start)SECTIONS{.text:{BSP/start.o(.text)*(.text)}>.sram.

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。