博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uboot 连接脚本分析
阅读量:4624 次
发布时间:2019-06-09

本文共 1583 字,大约阅读时间需要 5 分钟。

一、脚本分析

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(4);                    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。

 

 

转载于:https://www.cnblogs.com/amanlikethis/p/3447487.html

你可能感兴趣的文章
根据类名获取元素
查看>>
下拉框
查看>>
我在百度开放云编程马拉松上的一个创意
查看>>
拼出漂亮的表格
查看>>
Java(四、类和对象)
查看>>
结对第一次—原型设计(文献摘要热词统计)
查看>>
echarts + timeline 显示多个options
查看>>
springmvc+quartz简单实现定时调度
查看>>
CentOS下递归遍历文件夹下所有文件,查找指定字符
查看>>
[PHP]利用XAMPP搭建本地服务器, 然后利用iOS客户端上传数据到本地服务器中(一.安装XAMPP)...
查看>>
CSS3伪类选择器
查看>>
转 C# 控制IE
查看>>
TP复习
查看>>
mysql的程序结构,实例, 及mysql的多实例
查看>>
Hurst指数python实现
查看>>
写页面得来的体会
查看>>
软件测试
查看>>
Js 提交 form 表单
查看>>
Response.Status http协议状态代码
查看>>
Luogu5405 CTS2019氪金手游(容斥原理+树形dp)
查看>>