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

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原理详细分析)。

U-boot引导内核流程分析 当U-boot完成重定位和初始化外设后,它将正式进入工作状态,可以加载内核镜像到DDR的链接地址中了 阅读详情

相关推荐

u-boot链接脚本解析

一、关于编译连接脚本 连接脚本是用来描述输出文件的内存布局。 GNU编译器生成的目标文件缺省为elf格式,elf文件由若干段(section)组成,如不特殊指明,由C源程序生成的目标代码中包含如下段:.text(正文段)包含程序的指令代码;.data(数据段)包含固定的数据,如常量、字符串;.bss(未初始化数据段)包含未初始化的变量、数组等。C++源程序生成的目标代码中还包括.fini(

shanzhizi的专栏 4181

uboot移植过程中的运行地址和装载地址的区别

uboot移植涉及到底层硬件的设置,因此需要掌握UART、系统时钟频率、NOR FLASH、NAND FLASH、SDRAM、网卡、存储控制器等硬件的功能及配置,这些都可以参照相应开发板的芯片手册来完成,没有什么大的问题。在移植过程中,一直困扰我的是PIC(代码无关性)问题,即运行地址和加载地址的区别,看过网上很多关于这两者的介绍,感觉懂一点,却一直不知所然。在参考大量的文献下,算是得了一点心得。

8601

Kaggle | 总奖池超200万美金的数学竞赛AIMO2冠军方案

••••结论1:通过结合高质量大规模数据集、工具集成推理和生成式选择方法,可以构建在挑战性数学问题上达到最先进水平的语言模型。本文的方法在 AIMO-2 竞赛中的胜利以及在多个数学基准上的 SOTA 结果验证了这一策略的有效性。结论2:发布 OpenMathReasoning 数据集、OpenMath-Nemotron 模型和代码是社区的宝贵财富。

hxshine的博客 1194

U-boot链接地址的详解

1、运行地址<--->链接地址:他们两个是等价的,只是两种不同的说法。 2、加载地址<--->存储地址:他们两个是等价的,也是两种不同的说法。 运行地址:程序在SRAM、SDRAM中执行时的地址。就是执行这条指令时,PC应该等于这个地址,换句话说,PC等于这个地址时,这条指令应该保存在这个地址内。 加载地址:程序保存...

weixin_33778544的博客 514

✨从零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub

构建一个带 GPU 支持的深度学习开发镜像;使用 PyTorch 2.5.1(CUDA 12.4)环境;发布并托管 Docker 镜像至 Docker Hub;验证 GPU 环境正常运行!🎉 这将极大提升你的项目部署效率,尤其是在多人协作或跨平台部署场景中。

用大模型重构生活:猫奴程序员的AI智能日常记录 1576

Anaconda启动失败,一直在loading application的问题

实战基础新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本

Tristan的博客 2771

U-Boot移植——链接地址、运行地址、加载地址、存储地址

1 运行地址 2 装载地址 参考资料 [1]U-Boot移植过程中的运行地址和装载地址的区别 [2]链接地址和运行地址 [3]运行地址,链接地址,加载地址,存储地址 位置无关码、位置有关码

OneSea 5948

Navicat16/17数据库密码安全解析与实战解密指南

本文详细解析了Navicat 16/17版本中数据库密码的加密机制,并提供了实用的密码找回指南。通过导出连接文件获取加密密文,利用基于AES-128-CBC算法的本地HTML工具,可安全、离线地解密遗忘的密码。文章强调该方法仅适用于合法恢复自有密码,并给出了操作步骤与安全建议。

weixin_28835583的博客 462

调试ZYNQ的u-boot 2017.3 不能正常启动,记录调试过程

u-boot调试

IT张先生 1222

游戏战斗系统架构设计的演绎之路——从一坨意大利面条到一座精密钟表

摘要:游戏战斗系统架构设计的演进之路 本文系统梳理了游戏战斗系统从早期街机到现代3A大作的架构发展历程。70-80年代的街机游戏采用基础碰撞盒判定(如《街头霸王》);90年代实现动画融合与状态机架构(《最终幻想》《拳皇》);2000年后MMO引入服务器验证与同步技术(《魔兽世界》);3D时代融合物理引擎与智能AI(《GTA5》《只狼》);移动端则发展出轻量化架构与云端判定(《王者荣耀》)。现代战斗系统已实现模块化、数据驱动和热更新,未来趋势是AI裁判与云战斗系统。这一演进过程展现了技术与创意的完美结合,数百

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 800

YOLOv8改进,YOLOv8主干网络替换为FasterNet(全网独发手把手教学,助力涨点)

FasterNet的整体架构由四个分层阶段组成,每个阶段包含一组FasterNet模块,并在前面加一个嵌入或合并层。最后三层用于特征分类。每个FasterNet模块内部,一个PConv层后跟两个PWConv层,为了保持特征多样性并降低延迟,归一化和激活层仅在中间层之后进行,其中,PConv 是一种快速高效的卷积操作,通过仅对部分输入通道应用卷积滤波器,而保持其余通道不变,从而减少了计算量和内存访问。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2015

链接地址、运行地址、加载地址、存储地址、位置相关与位置无关

uboot-链接地址、运行地址、加载地址、存储地址、位置相关与位置无关 一.概念 1.运行地址:程序执行时的地址,因为命令执行分取指、译码、执行,所以运行地址就是PC-8处的地址。 2.链接地址:链接地址是给编译器用的,用来计算代码中相关地址偏移的。 3.加载地址和存储地址是等价的,只是两个不同的说法而已,指的是程序保存在Flash中的地址。 4.位置无关码:b、bl、mov等都是位置无关码 5.位置相关码:ldr pc,=xxx 等都是位置有关码 二.实例 由于运行地址与链接地址有时相同,有时又不相同,所

zj82448191的博客 2014

MATLAB - 机械臂手眼标定(眼在手内) - 估计安装在机器人上的移动相机的姿态

执行手眼校准有助于操作配备末端执行器(简称 “手”)的机械臂,该末端执行器依赖于摄像头提供的视觉数据。一旦完成了眼在手外的校准,机械臂就能准确地移动到摄像头识别的特定像素位置。这种能力是执行精确拾放任务(如分类、堆垛和分拣)的基础,即使在摄像机的确切位置和方向未知的情况下也是如此。机器人-摄像机系统有两种构型:眼在手内和眼在手外。在眼在手内构型中,摄像头直接安装在机器人手臂的末端执行器上。相反,在眼在手的构型中,摄像头固定在一个静止的物体上,机器人手臂在其视野内。

机器人控制与仿真应用 3347

U-Boot学习(4):u-boot.lds链接脚本分析

lds链接脚本基础与例子分析。SECTIONS {......secname和contents是必须的,前者用来命名这个段,后者用来确定代码中的什么部分放在这个段中。start:段重定位地址,也称为VMA,即运行地址。如果代码中有位置相关的指令,程序在运行时,这个段必须放在这个地址上。:虽然start指定了运行地址,但是仍可以使用BLOCK(align)来指定对齐的要求一这个对齐的地址才是真正的运行地址。(NOLOAD):用来告诉加载器,在运行时不用加载这个段。

主要分享嵌入式软件、人工智能部分知识 2896

实现电脑同时上内网和外网(或通过外网访问到该电脑通过该电脑访问内网)

一、需求描述 目前使用的公司网络只能够上内网,但是又有上外网查资料的需求: ①想要实现电脑既能上内网的同时也可以上外网; ②想要使用其他外网电脑使用外网连接到该电脑,通过该电脑访问内部的网络内容。 二、准备内容 电脑必须具备两个网卡,即:可以同时连接内网和外网(比如我的笔记本就可以:使用网线连接笔记本网口与内网通讯,使用WIFI连接手机热点访问外部网络); 注意:如果只有一个网口,可以另外购买USB的无线网卡来实现上网卡。 三、实现电脑同时上内网和外网的操作步骤 3.1、网络拓扑图 ..

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 2万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

U-Boot中关于TEXT_BASE,代码重定位,链接地址相关说明

都知道U-BOOT分为两个阶段,第一阶段是(~/cpu/arm920t/start.S中)在FLASH上运行(一般情况下),完成对硬件的初始化,包括看门狗,中断缓存等,并且负责把代码搬移到SDRAM中(在搬移的时候检查自身代码是否在SDRAM中),然后完成C程序运行所需要环境的建立,包括堆栈的初始化等,最后执行一句跳转指令: ldr pc, _start_armboot _sta...

xiaozi0221的博客 430

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

lds链接脚本基础及u-boot.lds链接脚本分析

在 目标文件中的内容至少包括编译后的机器指令代码、数据,还包括了链接时所需要的的一些信息,比如符号表、调试信息、字符串等。目标文件将这些信息按不同的属性以“ 段 ”(segment)的形式存储。以下就是一些常见的段。并且还根据一个简单程序说明编译后的目标文件的结构。主要分析表格中常见的段信息,其实还有其他段例如注释信息段( .comment ),但这不是我们关注的重点。编译过程编译: arm-linux-gcc -c -o led_on.o led_on.S #或led_on.c。

tecoes的博客 277

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

代码重定位——uboot装载地址和运行地址

Uboot开发——运行地址和装载地址区别 小狼@http://blog.youkuaiyun.com/xiaolangyangyang uboot移植涉及到底层硬件的设置,因此需要掌握UART、系统时钟频率、NOR FLASH、NAND FLASH、SDRAM、网卡、存储控制器等硬件的功能及配置,这些都可以参照相应开发板的芯片手册来完成,没有什么大的问题。在移植过程中,一直困扰我的是PIC(代码无关性)问题,即运行地址和加载地址的区别,看过网上很多关于这两者的介绍,感觉懂一点,却一直不知所然。在参考大量...

Hello Mr.Z的博客 3248

关于加载地址和运行地址理解

这几天在看uboot的汇编部分,唯一觉得有点弄不懂的就是存储地址和运行地址了,网上看了很多文章,最后还是没有完全通透,云里雾里的,昨晚看了这篇帖子突然恍然大悟,特来谈谈个人的想法,不对的地方还请朋友们帮忙指出来,以便修正,谢谢^_^加载地址/存储地址和运行地址/链接地址区别: a.加载地址是指代码存储所在的物理地址,由于ARM总是从0开始取值,即PC初始值为0,所以加载地址必须对应

yanlutian的博客 7814

U-boot 链接加载

U-boot 链接加载   做了近两年 ARM 下的驱动开发,常用的各个设备驱动基本都碰过,不过 Boot 由于任务安排的缘故(公司一直有专人在做),一直没有机会接触,从刚开始接触嵌入式的时候,就一直想弄清楚板子上电后,程序是怎么执行的,不过看了下公司 boot 源码,就很

yuyin86的专栏 917

boot 位置无关,加载地址运行地址理解

uboot理解 文章目录uboot理解前言一、位置有关和无关?大体介绍解释ldr指令B指令二、位置有关无关具体代码分析1.code指令分析B BL指令ADRLDR链接地址和运行地址图解 前言 一、位置有关和无关? 大体介绍 代码的运行分为三个阶段:取指,译码,执行,而取指令肯定要知道代码地址,执行过程又包含对变量的读写,对变量的读写也得知道变量的地址吧,至于代码的地址和变量的地址怎么确定呢? 答:由编译器确定,编译器确定地址分为两种形式,1、根据当前PC+偏移地址确定地址。2、直接用链接地址 对于第一种方

yanzhongqian的博客 856

U-Boot重定位机制深度解析:从链接地址到SDRAM搬移的实现原理

在嵌入式系统开发中,Bootloader的启动流程是系统初始化的关键环节,其中程序重定位是理解硬件与软件协同工作的核心概念。程序在编译链接时会确定一个链接地址,但上电后CPU往往从只读存储器执行代码,导致运行地址与链接地址不匹配。这一矛盾需要通过重定位技术解决,其原理是利用位置无关码将代码从Flash等慢速存储器搬移到高速SDRAM中,从而提升执行效率并支持动态修改。这项技术对于优化启动速度、实现复杂初始化逻辑具有重要价值,广泛应用于ARM等嵌入式平台。本文以U-Boot为例,深入剖析重定位过程中链接地址与

weixin_30271335的博客 442

U-Boot的重定位实现机制

获取当前芯片平台的相关信息 为了深入了解ARM 64位芯片架构,笔者为u-boot添加了archinfo命令,以获取CPU当前的工作状态等信息。不过在增加完整的64位ARM架构信息查看功能之前,笔者首先增加了简单的获取当前PC指针及栈指针的函数: diff --git a/arch/arm/lib/arch-info.c b/arch/arm/lib/arch-info.c new file mode 100644 index 00000000..b9bc9fd0 --- /dev/null +++ b/a

yeholmes的专栏 2808
上一篇: linux下实现U盘和sd卡的自动挂载
下一篇: wince7下SD host驱动学习笔记
EmSoftEn
博客等级 码龄12年 40粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值