u-boot中链接地址和加载地址的相关知识

以zc702开发板的u-boot为例

链接地址(运行地址):链接地址是在程序编译链接阶段就确定好的地址。

u-boot的链接脚本由CONFIG_SYS_LDSCRIPT宏定义来指定,如在zynq_common.h当中有如下代码:

#define CONFIG_SYS_LDSCRIPT  "arch/arm/cpu/armv7/zynq/u-boot.lds"

在该链接脚本中指定了u-boot中各部分的链接顺序。同时zynq_common.h中的CONFIG_SYS_TEXT_BASE则指定了u-boot链接的起始地址,其定义如下:

#define CONFIG_SYS_TEXT_BASE   0x04000000

在生成的u-boot.map中可看到链接后各函数的链接地址,如下所示,可看出链接起始地址确实为0x04000000

 arch/arm/cpu/armv7/start.o(.text*)
 .text          0x04000000      0x3a0 arch/arm/cpu/armv7/start.o
                0x04000000                _start
                0x04000040                _end_vect
                0x04000040                _TEXT_BASE
                0x04000044                _bss_start_ofs
                0x04000048                _bss_end_ofs
                0x0400004c                _end_ofs

加载地址:是指程序实际在内存上存放的地址。

对于zc702来说,u-boot是被fsbl加载到内存中的,那么fsbl将u-boot加载到哪里呢?实际上fsbl就是将u-boot加载到了它的链接地址上。fsbl通过读取BOOT.bin(由fsbl和u-boot生成)的分区信息来获取u-boot的链接起始地址,然后就将这个链接起始地址作为u-boot的加载地址。

对于u-boot来说,链接地址和加载地址可以一样也可以不一样。如在zc702开发板的新版u-boot中(如2014.4),在u-boot重定位前这两个地址是一样的,重定位后链接地址和加载地址就不一样了,但此时u-boot仍然可以正常运行(详细原理见uboot的relocation原理详细分析)。

时间: 04-21

u-boot中链接地址和加载地址的相关知识的相关文章

源码跟读,Spring是如何解析和加载xml中配置的beans

Spring版本基于: 跟踪代码源码基于: https://github.com/deng-cc/KeepLearning commit id:c009ce47bd19e1faf9e07f12086cd440b7799a63 1.配置启动Spring所需的监听器 web.xml中配置监听器 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-cla

C#中使用正则表达式提取超链接地址的集中方法(转)

一般在做爬虫或者CMS的时候经常需要提取 href链接或者是src地址.此时可以使用正则表达式轻松完成. Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>"); MatchCollection mc = reg.Ma

eclipse中tomcat无法加载spring boot

转自: http://blog.csdn.net/u010797575/article/details/50517777 最近搭建一套spring boot框架,作为 application 启动项目OK, 但将 spring boot web放入 自己配置的tomcat容器中,出现不加载spring boot,直接启动成功. 这可能是因为项目引用 spring-web 失败.解决方案 1.首先检查项目的环境时候有问题(eg:build path/ java compiler/ project

网络-数据包在路由转发过程中MAC地址和IP地址,变与不变

关于MAC地址和IP地址在传输过程中变与不变的问题: 结论:MAC地址在同一个广播域传输过程中是不变的,在跨越广播域的时候会发生改变的:而IP地址在传输过程中是不会改变的(除NAT的时候),总结为 路由转发MAC不变,IP变. 我们知道的几个概念: 首先我们要知道,MAC地址是用于同意物理或逻辑第2层网络上的设备间进行通信的: 而第三层地址(IP地址)是可以在多个网络设备之间通信的. 下面我们来分析一下: MAC地址是在同一个广播域有效的,那么去了另外一个广播域(网段)MAC地址肯定要改变的:

ARM指令集中常用的存储和加载指令

ARM微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作.常用的加载存储指令如下: -  LDR     字数据加载指令 -       LDRB    字节数据加载指令 -  LDRH    半字数据加载指令 -  STR     字数据存储指令 -       STRB    字节数据存储指令 -  STRH    半字数据存储指令 1.LDR指令 LDR指令的格式为: LDR{条件} 目的寄存器,<存储器地址>

解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题

解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题 iOS开发 · 2015-01-22 11:31 MWPhotoBrowser是一个非常不错的照片浏览器,在github的star接近3000个,地址:https://github.com/mwaterfall/MWPhotoBrowser.git MWPhotoBrowser来加载小图1M以下的都应该不会有内存警告的问题.如果遇到大图,3M.4M.5M的大图,很有可能导致内存警告.最近我就遇到这个问题,很是头疼

【Java高级】JVM内存区域模型和加载过程

JVM内存区域模型 1.方法区 也称"永久代" ."非堆",  它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内存区域.默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小. 运行时常量池:是方法区的一部分,Class文件中除了有类的版本.字段.方法.接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中.

SpringBoot(三) :Spring boot 中 Redis 的使用

前言: 这一篇讲的是Spring Boot中Redis的运用,之前没有在项目中用过Redis,所以没有太大的感觉,以后可能需要回头再来仔细看看. 原文出处: 纯洁的微笑 SpringBoot对常用的数据库支持外,对NoSQL 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化.除此之外,Redis还提供一些类数据库的特性,比如事务,HA,

浅谈Android中的异步加载之ListView中图片的缓存及优化三

     隔了很久没写博客,现在必须快速脉动回来.今天我还是接着上一个多线程中的异步加载系列中的最后一个使用异步加载实现ListView中的图片缓存及其优化.具体来说这次是一个综合Demo.但是个人觉得里面还算有点价值的就是里面的图片的缓存的实现.因为老实说它确实能在实际的项目中得到很好的应用.主要学习来源于慕课网中的异步加载学习,来自徐宜生大神的灵感.本次也就是对大神所讲知识的一个总结及一些个人的感受吧. 这次是一个综合的Demo,主要里面涉及到的知识主要有:网络编程.异步加载.JSON解析.