u-boot简单学习笔记(二)——AR9331 uboot.lds分析

最开始系统上电后 从uboot.lds开始引导

OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", "elf32-tradbigmips")  /* 这里是生成格式为elf。大端,mips */
OUTPUT_ARCH(mips)  /* mips架构 */
ENTRY(_start)  /* 入口点为_start ,在cpu/mips/start.S中定义*/
SECTIONS
{

/*指定可执行image文件的全局入口点,通常这个地址都放在ROM(flash)0x0位置。必须使编译器知道这个地址,通常都是修改此处来完成*/
    . = 0x00000000;  /* 从0x0位置开始 */

    . = ALIGN(4);      /* 代码4字节对齐 */
    .text:                             /* 这个是程序存放的地方 ,代码段 */
    {
      *(.text*)
    }

    . = ALIGN(4);   /* 表示以4字节对齐 */
    .rodata  : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }  /* 指定只读数据段 */

    . = ALIGN(4);
    .data  : { *(.data*) }            /* 指定读/写数据段 */

    . = .;
    _gp = ALIGN(16);

    .got  : {                           /* 指定got段, got段式是uboot自定义的一个段, 非标准段 */
    __got_start = .;
        *(.got)
    __got_end = .;
    }

    . = ALIGN(4);
    .sdata  : { *(.sdata*) }     /* 指定静态读/写数据段 */

    __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赋值为当前位置,即结束位置  */

    uboot_end_data = .;    /*  把uboot_end_data赋值为当前位置,即作为data段结束位置  */
    num_got_entries = (__got_end - __got_start) >> 2;  /* 指定 num_got_entries 地址 */

    . = ALIGN(4);
    .sbss  : { *(.sbss*) }
    .bss  : { *(.bss*) . = ALIGN(4); }  /*指定bss段,告诉加载器不要加载这个段*/
    uboot_end = .; /*把_end赋值为当前位置,即bss段的结束位置*/
}

posted @ 2015-12-31 14:56  夕相待  阅读(1178)  评论(0编辑  收藏  举报