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 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输入节; 42 .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } 41 修改当前定位寄存器,使的下面的.rodata输出节与4bytes对齐 42 定义.rodata输出节为所有文件的.rodata输入节 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输入节 55 __bss_start = .; 56 .bss : { *(.bss) } 57 _end = .; 58 } 定义.bss输出节,并且把__bss_start定义为__bss_start输出节的起始位置,把_end定义为__bss节的结束位置 |
|