u-boot顶层目录链接脚本文件(u-boot.lds)介绍(*)

行稳方能走远 行稳方能走远     2022-12-14     420

关键词:

参考:U-Boot顶层目录链接脚本文件(u-boot.lds)介绍
作者:一只青木呀
发布时间: 2020-10-23 13:52:23
网址:https://blog.csdn.net/weixin_45309916/article/details/109240625

要分析 uboot 的启动流程,首先要找到“入口”,找到第一行程序在哪里。程序的链接是由链接脚本来决定的,所以通过链接脚本可以找到程序的入口。如果没有编译过 uboot 的话链接脚本为 arch/arm/cpu/u-boot.lds。但是这个不是最终使用的链接脚本,最终的链接脚本是在这个链接脚本的基础上生成的。编译一下 uboot,编译完成以后就会在 uboot 根目录下生成 u-boot.lds
文件,如下图所示:

只有编译 u-boot 以后才会在根目录下出现 u-boot.lds 文件!

1、u-boot.lds文件

打开 u-boot.lds,内容如下:


第 3 行为代码当前入口点: _start, _start 在文件 arch/arm/lib/vectors.S 中有定义,如图下所示:

2、arch/arm/lib/vectors.S 文件


从上图可以看出, _start 后面就是中断向量表,从图中的“.section “.vectors”, "ax”可以得到,此代码存放在.vectors 段里面。

3、u-boot.map(地址映射文件)

打开 u-boot.map(地址映射文件):

u-boot.map 是 uboot 的映射文件,可以从此文件看到某个文件或者函数链接到了哪个地址,从上图932 行可以看到__image_copy_start 为 0X87800000,而.text 的起始地址也是0X87800000。

4、链接文件分析

.text(代码段)描述
*(.__image_copy_start)uboot 拷贝的首地址

在链接文件中第 10 行*(.__image_copy_start) 在映射文件中可以看到地址为 0X87800000,而.text 的起始地址也是0X87800000。

在链接文件中第 11 行是 vectors 段, vectors 段保存中断向量表,从u-boot.lds文件我们知道了 vectors.S 的代码是存在 vectors 段中的。从地址映射文件中, vectors 段的起始地址也是 0X87800000,说明整个 uboot 的起始地址就是 0X87800000。

在链接文件中第 12 行将 arch/arm/cpu/armv7/start.s 编译出来的代码放到中断向量表后面。

在链接文件中第 13 行为 text 段,其他的代码段就放到这里

在链接文件中第 16 行 .rodata只读数据段(一般存放常量)

在链接文件中第 18 行,数据段 (一般存放已初始化的全局和静态变量)

在链接文件中第 24 行 ,.u_boot_list段

在链接文件中第 28 行, .image_copy_end:uboot 拷贝的结束地址

在链接文件中第 32 行,.rel_dyn_start:.rel.dyn 段起始地址

在链接文件中第 39 行,.rel_dyn_end:.rel_dyn段结束地址

在链接文件中第 52 行,.bss_start:.bss 段起始地址(静态数据区,一般存放未初始化的全局和静态变量)

在链接文件中第 61 行,.bss_end:.bss段结束

总结

变量数值描述
*(.vectors)0x87800000中断向量表
arch/arm/cpu/armv7/start.o0x87800300strrt.c
__image_copy_start0x87800000uboot 拷贝的首地址
__image_copy_end0x8785dd54uboot 拷贝的结束地址
__rel_dyn_start0x8785dd54.rel.dyn 段起始地址
__rel_dyn_end0x878668f4.rel.dyn 段结束地址
_image_binary_end0x878668f4镜像结束地址
__bss_start0x8785dd54.bss 段起始地址
__bss_end0x878a8e74.bss 段结束地址

上表中的“变量”值可以在 u-boot.map 文件中查找,上表中除了__image_copy_start以外,其他的变量值每次编译的时候可能会变化,如果修改了 uboot 代码、修改了 uboot 配置、选用不同的优化等级等等都会影响到这些值。所以,一切以实际值为准

linux系统移植:u-boot链接脚本(代码片段)

文章目录Linux系统移植:U-Boot链接脚本一、u-boot.lds介绍二、u-boot.lds分析Linux系统移植:U-Boot链接脚本一、u-boot.lds介绍前面提到的U-Boot的本质就是一个大的裸机程序,执行的时候需要先找到程序入口,而程序的链接... 查看详情

u-boot代码分析--第一节(代码片段)

u-boot代码分析--第一节编者:weirdo时间:2020-5-12QQ:2651293248标题:u-boot代码分析第一节1.u-boot.lds文件?? 这里指的是顶层目录下面的u-boot.lds,这里需要注意的是这个文件是根据arch/arm/cpu/armvx/对应的u-boot.lds模板生成的,在不严格的... 查看详情

嵌入式linux8.链接脚本u-boot.lds(代码片段)

...序的入口。如果没有编译过uboot的话链接脚本为arch/arm/cpu/u-boot.lds。但是这个不是最终使用的链接脚本,最终的链接脚本是在这个链接脚本的基础上生成的。编译一下uboot,编译完成以后就会在uboot根目录下生成u-boot.lds文件,如图... 查看详情

嵌入式linux8.链接脚本u-boot.lds(代码片段)

...序的入口。如果没有编译过uboot的话链接脚本为arch/arm/cpu/u-boot.lds。但是这个不是最终使用的链接脚本,最终的链接脚本是在这个链接脚本的基础上生成的。编译一下uboot,编译完成以后就会在uboot根目录下生成u-boot.lds文件,如图... 查看详情

u-boot顶层目录config.mk分析

1.设置obj与srcifneq($(OBJTREE),$(SRCTREE))ifeq($(CURDIR),$(SRCTREE))dir:=elsedir:=$(subst$(SRCTREE)/,,$(CURDIR))endifobj:=$(if$(dir),$(OBJTREE)/$(dir)/,$(OBJTREE)/)src:=$(if$(dir),$(SRCTREE)/$(dir)/,$(SR 查看详情

linux系统移植:u-boot顶层makefile分析(上)(代码片段)

目录Linux系统移植:U-Boot顶层Makefile分析(上)一、版本号二、传递变量到子make三、命令输出四、静默输出五、编译输出目录六、代码检查七、模块编译八、获取主机架构和系统九、设置目标架构、交叉编译器和配置... 查看详情

嵌入式开发(s5pv210)——u-boot的顶层makefile分析(代码片段)

前言本文分析的是u-boot的主Makefile以及主Makefile调用到的一些关键文件,此Makefile可能和你手里的u-boot的Makefile不一样,这是正常的,但是从逻辑上都是一样的,无非就是把同样功能的脚本放在了不同的位置或者子Ma... 查看详情

linux系统移植:u-boot工程创建(代码片段)

文章目录Linux系统移植:U-Boot工程创建一、U-Boot文件目录二、U-Boot目录解析2.1arch文件夹2.2board文件夹2.3config文件夹2.4.u-boot.xxx_cmd文件2.5顶层Makefile文件2.6u-boot.xxx文件2.7.config文件2.8README文件三、U-Boot过程创建3.1打开工程文件夹3... 查看详情

linux系统移植:u-boot顶层makefile分析(下)(代码片段)

目录Linux系统移植:U-Boot顶层Makefile分析(下)一、调用scripts/Kbuild.include二、导出交叉编译工具变量设置三、导出其他变量四、makexxx_config过程五、make过程Linux系统移植:U-Boot顶层Makefile分析(下)继续沿着... 查看详情

u-boot

1.  配置文件,配置内核时生成。所有的Makefile文件(包括顶层目录和各级子目录)都是根据.config来决定使用哪些文件的2.  $(@:_config=)的结果是mini2440。它来源于$(var:xx=yy)此句表示将变量var中以xx结尾的部分替换成yy。[email... 查看详情

嵌入式开发(s5pv210)——u-boot的顶层mkconfig文件分析(代码片段)

mkconfig文件的调用#第一步:SRCTREE是源码的路径,也就是顶层的目录MKCONFIG :=$(SRCTREE)/mkconfigexportMKCONFIG#第二步:配置#$(@:_config=):作用是将x210_sd_config的_config去掉,得到x210_sdx210_sd_c 查看详情

u-boot顶层makefile介绍(*)(代码片段)

参考:U-Boot顶层Makefile介绍作者:一只青木呀发布时间:2020-10-2216:22:17网址:https://blog.csdn.net/weixin_45309916/article/details/109218569目录1、准备好uboot源码2、分析顶层Makefile2.1、版本号2.2、MAKEFLAGS变量2.3、 查看详情

转:u-boot分析三(u-boot.lds脚本)

u-boot分析三(u-boot.lds脚本)转自:http://blog.csdn.net/itxiebo/article/details/50938753 目的,了解链接器用到的脚本文件u-boot.lds。在开始这篇博文之前,需要先了解一些GNUlinkerscript的基本知识,可以参考博主的另外一篇分享《GNUlinkerscript... 查看详情

u-boot启动流程---u-boot.lds(代码片段)

5.1u-boot.lds 链接脚本分析  uboot编译出来的第一个链接脚本就是执行u-boot.lds链接脚本,去掉里面无用的和没有定义的,进行分析。1/*配置头文件,自动生成的,包含芯片SOC相关的头文件*/2#include<config.h>3/*主要是做一些32... 查看详情

u-bootmakefile(代码片段)

目录u-boot(二)makefile引入目录结构(1.1.6)配置文件目标配置具体的单板编译阶段过程链接入口配置链接地址附录附录A:mkconfig解析附录B链接脚本title:u-boot(二)makefiletags:linuxdate:2018-09-2220:56:05---u-boot(二)makefile引入我们是怎么编译的... 查看详情

tiny4412u-boot分析u-boot配置流程分析

...可以了解到它的作用#Scripttocreateheaderfilesandlinkstoconfigure#U-Bootforaspecificboard.##Para 查看详情

嵌入式开发(s5pv210)——u-boot的顶层config.mk分析(代码片段)

1、config.mk的作用config.mk的作用是配置uboot编译的,比如配置交叉编译工具链,链接地址,编译选项,指定头文件路径等,但是config.mk的配置是建立在顶层mkconfig、主Makefile等配置之上的。2、config.mk的调用#loadothe... 查看详情

u-boot代码分析--第一节(代码片段)

u-boot代码分析--第一节编者:weirdo时间:2020-5-12QQ:2651293248标题:u-boot代码分析第一节1.u-boot.lds文件?? 这里指的是顶层目录下面的u-boot.lds,这里需要注意的是这个文件是根据arch/arm/cpu/armvx/对应的u-boot.lds模板生成的,在不严格的... 查看详情