mini6410板uboot的U-boot.lds,一切从这里开始
这个lds是GNU ld链接命令的设置文本。ld之后程序的布局就由这个文件决定。比如放在前面的是哪个.o文件,放在后面的是哪个.o文件,各个段的布局也在这里。程序入口也在这里定义。
OUTPUT_FORMAT(“elf32-littlearm”, “elf32-littlearm”, “elf32-littlearm”) /*设置输出格式*/
/*OUTPUT_FORMAT(“elf32-arm”, “elf32-arm”, “elf32-arm”)*/
OUTPUT_ARCH(arm) /*设置输出CPU架构*/
ENTRY(_start) /*设置程序入口地址,参考 start.S 汇编程序*/
SECTIONS /*设置分段*/
{
. = 0x00000000; /*CPU将执行的第一条指令的地址,就是 _start 的地址*/
. = ALIGN(4); /*4字节对齐*/
.text : /*text段布局*/
{
cpu/s3c64xx/start.o (.text) /*前面的五个start.o,cpu_init.o,onenand_cp.o,nand_cp.o,movi.o加起来不要超过8KB,系统启动时会被6410拷贝到Stepping Stone然后映射到0x00000000来执行。*/
cpu/s3c64xx/s3c6410/cpu_init.o (.text)
cpu/s3c64xx/onenand_cp.o (.text)
cpu/s3c64xx/nand_cp.o (.text)
cpu/s3c64xx/movi.o (.text)
*(.text)
lib_arm/div0.o
}
. = ALIGN(4);
.rodata : { *(.rodata) } /*只读数据段*/
. = ALIGN(4);
.data : { *(.data) } /*数据段*/
. = ALIGN(4);
.got : { *(.got) } /*GOT段*/
__u_boot_cmd_start = .;
.u_boot_cmd : { *(.u_boot_cmd) } /*所有uboot命令段*/
__u_boot_cmd_end = .;
. = ALIGN(4);
.mmudata : { *(.mmudata) } /*mmudata段*/
. = ALIGN(4);
__bss_start = .;
.bss : { *(.bss) } /*BSS段*/
_end = .;
}