u-boot.lds 文件分析 .

7 篇文章 0 订阅
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节的结束位置

 

http://blog.csdn.net/kickxxx/article/details/7238298

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值