目录:/u-boot_hi3515/board/hi3515v100

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") //输出可执行文件是elf格式,32位ARM指令,小端

OUTPUT_ARCH(arm)      //输出可执行文件的运行环境,是 arm 平台的

ENTRY(_start)       //指定输出可执行文件的起始代码段为_start(在start.S中定义)

SECTIONS          //section 命令用来设置段

{

   . = 0x00000000;  //将当前地址定位到 0x00000000 处,操作符用来表示当前地址

   . = ALIGN(4);    //代码以4字节对齐

   .text :          // 定义 .text 段

   {

//段由start.o,libhi3515v100.a,dlmalloc.o,console.o,nand_boot.o等中的.text段所有段组成

     cpu/arm926ejs/start.o (.text)  //代码的第一个代码部分

board/hi3515v100/libhi3515v100.a (.text)

     common/dlmalloc.o (.text)

     common/console.o (.text)

     common/nand_boot.o (.text)

     drivers/mtd/libmtd.a (.text)

     drivers/mtd/nand/libnand.a (.text)

     lib_generic/libgeneric.a (.text)

     cpu/arm926ejs/libarm926ejs.a (.text)

     cpu/arm926ejs/hi3515v100/libhi3515v100.a (.text)

     lib_arm/libarm.a (.text)

     drivers/serial/libserial.a (.text)

   }

   . = ALIGN(4);

   .rodata : { *(.rodata) }  //指定.rodata段(只读数据段)由所有输入文件的.rodata段组成

   . = ALIGN(4);

   .data : { *(.data) }    //指定.data段(读/写数据段)由所有输入文件的.rodata段组成



   . = ALIGN(4);

   .got : { *(.got) }      //.got段由所有输入文件的. got段组成(got段式是uboot自定义的一个段, 非标准段)

   . = ALIGN(4);

   .text1 :                //指定其他代码段

   {

     *(.text)

   }

   . = ALIGN(4);

   . = .;                //指定定位器为当前值(即为该语句相对段首偏移)

   __u_boot_cmd_start = .;  //__u_boot_cmd_start的值被设置为了当前地址

   .u_boot_cmd : { *(.u_boot_cmd) }  //.u_boot_cmd段由所有文件的.u_boot_cmd段组成

   __u_boot_cmd_end = .;             //__u_boot_cmd_end变量的值被赋值为了当前地址

   __img_end = .;

. = _start + 0x100000;    //指定定位器为开始地址+0x100000(偏移)处

   . = ALIGN(32);           //定位器当前地址,32位对齐

   __bss_start = .;      //把__bss_start赋值为当前位置,即bss段的开始位置

    .bss1 (NOLOAD) : {*(.bss)}  //.bss段由所有输入文件的.bss段组成

    _end = .;                 //把_end赋值为当前位置,即bss段的结束位置

}

a.out 的头部根据 unix 版本的不同而略有变化, BSD 中的格式如下

int   a_magic ;        // 幻数

int    a_text;                        // 文本段的大小

int   a_data;                       // 初始化的数据段的大小

int   a_bss;                         // 未初始化的数据段的大小

int  a_syms;                     // 符号表的大小

int   a_entry;                     // 入口点

int   a_trsize;                     // 文本重定位段的大小

int   a_drsize;                    // 数据重定位段的大小

text section:    存放程序代码

Data section:   存放数据

Bss section :   存放未初始化的数据,在镜像文件中,是不为 bss 段分配空间的,所以如果你开一个很大的全局的未初始化的数组,镜像文件的大小不会相应的变大。而只是在加载器将镜像加载进内存时,才会为 bss 段分配空间

链接器:把各个目标文件的各种段进行重新组合.

u-boot.lds 链接脚本分析(hi3515)的更多相关文章

  1. makefile使用.lds链接脚本以及 $@ ,$^, $,< 解析

    先来分析一个简单的.lds链接脚本 例1,假如现在有head.c init.c nand.c main.c这4个文件: 1.1 首先创建链接脚本nand.lds: SECTIONS { firtst ...

  2. 裸板驱动总结(makefile+lds链接脚本+裸板调试)

    在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...

  3. arm裸板驱动总结(makefile+lds链接脚本+裸板调试)

    在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...

  4. makefile使用.lds链接脚本以及 $@ ,$^, $,< 解析【转】

    转自:http://www.cnblogs.com/lifexy/p/7089873.html 先来分析一个简单的.lds链接脚本 例1,假如现在有head.c init.c nand.c main. ...

  5. Linux下的lds链接脚本详解

    1. 概论2. 基本概念3. 脚本格式4. 简单例子5. 简单脚本命令6. 对符号的赋值7. SECTIONS命令8. MEMORY命令9. PHDRS命令10. VERSION命令11. 脚本内的表 ...

  6. [转]Linux下的lds链接脚本详解

    转载自:http://linux.chinaunix.net/techdoc/beginner/2009/08/12/1129972.shtml     一. 概论 每一个链接过程都由链接脚本(lin ...

  7. Linux下的lds链接脚本简介

    转载:http://hubingforever.blog.163.com/blog/static/171040579201192472552886/   一. 概论 每一个链接过程都由链接脚本(lin ...

  8. Linux下的lds链接脚本详解【转】

    转自:http://www.cnblogs.com/li-hao/p/4107964.html 转载自:http://linux.chinaunix.net/techdoc/beginner/2009 ...

  9. Linux下的lds链接脚本简介(二)

    七. SECTIONS命令 SECTIONS命令告诉ld如何把输入文件的sections映射到输出文件的各个section: 如何将输入section合为输出section; 如何把输出section ...

随机推荐

  1. Java各类格式转换

    1.Java 根据固定格式的Excel生成实体类 2.GPS 经纬度转换为 经过旋转后的平面坐标

  2. HTTP状态码介绍详细

    HTTP协议中几个状态码的含义:1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 100 (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分, ...

  3. H2 应用实例2

    DIY 博客全文界面的推荐.反对.加关注.返回顶部.快速评论等小功能的集成 --> 转载 :一.搭建测试环境和项目 1.1.搭建JavaWeb测试项目 创建一个[H2DBTest]JavaWeb ...

  4. libEasyPlayer RTSP windows播放器SDK API接口设计说明

    概述 libEasyPlayer实现对RTSP直播流进行实时采集和解码显示,稳定,高效,低延时:解码可采用intel硬件解码和软件解码两种方式,能实时进行录像和快照抓图,OSD叠加等功能. API接口 ...

  5. android菜鸟学习笔记15----Android Junit测试

    Android中的Junit测试与Java Junit测试有所不同,不能简单的使用标注…… 假设写了一个MathUtils类,有两个静态方法: public class MathUtils { pub ...

  6. (1)Web 应用是一个状态机,视图与状态是一一对应的。 (2)所有的状态,保存在一个对象里面。

    Redux 入门教程(一):基本用法 - 阮一峰的网络日志 http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_one_basic_u ...

  7. OEM7GRUB 0.4.4 2009-11-18

    windows7电脑重装系统后, 启动不了, 提示这个错误: Error: OEM7GRUB 0.4.4 2009-11-18...... 解决办法: 用PE系统进入后, 运行DiskGenius软件 ...

  8. Eclipse中servlet显示无法导入javax.servlet包问题的解决方案

    项目名-->右键 Property-->选择 JavaBuild Path-->选择 Add External JARs-->选择 把servlet-api.jar的路径输入即 ...

  9. Django—工程创建以及models数据库易错点

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  10. mysql服务突然不能启动

    mysql之前一直用的好好的,今天突然不能启动.前几天改过my.ini文件,在[mysqld]下添加了default-character-set=utf8.查看日志发现是添加的那句话的错误,删除.并且 ...