一、脚本分析

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

/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
OUTPUT_ARCH(arm)          /* 指定输出文件的平台体系是 ARM  */

ENTRY(_start)                   /*  指定可执行映像文件的起始段的段名是_start */

SECTIONS
{

. = 0x00000000;               /* 指定可执行image文件的全局入口的入口地址 */

. = ALIGN(4);                    /* 字对齐,即就是4字节对齐 */

.text :                              /* 代码段 */

{
cpu/arm920t/start.o (.text)    /*  代码段第一部分代码*/

*(.text)
}

. = ALIGN(4);

.rodata : { *(.rodata) }          /*  只读数据段*/ 

. = ALIGN(4);
.data : { *(.data) }                /* 可读写数据段 */ 

. = ALIGN(4);
.got : { *(.got) }                   /*指定got段, got段式是uboot自定义的一个段, 非标准段*/ 

. = .;
__u_boot_cmd_start = .;       /*把__u_boot_cmd_start赋值为当前位置, 即起始位置*/

.u_boot_cmd : { *(.u_boot_cmd) }

/*在这个位置,因为每个命令定义等长,所以只要以__u_boot_cmd_start为起始地址 进行查找就可以很快查找到某一个命令

的定义的地址,并依据命令定义中函数指针调用相应的函数来执行命令。这段空间的长度并没有严格限制,用户可以添加一些u-boot

的命令,最终都会在连接是存放在这个位置*/

__u_boot_cmd_end = .;          /* u_boot_cmd段结束位置,由此可以看出,*/

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

.bss : { *(.bss) }                    /*指定bss段 */

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

}

二、uboot连接脚本上显示的全局起始连接地址是0x0,但是实际编译的地址是0x33f80000,为什么?

   连接命令:-T /work/u-boot-1.1.6/board/smdk2410/u-boot.lds -Ttext 0x33f80000

    解释:正是由于加入红色部分选项,会将全局起始连接地址更改成以text定义的0x33f80000。

三、疑问:使用-Ttext 0x33f80000并不会在下述情形中有效

    将lds脚本更改成如下模样

. = 0x00000000;
. = ALIGN();
text : //注意text前边没有".",而u-boot.lds中是有的
{
cpu/arm920t/start.o (.text)
*(.text)
}

    再来执行编译命令-T /work/u-boot-1.1.6/board/smdk2410/u-boot.lds -Ttext 0x33f80000,就不能成功的更改连接地址,i don't know why。

 

uboot 连接脚本分析的更多相关文章

  1. u-boot链接脚本分析

    eclipse 64位下载地址:http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release ...

  2. (转载)U-boot启动完全分析

    1.1 U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 Ø 硬件设备初始化 Ø 加载U-Boot第二阶段代码到RAM空间 Ø 设置好栈 Ø ...

  3. Uboot命令U_BOOT_CMD分析

    其中U_BOOT_CMD命令格式如下: U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help") 各 ...

  4. u-boot源码分析之C语言段

    题外话: 最近一直在学习u-boot的源代码,从代码量到代码风格,都让我认识到什么才是真正的程序.以往我所学到的C语言知识和u-boot的源代码相比,实在不值一提.说到底,机器都是0和1控制的.感觉这 ...

  5. u-boot启动流程分析(2)_板级(board)部分

    转自:http://www.wowotech.net/u-boot/boot_flow_2.html 目录: 1. 前言 2. Generic Board 3. _main 4. global dat ...

  6. u-boot源码分析

    Uboot源码分析 源码以u-boot-1.3.4为基准,主芯片采用at91sam9260,主要介绍uboot执行流程. uboot官网:http://www.denx.de/wiki/U-Boot/ ...

  7. uboot makefile构建分析-续

    前言 这篇博文是 uboot makefile构建分析的续篇,继续分析uboot构建u-boot.bin的过程 构建u-boot.bin过程分析 makefile一开始,就是确定链接脚本.在构建ubo ...

  8. gcc连接脚本lds详解

    转载:blog.chinaunix.net/uid-28685940-id-3889918.html 我们对每个c或者汇编文件进行单独编译,但是不去连接,生成很多.o 的文件,这些.o文件首先是分散的 ...

  9. uboot主Makefile分析(t配置和编译过程详解)

    1.编译uboot前需要三次make make distcleanmake x210_sd_configmake -j4 make distclean为清楚dist文件. make x210_sd_c ...

随机推荐

  1. composer 常用命令

    composer list 列出所有可用的命令 composer init 初始化 composer.json文件(就不劳我们自己费力创建啦),会要求输入一些信息来描述我们当前的项目,还会要求输入依赖 ...

  2. C# 的异步

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  3. 食品药检所LIMS需求分析说明书

    1.XX市食品药检所LIMS系统需求分析... 5 1.1检验业务流程... 5 1.1.1样品受理... 5 1.1.1.1选择受理任务... 5 1.1.1.2录入检品信息... 5 1.1.1. ...

  4. Android项目svn代码管理问题[转]

    用svn控制版本,svn本身是不会识别哪些该传,哪些不该传,这就导致有些关于路径的东西(比如拓展jar的路径)也被上传了,而当别人下载后,那个路径对于这个人可能完全不存在,项目编译就会出问题.用ecl ...

  5. 从struts2.1开始Convention零配置

    从struts2.1开始,struts2不再推荐使用Codebehind作为零配置插件,而是改为使用Convention插件来支持零配置,和Codebehind相比,Convention插件更彻底,该 ...

  6. jquerymobile知识点:select的动态帮定

    代码: <div data-role="navbar"> <ul> <li> <select name="select-choi ...

  7. docker-proxy 实现容器代理访问

    可实现多个容器web主机对外提供访问 运行代理容器 nginx-proxy docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.soc ...

  8. 为centos6.5系统添加epel源

    1.进去http://fedoraproject.org/wiki/EPEL 2.因为系统是centos 6.5,所以获取epel-release-latest-6.noarch.rpm的地址(htt ...

  9. Spring远端调用的实现-Spring Http调用的实现

    1:Spring Http设计思想 最近在研究公司自己的一套rpc远程调用框架,看到其内部实现的设计思想依赖于spring的远端调用的思想,所以闲来无事,就想学习下,并记录下. 作为spring远端调 ...

  10. hdu2041java

    超级楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...