u-boot重定位时,如果ro=0, 为什么能实现将nand flash代码搬移到sdram?

发布于 2021-11-24 20:24:04 字数 231 浏览 818 评论 1

1. 以官方u-boot-1.1.6,s3c2440,启动模式为外部nand flash为讨论前提。
   按照芯片手册理解,上电启动后pc = 0, nand flash最前面的4KB内容会被加载到stepping stone中,之后开始运行到relocate这里来,

Plain Text code

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜无邪 2021-11-26 22:09:27

3个月竟然没人回答啊,都怪我不经常逛国内的论坛,哈哈!

如果r0 = 0,自然是要搬移flash的代码到ram的!

首先,你得知道adr和ldr的不同。adr是取相对地址,ldr是取绝对地址,书上网上都有说的,什么意思呢?adr r0, _start执行后,r0的值有多种可能,是这么计算的,r0 = pc - (adr语句所在地址 - _start),对于同一份代码而言,括号中的值是固定的,这一点可以理解吧?pc的值在stepping stone中与在ram中是不同的,在stepping stone中,r0的值就是0,也就是硬件上电或硬件重启时的0地址,在ram中呢,则r0的值就是代码搬移到ram的起始地址。ldr r1, _TEXT_BASE执行后,r1的值只有一种可能,那就是_TEXT_BASE的值,这个是代码搬移到ram的起始地址。

所以,adr的目的就是获得代码的运行时地址。u-boot中这段代码就是为了检查代码的加载地址是否正确,如果和_TEXT_BASE一致则表示已经加载到我们想要加载到的地方,也就是我们真正想让代码运行的地方,这就是所谓的加载地址和运行时地址一致。如果加载地址和运行是地址不一致,那么代码就需要做到地址无关,否则会出错,这方面就不再具体说了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文