免费注册 查看新帖 |

Chinaunix

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

[BootLoader] uboot的一点疑问,真心求答案,大牛进来看下!!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-19 18:19 |只看该作者 |倒序浏览
1、在_TEXT_BASE这个地址放置的是不是uboot拷贝到ram中后的代码起始值?
2、栈段是不是在_TEXT_BASE这个物理地址前面的地址?因为看见源码里是这样设置堆栈的
stack_setup:
ldr        r0, _TEXT_BASE         /* upper 128 KiB: relocated uboot */
sub        r0, r0, #CONFIG_SYS_MALLOC_LEN        /* malloc area */
sub        r0, r0, #CONFIG_SYS_GBL_DATA_SIZE /* bdinfo */

#ifdef CONFIG_USE_IRQ
sub        r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
#endif
sub        sp, r0, #12         /* leave 3 words for abort-stack */

3、在将代码往RAM中拷贝的时候,用到了3个变量
adr        r0, _start         /* r0 <- current position of code */  
ldr        r1, _TEXT_BASE         /* test if we run from flash or RAM */  
cmp        r0, r1         /* don't reloc during debug */  
beq        clear_bss  

ldr        r2, _armboot_start  
ldr        r3, _bss_start  
sub        r2, r3, r2         /* r2 <- size of armboot */  
#if 1
bl        CopyCode2Ram

从上面代码,可以看出,从r0处开始,往r1处拷贝,拷贝的大小是_armboot_start减去_bss_start

那么,_armboot_start的值是如何得到的,是不是_TEXT_BASE,_bss_start的值是不是完成初始化栈后sp的值呢?
那么此时的sp是指向高地址还是低地址呢? 如果用_bss_start的值减去_armboot_start的话,那么不是为负吗?因为栈的物理地址在arm启动代码前面?

论坛徽章:
0
2 [报告]
发表于 2011-08-19 19:59 |只看该作者
1.是   2.是   
.globl _armboot_start
_armboot_start:
       .word _star  已经指向了_start  而_start的地址 由连接器指定对应脚本为uboot.lds
BSS是程序用来存放未初始化的变量的 和栈没关系
没有push pop就没变化
最后一个问题 还是因为你把BSS当作了栈

论坛徽章:
0
3 [报告]
发表于 2011-08-20 11:39 |只看该作者
回复 2# towerlynn BSS是程序用来存放未初始化的变量的 和栈没关系

原来是这样,我一直把它当作栈了,感谢你的回答帮助,好人一生平安
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP