一、脚本分析

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. Navicat远程连接MySQL数据库

    1.打开Navicat,在界面的“主机名和IP地址”处输入IP地址,一般是192.168.1.1 2.输入相应的用户名和密码,点击连接测试,确认是否已经连接,之后就可以点击确定了 3.找到相应的数据库 ...

  2. ECMAScript和JavaScript的联系

    ECMAScript是一种规范,一种标准.类似于编程语言的接口,定义好一套规范后,各大浏览器厂商遵循规范各自实现之,同时,也做了一些扩展,这些扩展就是规范里面没有的. JavaScript是一种实现, ...

  3. Sublime_text3怎么发现PHP语法错误?

    昨晚因为php的某个变量代码写错了,sublime又没有提示语法错误.弄了许久,一段段的调试,最后才知道是取到的变量是空的 sublime可以提示php语法错误 在sublime写完了php代码后,如 ...

  4. Pilin —— 一个基于Xmpp openfire smack的即时聊天工具

    https://github.com/whfcomm/Pilin

  5. MyEclipse10.0安装jad反编译插件

    1.下载反编译工具jad(下面提供下载) 将下载下来的jadstar158.zip解压缩,将jad.exe文件放入jdk安装目录下 如:C:\Program Files\Java\jdk1.6.0_2 ...

  6. oracle3

    查看表结构 DESC emp; 查询所有列 SELECT * FROM dept; 切忌动不动就用select * set timing on; 打开显示操作时间的开关,在下面显示查询时间. CREA ...

  7. kafka Windows客户端Linux服务器---转

    原文:http://blog.csdn.net/jingshuigg/article/details/25001979 一.对于服务器端的搭建可以参考上一篇文章:kafka单机版环境搭建与测试 服务器 ...

  8. RTB日志分析MR程序设计

    到新公司三个月了,上个月做的是Beacon项目,详细的设计思想还没有写文档.这两周开始搞Hadoop,开始阅读相关论文.开始编写MR程序.开始写java,大学时用java较多,工作后就一直在用c/c+ ...

  9. Day02 - Python 基本数据类型

    1 基本数据类型 Python有五个标准的数据类型: Numbers(数字) String(字符串) List(列表) Tuple(元组) Dictionary(字典) 1.1 数字 数字数据类型用于 ...

  10. Linux如何卸载挂载文件

    在我们进行远程文件操作的时候,我们经常会出现文件服务出现卸载掉哦情况.例如 umount /mnt/net1umount: /mnt/net1: device is busy.        (In ...