uboot smdk6400.lds鏈接腳本分析

開頭部分
文件格式、輸入架構、ENTRY() 用來指明整個程序的入口

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)

指定程序鏈接地址有兩種方法:

  • Makefile中的ld命令的flags用-Ttext [地址]來指定
  • 在鏈接腳本SECTIONS開頭用.=[地址]來指定

在既在Makefile中使用-Ttext [地址],同時在lds鏈接腳本寫明.=[地址]時,編譯器會以Makefile中的-Ttext [地址]指定的爲準

SECTIONS部分

SECTIONS
{
    . = 0x00000000;

    . = ALIGN(4); //設定4字節對齊,防止傳過來的地址未對齊

    .text      :  
    {
      /*代碼段必須要注意文件的排列順序,前面是uboot的BL1
      部分,必須包含初始化,跳轉的.o文件*/
      arch/arm/cpu/arm1176/start.o  (.text)
      arch/arm/cpu/arm1176/s3c64xx/cpu_init.o   (.text)
      *(.text)
    }

    . = ALIGN(4);
    .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }

    . = ALIGN(4);
    .data : { *(.data) }

    . = ALIGN(4);
    .got : { *(.got) }

    __u_boot_cmd_start = .;
    .u_boot_cmd : { *(.u_boot_cmd) }
    __u_boot_cmd_end = .;

    . = ALIGN(4);
    .mmudata : { *(.mmudata) }

    . = ALIGN(4);
    __bss_start = .;
    .bss : { *(.bss) . = ALIGN(4); }
    _end = .;
}

其中.text .data .rodata .bss是編譯工具自帶的段,__u_boot_cmd_start .mmudata等是uboot自帶的段,對於uboot的命令操作等功能有重要作用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章