zoukankan      html  css  js  c++  java
  • U-boot.lds文件分析

    1 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
    2 OUTPUT_ARCH(arm)
    3 ENTRY(_start)

    lds文件位于board/samsung/smdk6410/u-boot-nand.lds下。

    指定elf32-littlearm 格式,即指定输出文件是elf格式,32位ARM指令,小端模式;

    紧接着OUTPUT_ARCH(arm) 指定的是输出可执行文件的运行平台为ARM;

    ENTRY(_start)指定_start函数为程序的入口,_start在arch/arm/cpu/arm1176/start.S中定义,真正的启动运行地址段在编译时在board/samsung/smdk6410/config.mk中由CONFIG_SYSTEXT_BASE宏定义,即TEXT_BASE = 0x57E00000
    1 SECTIONS
    2 {
    3     . = 0x00000000;
    4 
    5     . = ALIGN(4);

    SECTIONS开始定义程序段。

    这里的点”.”,是定位器符号(GNU风格的一个典型)。         

    把定位器符号置为0x00000000 (若不指定, 则该符号的初始值为0)。         

    定系统启动从偏移地址零处开始。注意这只是个代码地址偏移值,真正的起始地址是由编译时指定的

    CFLAGS指定的。 

    4字节对齐调整,那么ALIGN(0x10) 即16字节对齐后。

    1 .text      :
    2     {
    3       arch/arm/cpu/arm1176/start.o    (.text)
    4           board/samsung/smdk6410/libsmdk6410.o  (.text)
    5       *(.text)
    6     }

    .text为段名,这段脚本的意思是将所有输入文件的.text section,以及arch/arm/cpu/arm1176/start.o、board/samsung/smdk6410/libsmdk6410.o合并成一个.text section,该section的地址由定位器符号的值指定(字节对齐后定位器符号的值)。

    1 . = ALIGN(4);
    2     .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }

     修改当前定位寄存器,使的下面的.rodata输出节与4bytes对齐,定义.rodata输出节为所有文件的.rodata输入节,*表示通配符,(.rodata*)为所有rodata开头的段。

    1 .rel.dyn : {
    2         __rel_dyn_start = .;
    3         *(.rel*)
    4         __rel_dyn_end = .;
    5     }

     用于用于动态连接的重定位信息。

    1 .dynsym : {
    2         __dynsym_start = .;
    3         *(.dynsym)
    4     }

    .dynsym动态符号表,这个表只保存了与动态链接相关的符号, __dynsym_start = . ;这是动态连接符号表的数据结构部分,须与.dynstr联用。

    1 .bss __rel_dyn_start (OVERLAY) : {
    2         __bss_start = .;
    3         *(.bss)
    4         . = ALIGN(4);
    5         __bss_end__ = .;
    6     }

     bss,为什么会有__rel_dyn_start(OVERLAY),不知道原因。 

    这里说明一点:在没有对位置技术器进行赋值时,位置计数器会动态的增加,比如. = .;这一条语句,此时位置技术器的位置就是从0开始加上代码段,只读数据段,数据段,got段的大小,紧接着之后的位置。

  • 相关阅读:
    angularJS之路由
    angularJS之ng-repeat
    智能算法之Matlab实现(1)——遗传算法(1)
    如何快速处理线上故障
    测试计划怎么写
    接口测试基础
    HTTP 的一些问题
    DevOps简介
    什么是DevOps?
    HTTPS 如何保证数据传输的安全性
  • 原文地址:https://www.cnblogs.com/laojie4321/p/4412954.html
Copyright © 2011-2022 走看看