• u-boot.lds文件简介


    可执行文件由许多链接在一起的对象文件组成。对象文件有许多节,如文本、数据、init 数据、bss等。这些对象文件都是由一个称为 链接器脚本(*lds)的文件链接并装入的。这个链接器脚本的功能是将输入对象文件的各节映射到输出文件中;换句话说,它将所有输入对象文件都链接到单一的可执行文件中,将该可执行文件的各节装入到指定地址处。 因此在分析u-boot代码是,首先应关注的是u-boot.lds文件,它位于$(U-BOOT_SRC_ROOT)/board/$(BOARD_NAME)目录下。

     1 /*
     2 * OUTPUT_FORMAT(default, big, little),在链接的时候,如果使用了-EB的命令行参数,则使用这里的big
     3 * 参数指定的字节序,如果使用了-EL;的命令行参数,则使用这里的little参数指定的字节序,如果没有使用
     4 * 任何命令行参数,则使用这里的default参数指定的字节序。  
     5 * 由$(SRC_ROOT)/board/samsung/smdk6410/u-boot.lds中的定义可见,不管在链接的时候使用了何种命令行参数,
     6 * 输出的目标文件都是使用elf32-littlearm方式的字节序。 
     7 */
     8 /*以下语句是指定输出可执行文件是elf格式,32位ARM指令,小端 */
     9 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
    10 /*指定输出可执行文件的平台为ARM*/
    11 OUTPUT_ARCH(arm)
    12 /*指定输出可执行文件的起始代码段为_start.*/ 
    13 ENTRY(_start)
    14 SECTIONS
    15 {
    16     . = 0x00000000;  /*定位当前地址为0x0地址*/
    17 
    18     . = ALIGN(4);  /*指定代码以4字节对齐*/
    19     .text      :   /*指定代码段  */
    20     {
    21       arch/arm/cpu/arm1176/start.o    (.text)
    22     board/samsung/smdk6410/libsmdk6410.o (.text)
    23       *(.text)
    24     }
    25 
    26     . = ALIGN(4);
    27     .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } /*指定只读数据段 */
    28 
    29     . = ALIGN(4);
    30     .data : { *(.data) }  /*指定读写数据段*/
    31 
    32     . = ALIGN(4);
    33     .got : { *(.got) }   /*指定got段, got段式是uboot自定义的一个段, 非标准段*/
    34 
    35 
    36     . = ALIGN(4);
    37     .u_boot_list : {
    38         #include <u-boot.lst>
    39     }
    40 
    41     . = ALIGN(4);
    42     .mmudata : { *(.mmudata) }
    43 
    44     . = ALIGN(4);
    45 
    46     .rel.dyn : {
    47         __rel_dyn_start = .;
    48         *(.rel*)
    49         __rel_dyn_end = .;
    50     }
    51 
    52     .dynsym : {
    53         __dynsym_start = .;
    54         *(.dynsym)
    55     }
    56 
    57     _end = .;
    58 
    59     .bss __rel_dyn_start (OVERLAY) : {
    60         __bss_start = .;
    61         *(.bss)
    62         . = ALIGN(4);
    63         __bss_end__ = .;
    64     }
    65 
    66     /DISCARD/ : { *(.dynstr*) }
    67     /DISCARD/ : { *(.dynamic*) }
    68     /DISCARD/ : { *(.plt*) }
    69     /DISCARD/ : { *(.interp*) }
    70     /DISCARD/ : { *(.gnu*) }
    71 }
  • 相关阅读:
    《设计模式》-原则二:里氏代换原则(LSP)
    设计模式从0开始
    net reactor加密源码保软件安全-net reactor使用教程
    python中import和from...import区别
    Python之import
    c#执行bat批处理文件,并通过线程将结果显示在控件中
    C#中双问号、双冒号等几个特殊关键字
    Eclipse debug高级技巧(转)
    Android从零开始--安装
    以另一个用户来运行程序
  • 原文地址:https://www.cnblogs.com/laojie4321/p/4248531.html
Copyright © 2020-2023  润新知