OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm"")
;指定输出可执行文件是elf格式,32位ARM指令,小端
OUTPUT_ARCH(arm)
;指定输出可执行文件的平台为ARM
ENTRY(_start)
;指定输出可执行文件的起始代码段为_start.
SECTIONS
{
. = 0x00000000 ; 指明目标代码的起始地址从0x0位置开始,"."代表的是当前位置
. = ALIGN(4) ; 代码以4字节对齐
.text : ;指定代码段
{
cpu/arm920t/start.o (.text) ; 代码的第一个代码部分,指明start.s是入口程序代码,被放到代码段的开头
*(.text) ;其它代码部分
}
. = ALIGN(4)
.rodata : { *(.rodata) } ;指定只读数据段,RO段
. = ALIGN(4);
.data : { *(.data) } ;指定读/写数据段,RW段
. = ALIGN(4);
.got : { *(.got) } ;指定got段, got段式是uboot自定义的一个段, 非标准段
__u_boot_cmd_start = . ;把__u_boot_cmd_start赋值为当前位置, 即起始位置
.u_boot_cmd : { *(.u_boot_cmd) } ;指定u_boot_cmd段, uboot把所有的uboot命令放在该段.
__u_boot_cmd_end = .;把__u_boot_cmd_end赋值为当前位置,即结束位置
. = ALIGN(4);
__bss_start = .; 把__bss_start赋值为当前位置,即bss段的开始位置
.bss : { *(.bss) }; 指定bss段
_end = .; 把_end赋值为当前位置,即bss段的结束位置
}
其它知识:
GNU编译器生成的目标文件缺省为elf格式。elf文件由若干段(section)组成,如不特殊指明,由C源程序生成的目标代码中包含如下段:.text(正文段)包含程序的指令代码;.data(数据段)包含固定的数据,如常量、字符串;.bss(未初始化数据段)包含未初始化的变量、数组等。GNU编译器生成的目标文件缺省为elf格式。elf文件由若干段(section)组成,如不特殊指明,由C源程序生成的目标代码中包含如下段:.text(正文段)包含程序的指令代码;.data(数据段)包含固定的数据,如常量、字符串;.bss(未初始化数据段)包含未初始化的变量、数组等。连接器的任务就是将多个目标文件的.text、.data和.bss等段连接在一起,而连接脚本文件是告诉连接器从什么地址开始放置这些段。
先看一下GNU官方网站上对.lds文件形式的完整描述:
SECTIONS {
...
secname start BLOCK(align) (NOLOAD) : AT ( ldadr )
{ contents } >region :phdr =fill
...
}
secname和contents是必须的,其他的都是可选的。下面挑几个常用的看看:1、secname:段名
2、contents:决定哪些内容放在本段,可以是整个目标文件,也可以是目标文件中的某段(代码段、数据段等)
3、start:本段连接(运行)的地址,如果没有使用AT(ldadr),本段存储的地址也是start。GNU网站上说start可以用任意一种描述地址的符号来描述。
4、AT(ldadr):定义本段存储(加载)的地址。
又如:
ENTRY(begin)
SECTION
{ .=0x00300000;
.text : { *(.text) }
.data: { *(.data) }
.bss: { *(.bss) }
}
其中,ENTRY(begin)指明程序的入口点为begin标号;.=0x00300000指明目标代码的起始地址为0x00300000,这一段地址可以是SDRAM的起始地址;.text : { *(.text) }表示从0x00300000开始放置所有目标文件的代码段,随后的.data: { *(.data) }表示数据段从代码段的末尾开始,再后是.bss段。
上一篇:ARM微处理器的指令集概述(一)——ARM应用系统开发详解笔记
下一篇:移植u-boot-2010.09到S3C2440(一)——硬件初始化与测试
推荐阅读最新更新时间:2024-10-29 11:26
设计资源 培训 开发板 精华推荐
- Net1 和 Net2 串行接口芯片组支持测试模式
- AM2LS-0505S-NZ 5V 2 瓦 DC-DC 转换器的典型应用
- AM1S-2409SH30Z 1W DC-DC转换器典型应用
- LTC3897IFE 高效两相 48V 升压转换器的典型应用电路,具有浪涌电流控制、过流保护、输入电压浪涌保护和反向输入保护
- 86型人体存在传感器(二)电源板
- DER-120 - 22W三路输出反激式转换器
- STM32L152CDISCO,STM32 L1 系列探索套件 - 带有 STM32L152RCT6 微控制器
- AD9714-EBZ,用于 AD9714 双通道、8 位、125 MSPS TxDAC 数模转换器的评估板
- KITXMC750WATTAKV1,XMC 电机控制应用套件
- CN5711-1S