搜索
bottom↓
回复: 4

u-boot重定位中adr指令的疑惑

[复制链接]

出0入0汤圆

发表于 2022-4-29 22:13:33 | 显示全部楼层 |阅读模式
在重定位之前, 有这么几句

  1.        
  2. adr        lr, here
  3. ldr        r0, [r9, #GD_RELOC_OFF]                /* r0 = gd->reloc_off */
  4. add        lr, lr, r0

  5. ldr        r0, [r9, #GD_RELOCADDR]                /* r0 = gd->relocaddr */
  6. b        relocate_code

  7. here:

复制代码



在迁移后通过 bx lr直接跳转到DRAM中的uboot运行
我的疑惑是
adr lr here, lr应该是被赋值了here的链接地址, 加上偏移量, 就是实际运行的地址

但是adr指令查阅资料之后, 在这里应该是被赋值了在内部RAM中运行的地址, 我不太明白怎么搞得

u-boot版本是2018.03, cpu型号是cortex-A7

出0入0汤圆

发表于 2022-4-29 22:24:50 来自手机 | 显示全部楼层
ldr和adr的含义不一样,一个是装入绝对地址,一个是装入相对地址,生成和地址无关的代码就要用adr,理解一下代码加载域和运行域,分散加载的原理

出0入0汤圆

 楼主| 发表于 2022-4-29 23:27:04 | 显示全部楼层
luhuaren 发表于 2022-4-29 22:24
ldr和adr的含义不一样,一个是装入绝对地址,一个是装入相对地址,生成和地址无关的代码就要用adr,理解一下 ...
(引用自2楼)

嗯, 感谢回答, 我明白原理

就是没看懂, 这里明明是还在SRAM中执行的, 还没开始relocate_code, 为什么这里LR的值通过ADR被赋予了here的链接地址, 而非当前运行地址(SRAM中)

出0入0汤圆

发表于 2022-4-30 06:16:25 来自手机 | 显示全部楼层
为了生成和地址无关的代码

出0入12汤圆

发表于 2022-4-30 06:55:49 | 显示全部楼层
你要看是取链接地址还是运行时地址。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 -- 东莞阿莫电子网站 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2022-10-7 21:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表