今天看《Linux应用开发完全手册》U-Boot部分,发现.lds文件不知道是什么,上网查了一下资料,总结如下,不过还是有些问题待解决,大家知道可以一起讨论哈!
参考资料:http://blog.csdn.net/wenjie345304221/article/details/6859272,谢谢原作者!
使用它来指定:
的起始地址(运行地址)
OUTPUT_ARCH(arm) //输出平台架构为arm
ENTRY(_start) //指定输出可执行文件的起始代码为_start
SECTIONS
{
. = 0x00000000; //设置当前地址(用.表示)为0地址
. = ALIGN(4); //设置代码以四字节对齐
.text : //命名这个段为.text
{ // {}内决定哪些内容放在本段,可以是整个目标文件,也可以是目标文件中的某段(代码段,数据段等)
cpu/arm920t/start.o (.text) //第一个代码段
*(.text) //其他代码段
}
. = ALIGN(4);
.rodata : { *(.rodata) } //设置只读数据段(readonly data)
. = ALIGN(4);
.data : { *(.data) } //设置可读写的数据段
. = ALIGN(4);
.got : { *(.got) } //这个是U-Boot的自定义段,非标准段
. = .; //这是为啥呢?我也不知道哈~ 待讨论
__u_boot_cmd_start = .; //把__u_boot_cmd这个段的起始地址设置为当前地址(.),为什么要加__?
.u_boot_cmd : { *(.u_boot_cmd) } //这就是u_boot_cmd段,U-Boot把所有命令都放在此段,为什么要加.?
__u_boot_cmd_end = .; //把__u_boot_cmd这个段的结束地址设置为当前地址(.),为什么要加__?
. = ALIGN(4);
__bss_start = .; //把__bss这个段的起始地址设置为当前地址(.),为什么要加__?
.bss : { *(.bss) } //这就是bss段,为什么要加.?
_end = .; //把__bss这个段的结束地址设置为当前地址(.),为什么不是__bss_end?
}
关于U-Boot源码的 .lds 文件,布布扣,bubuko.com
原文:http://www.cnblogs.com/comeonjiji/p/3593254.html