uboot解决重定位后链接地址和运行地址不一致的方法

简介: uboot解决重定位后链接地址和运行地址不一致的方法
//示例代码 arch/arm/config.mk文件代码段
 needed for relocation
//设置 uboot 链接选项,加入了“-pie”选项,编译链接 uboot 的时候就会使用到“-pie”
 LDFLAGS_u-boot += -pie

uboot 对于重定位后链接地址和运行地址不一致的解决方法就是采用位置无关码

使用“-pie”选项以后会生成一个.rel.dyn 段,

uboot 就是靠这个.rel.dyn 来解决重定位问题的,在 u-bot.dis 的.rel.dyn 段中有如下所示内容

//示例代码 .rel.dyn 段代码段
Disassembly of section .rel.dyn: 
8785da44 <__rel_dyn_end-0x8ba0>:
8785da44: 87800020 strhi r0, [r0, r0, lsr #32]
8785da48: 00000017 andeq r0, r0, r7, lsl r0
......
8785dfb4: 87804198 ; <UNDEFINED> instruction: 0x87804198
8785dfb8: 00000017 andeq r0, r0, r7, lsl r0

先来看一下.rel.dyn 段的格式,类似第 7 行和第 8 行这样的是一组,也就是两个 4 字节数据为一组。

高 4 字节是 Label 地址标识 0X17,低 4 字节就是 Label 的地址,首先判断 Label 地址标识是否正确,也就是判断高 4 字节是否为 0X17,如果是的话高 4 字节就是 Label 值。

第 7 行值为 0X87804198,第 8 行为 0X00000017,说明第 7 行的 0X87804198 是个 Label,

这个正是示例代码  中存放变量 rel_a 地址的那个 Label。

目录
相关文章
|
存储 缓存 物联网
uboot 启动流程详细分析参考
uboot 启动流程详细分析参考
2367 1
|
关系型数据库 Linux Nacos
Linux 环境下使用 Docker 部署 Seata 1.7.1 (图文教程)
Linux 环境下使用 Docker 部署 Seata 1.7.1 (图文教程)
|
SQL 开发框架 安全
Linux系统中ARMv8架构u-boot启动流程分析
Linux系统中ARMv8架构u-boot启动流程分析
1077 1
关于如何选择正确的U-boot版本
关于如何选择正确的U-boot版本
561 0
|
6月前
|
设计模式 缓存 安全
无锁编程与原子操作:构建极致性能的高并发队列
本文深入探讨无锁编程与原子操作在高并发队列中的应用,通过CAS、环形缓冲、版本化引用等技术,实现高性能、低延迟的线程安全队列,显著提升系统吞吐量,适用于日志、网络通信等高并发场景。
345 10
|
自然语言处理 搜索推荐 前端开发
语镜VocaMirror——基于sensevoice、cosyvoice和qwen模型实现与“自身声音”对话
语镜 VocaMirror 是一个创新的对话系统,灵感来源于汤姆猫游戏和亲人语音克隆项目,旨在让用户与自己的声音进行对话。系统融合了语音识别、自然语言处理及个性化语音合成技术,提供趣味互动、心理治疗辅助及多功能扩展等应用。用户可通过 Gradio 界面轻松使用,实现语音转文本、对话生成及个性化语音回复等功能。
1280 4
语镜VocaMirror——基于sensevoice、cosyvoice和qwen模型实现与“自身声音”对话
|
Python
Python reStructuredText风格注释详解
reStructuredText风格注释是Python代码注释的一种标准化格式,它提供了一种规范的注释格式,使得代码更加易读、易于维护。reStructuredText风格注释使用两个等号来包围注释标题,并按照一定规范编写。通过使用reStructuredText风格注释,我们可以为代码提供清晰的文档和说明,使得代码更加易读、易于维护。
746 2
|
存储 Linux Shell
uboot启动流程简要版(基于armv7)
uboot启动流程简要版(基于armv7)
1685 0
uboot启动流程简要版(基于armv7)
|
缓存 Linux 编译器
Linux系统中u-boot启动流程分析(详解)
Linux系统中u-boot启动流程分析(详解)
1899 2
|
测试技术 API 开发工具
📑教你如何编写一份 API 文档
API 文档是开发者理解和使用API的关键,它提供详细的说明、代码示例和调用过程,帮助创建无缝集成。好的API文档能提升开发人员体验,减少上手时间和维护成本,同时促进产品迭代。API有面向团队、合作伙伴和最终用户三种类型。编写文档时要考虑受众,提供清晰的概述、教程、认证信息、端点定义、状态码和错误码示例。维护更新与API同步的文档至关重要,遵循通俗语言、参考文档、示例和专人负责等最佳实践,确保全面性。GitHub、Twilio和Dropbox的API文档是良好示例。