主题 : 关于uboot中两行代码的疑问,请指教! 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 24302
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
贡献值: 0 点
综合积分: 14 分
注册时间: 2010-07-05
最后登录: 2012-09-01
楼主  发表于: 2011-09-16 15:23

 关于uboot中两行代码的疑问,请指教!

读过uboot代码的应该都记得下面两行代码:
    ldr    pc, _start_armboot
_start_armboot:    .word start_armboot

通过这两行代码进入到第二阶段的C语言代码。
我不明白的地方是在这之前已经将uboot的代码段从flash移到了内存TEXT_BASE处,那start_armboot的值是什么时候怎么确定的以至于能在移动了代码后还能够得到正确的地址?装载重定向表应该不适用这种情况吧?
静默.....
级别: 新手上路
UID: 10160
精华: 0
发帖: 37
金钱: 195 两
威望: 42 点
贡献值: 0 点
综合积分: 74 分
注册时间: 2009-10-26
最后登录: 2021-09-18
1楼  发表于: 2011-09-18 10:43
最近在看
start_armboot没有指定的,它是在编译的时候,通过对_start的偏移算出来的。偏移是100的时候,假若此时_start是0,则它就是100.若_start是80000,则它就是80100
当你正确把u-boot加载到RAM指定位置的时候,跳过去start_armboot这个地址,就是对的。
级别: 新手上路
UID: 24302
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
贡献值: 0 点
综合积分: 14 分
注册时间: 2010-07-05
最后登录: 2012-09-01
2楼  发表于: 2011-09-20 11:27

 回 1楼(380121850) 的帖子

谢谢楼上,大概明白点了,是不是如果不将uboot代码从flash移到内存,反而跳过去的地址是错的?
静默.....
级别: 新手上路
UID: 10160
精华: 0
发帖: 37
金钱: 195 两
威望: 42 点
贡献值: 0 点
综合积分: 74 分
注册时间: 2009-10-26
最后登录: 2021-09-18
3楼  发表于: 2011-09-20 21:42
如果代码还没有移过去,你就直接跳过去了,就会发生错误。