免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5684 | 回复: 1
打印 上一主题 下一主题

2440的u-boot的start.s文件里的一些看不懂的代码,请高手帮忙解释下。 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2010-04-02 12:14 |显示全部楼层
1. r0中存放的是代码运行时地址,r1中则是加载地址,如果不相等则进行数据拷贝,因为大部分代码(主要是C代码)是位置相关的,只有把代码放到加载地址处,程序才能正确执行,另外,运行时地址和加载时地址是有肯能相等的;
2. sub        r2, r3, r2                /* r2 <- size of armboot            */
r2中存放代码段到堆栈段的size,这里包括代码段,数据段,只读数据段等;
add        r2, r0, r2                /* r2 <- source end address         */
r0是代码段的运行起始地址
r0+r2则是堆栈段的运行时起始地址,即要拷贝数据的结束地址
_armboot_start的值可以在本文件中查找,找不到的话就肯定在链接文件中定义的,不过它到底在哪里定义不重要,它应该也是代表代码的起始地址,和TEXT_BASE的值应该相等
3. 这个很明显是复制到_TEXT_BASE指定的地址处

好久没开这块的代码了,不知道解释清楚没有,反正大概原理就是这样吧

评分

参与人数 1可用积分 +30 收起 理由
bitmilong + 30 鼓励

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2010-04-08 17:26 |显示全部楼层
b或bl只能在正负32M空间跳转,ldr则可以在4G空间跳转,这个是由arm汇编指令码决定的;
start_code在本文件内,肯定小于32M,其它的跳转地址可能在不同的C文件中,所以需要用ldr指令;

异常向量表中,应该存放的都是跳转指令(fiq可以不跳转,因为是最后一条),用ldr肯定没错,b指令就要小心了;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP