Chinaunix首页 | 论坛 | 博客
  • 博客访问: 385749
  • 博文数量: 61
  • 博客积分: 4650
  • 博客等级: 上校
  • 技术积分: 786
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-11 21:07
个人简介

少抱怨,多实干;

文章分类

全部博文(61)

文章存档

2017年(1)

2016年(13)

2015年(1)

2013年(2)

2011年(1)

2010年(3)

2009年(23)

2008年(17)

我的朋友

分类:

2008-11-12 15:50:46

uboot1.1.6中的关于代码搬家这代程序的分析(仅个人理解):


//这中是我个人的暂时理解,可能有错的地方,希望知道的朋友能够指出,谢谢!

relocate:    /* relocate U-Boot to RAM     */
 adr r0, _start  /* r0 <- current position of code   */
//_start是当前代码的开始地址,在flash中
 ldr r1, _TEXT_BASE  /* test if we run from flash or RAM */
//_TEXT_BASE是RAM中代码段的连接地址,下面就是要把flash中的代码搬到从这个地址开始的RAM中来 ,RAM中
 cmp     r0, r1                  /* don't reloc during debug         */
 beq     stack_setup

 ldr r2, _armboot_start
//_armboot_start这是ARM处理器运行第一条指令的地址,这个应该在RAM中
 ldr r3, _bss_start
//_bss_start代码段的结束地址,从_armboot_start到_bss_start这之间的代码应该是arm运行阶段一的代码,它应该被放入到RAM中
 sub r2, r3, r2  /* r2 <- size of armboot            */
//计算出RAM中初始阶段代码段的长度
 add r2, r0, r2  /* r2 <- source end address         */
//让这个长度与_start地址相加,而会得到另一个地址,从这个地址到上面的_start地址应该是要拷贝的代码

copy_loop:
 ldmia r0!, {r3-r10}  /* copy from source address [r0]    */
 stmia r1!, {r3-r10}  /* copy to   target address [r1]    */
 cmp r0, r2   /* until source end addreee [r2]    */
 ble copy_loop

阅读(769) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:有关volatile的解释

给主人留下些什么吧!~~