u-boot.lds分析

 

*
 指定輸出可執行文件是elf格式,
 32位ARM指令,小端
*/

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")

/* 指定輸出文件的平臺體系是ARM */
OUTPUT_ARCH(arm)

/*指定可執行映像文件的起始段的段名是_start*/
ENTRY(_start)

SECTIONS
{
/*
 指定可執行image文件的全局入口點,
 通常這個地址都放在ROM(flash)0x0位置。
 必須使編譯器知道這個地址,
 通常都是修改此處來完成
*/


/* 起始地址爲0x00000000 */
 . = 0x00000000;

/*4字節對齊*/
 . = ALIGN(4);

 /* 代碼段*/
 .text :
 {
   /* 代碼段第一部分代碼*/
  arch/arm/cpu/arm1176/start.o (.text)

    /*其餘代碼段*/
  *(.text)
 }


 . = ALIGN(4);

/*
 只讀數據段,
 所有的只讀數據段都放在這個位置
*/
 .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }

 . = ALIGN(4);
 
/* 可讀寫數據段,
所有的可讀寫數據段都放在這裏*/
 .data : { *(.data) }

 . = ALIGN(4);

/*指定got段,
got段式是uboot自定義的一個段,
非標準段*/
 .got : { *(.got) }


/*
 .=.  前一個表示當前段,
 後一個點表示當前地址,
 根據編譯結果來分配地址,
 比寫死地址要靈活
*/
 . = .;

/*把__u_boot_cmd_start賦值爲當前位置,
即起始位置*/
 __u_boot_cmd_start = .;

/* u_boot_cmd段,
所有的u-boot命令相關的定義都放在這個位置,
因爲每個命令定義等長,
所以只要以__u_boot_cmd_start
爲起始地址進行查找就可以
很快查找到某一個命令的定義,
並依據定義的命令指針調用
相應的函數進行處理用戶的任務*/
 .u_boot_cmd : { *(.u_boot_cmd) }

/*u_boot_cmd段結束位置,
由此可以看出,
這段空間的長度並沒有嚴格限制,
用戶可以添加一些u-boot的命令,
最終都會在連接是存放在這個位置。*/
 __u_boot_cmd_end = .;

 

 . = ALIGN(4);

 /*把__bss_start賦值爲當前位置,
 即bss段的開始位置*/
 __bss_start = .;

 /*指定bss段,
 這裏NOLOAD的意思是這段不需裝載,
 僅在執行域中纔會有這段*/
 .bss (NOLOAD) : { *(.bss) . = ALIGN(4); }

  /*把_end賦值爲當前位置,即bss段的結束位置*/
 _end = .;

 

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