现在的位置: 首页 > 综合 > 正文

u-boot.lds 文件分析

2012年07月05日 ⁄ 综合 ⁄ 共 1423字 ⁄ 字号 评论关闭

 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节的结束位置

抱歉!评论已关闭.