27 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
指定輸出的格式是32bits ARM 小端
OUTPUT_FORMAT原型為 OUTPUT_FORMAT(default, big, little),在連結的時候,如果使用了-EB的命令列參數,則使用這裡的big參數指定的位元組序,如果使用了-EL的命令列參數,則使用這裡的little參數指定的位元組序,如果沒有使用任何命令列參數,則使用這裡的default參數指定的位元組序。由uboot.lds中的定義可見,不管在連結的時候使用了何種命令列參數,輸出的目標檔案都是使用elf32-littlearm方式的位元組序。
28 OUTPUT_ARCH(arm)
指出輸出可執行檔的平台是armd
29 ENTRY(_start)
指定輸出可執行檔的起始程式碼段是_start
30 SECTIONS
31 {
32 . = 0x00000000;
33
34 . = ALIGN(4);
35 .text :
36 {
37 cpu/arm_cortexa8/start.o (.text)
38 *(.text)
39 }
32行對定位計數器進行賦值,.=0x00000000對定位計數器初始化為0x0
34 行使得當前定位計數器向四位元組對齊
35~39定義了一個輸出節 .text,冒號是文法需要。.text後花括弧中,列出了所有應當放到這個輸出節中的輸入節的名字,*是一個萬用字元,匹配任何檔案名稱,
37行表示要把/cpu/arm_cortexa8/start.o中的.text輸入節放入這個輸出檔案的.text輸出節。
38行*(.text)的意思是所有的輸入檔案中的.text輸入節;
41 . = ALIGN(4);
42 .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
41 修改當前定位寄存器,使的下面的.rodata輸出節與4bytes對齊
42 定義.rodata輸出節為所有檔案的.rodata輸入節
44 . = ALIGN(4);
45 .data : { *(.data) }
46
47 . = ALIGN(4);
48 .got : { *(.got) }
44 ~ 48 .data和.got輸出節的定義類似於.rodata,要求這兩個輸出節要以4 bytes對齊
50 __u_boot_cmd_start = .;
51 .u_boot_cmd : { *(.u_boot_cmd) }
52 __u_boot_cmd_end = .;
50 把__u_boot_cmd_start設定為當前定位技術器,即.u_boot_cmd節的起始位置
52 把__u_boot_cmd_end設定為當前定位計數器,即.u_boot_cmd節的結束位置
51 定義.u_boot_cmd輸出節為所有輸入檔案的.u_boot_cmd輸入節
54 . = ALIGN(4);
55 __bss_start = .;
56 .bss : { *(.bss) }
57 _end = .;
58 }
定義.bss輸出節,並且把__bss_start定義為__bss_start輸出節的起始位置,把_end定義為__bss節的結束位置