分析u-boot.lds

来源:互联网 发布:最强数据恢复软件 编辑:程序博客网 时间:2024/05/18 03:57

u-boot.lds脚本分析

1.

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

原型OUTPUT_FORMAT(DEFAULT,BIG,LITTLE)

OUTPUT_FORMAT的目的是指定输出目标文件的格式,三个选项分别指定在缺省、大段、小端情况下的输出可执行文件格式。当命令行中带有-EB则使用第二个格式(BIG),当命令行中带有-EL则使用第三个格式(LITTLE),如果这两个都不带则使用第一个格式(DEFAULT)。此处三种都被设置为elf32-littlearm,意思是可执行文件输出格式是elf32,小端和ARM体系结构

 

2.

       OUTPUT_ARCH(arm)

指定输出可执行文件的硬件平台是ARM

原型: OUTPUT_ARCH(BFDARCH)

设置输出文件的体系结构,BFDARCH为被BFD库使用的名字之一(arm便是其中之一)

 

3.

ENTRY(_start)

指定启动时的函数入口地址,_start在每个CPU目录下的start.S中定义,真正的启动运行地址段在编译时在/u-boot-1.1.6/board/smdk2410/config.mk中由TEXT_BASE宏定义。

 

4.

       SECTIONS

{

              . = 0x00000000;

 

              . = ALIGN(4);

              .text      :

              {

              cpu/arm920t/start.o     (.text)

               board/smdk2440/boot_init.o (.text)

                   *(.text)

              }

 

              . = ALIGN(4);

              .rodata : { *(.rodata) }

 

              . = ALIGN(4);

              .data : { *(.data) }

 

              . = ALIGN(4);

              .got : { *(.got) }

 

              . = .;

              __u_boot_cmd_start = .;

              .u_boot_cmd : { *(.u_boot_cmd) }

              __u_boot_cmd_end = .;

 

              . = ALIGN(4);

              __bss_start = .;

              .bss : { *(.bss) }

              _end = .;

}

SECTIONS其实可以理解为一个内存布局的描述。首先我们来看一个特殊的标示符“.,它是一个定位符,例如. = 0x00000000表示当前位置从0x0开始。位置标识符可以自动向上增长随着后边段的增加,例如在(.text)段后面“.”的值为0x0+size(.text)。总是“.”就是指定后面输出段的位置,如果没有指定,则继续紧接着往后面放。.= ALIGN(4) 是指四字节对齐。.text:{(*.text)}.data:{(*.data)}等都是固定死的格式,我们可以把我们的需要的文件提取出来,例如

.text      :

              {

              cpu/arm920t/start.o     (.text)

               board/smdk2440/boot_init.o (.text)

                   *(.text)

              }

这样可以将start.o放在.text段的首地址,然后接着存放boot_init.o

原创粉丝点击