当前位置: 首页 > news >正文

uboot启动流程-uboot代码重定位说明二

 一.  uboot启动流程

本文学习 uboot 的启动流程中涉及的 uboot 代码重定位部分。

_main 函数中会调用 relocate_code 函数。

relocate_code 函数分两个部分:

1.  拷贝 uboot 代码部分

2.  有关 " 重定位后有关函数调用或全局变量地址的问题"的解决方法。

本文继上一篇文章的学习,地址如下:

uboot启动流程-uboot代码重定位说明一_凌肖战的博客-CSDN博客

这里学习 uboot 重定位的第二部分内容:重定位后有关函数调用或全局变量地址的问题。

二.  uboot代码重定位

1.    重定位后函数调用或全局变量使用问题

具体问题描述:

重定位 就是 uboot 将自身拷贝到 DRAM 的另一个地放去继续运行(DRAM 的高地址处)。

我们知道,一个可执行的 bin 文件,其链接地址和运行地址要相等,也就是链接到哪个地址, 在运行之前,就要拷贝到哪个地址去。现在我们重定位以后,运行地址就和链接地址不同了,这 样寻址的时候不会出问题吗?

当简单粗暴的将uboot从0X87800000拷贝到其他地方以后,关于函数调用、全局变量引用就会出问题。Uboot对于这个的处理方法就是采用位置无关码,这个就需要借助于 .rel.dyn段。

接下来,relocate_code 函数 的第 94 行~109 行,是重定位.rel.dyn 段,.rel.dyn 段是存放.text 段中需要重定位地址的集合。

uboot重定位后的函数调用或全局变量地址问题处理如下:

94 ldr r2, =__rel_dyn_start /* r2 <- SRC &__rel_dyn_start */
95 ldr r3, =__rel_dyn_end /* r3 <- SRC &__rel_dyn_end */
96 fixloop:
97 ldmia r2!, {r0-r1} /* (r0,r1) <- (SRC location,fixup) */
98 and r1, r1, #0xff
99 cmp r1, #23 /* relative fixup? */
100 bne fixnext
101
102 /* relative fix: increase location by offset */
103 add r0, r0, r4
104 ldr r1, [r0]
105 add r1, r1, r4
106 str r1, [r0]
107 fixnext:
108 cmp r2, r3
109 blo fixloop

2.    代码测试

http://www.lryc.cn/news/184744.html

相关文章:

  • <HarmonyOS第一课>ArkTS开发语言介绍——闯关习题及答案
  • 香橙派、树莓派、核桃派、鲁班猫安装jupyter notebook【ubuntu、Debian开发板操作类似】
  • tomcat整体架构
  • 实现协议互通:探索钡铼BL124EC的EtherCAT转Ethernet/IP功能
  • Android之App跳转其他软件
  • 【Element UI】解决 el-dialog 弹框组件设置 custom-class 样式不生效问题
  • 前端菜鸟浅谈Web前端开发技术
  • Springboot项目log4j与logback的Jar包冲突问题
  • 光伏并网逆变器低电压穿越技术研究(Simulink仿真)
  • 命令模式,命令 Command 类对象的设计(设计模式与开发实践 P9)
  • jira 浏览器插件在问题列表页快速编辑问题标题
  • 2020架构真题(四十六)
  • 软件工程与计算总结(五)软件需求基础
  • 数学建模预测模型MATLAB代码大合集及皮尔逊相关性分析(无需调试、开源)
  • 泛型擦除是什么?
  • 阿里云轻量应用服务器有月流量限制吗?
  • mysql面试题25:数据库自增主键可能会遇到什么问题?应该怎么解决呢?
  • 学习css 伪类:has
  • 矩阵的相似性度量的常用方法
  • Java之TCP,UDP综合小练习一
  • Docker 日志管理 - ELK
  • windows系统下利用python对指定文件夹下面的所有文件的创建时间进行修改
  • 线性表的链式表示——单链表;头插,尾插,按值查找,按序号查找,插入,删除;
  • 【Spring Cloud系统】- Zookeer特性与使用场景
  • 最新AI智能创作系统源码SparkAi系统V2.6.3/AI绘画系统/支持GPT联网提问/支持Prompt应用/支持国内AI模型
  • R | R包默认安装路径的查看及修改
  • 将conda虚拟环境打包并集成到singularity镜像中
  • Android Studio 是如何和我们的手机共享剪贴板的
  • 大数据面试题:Spark和MapReduce之间的区别?各自优缺点?
  • 【开发篇】十八、SpringBoot整合ActiveMQ