来看一下搬移部分和重定位部分的代码:

relocate: /* 把U-BOOT重新定位到RAM*/

         //r0=0;

adr r0, _start /* r0是代码的当前位置*/

ldr r1, _TEXT_BASE /*测试判断是从FLASH启动,还是RAM  *///r1=TEXT_BASE
= 0x33F80000



cmp     r0, r1     /*比较R0、R1,调试的时候不需要重定位。 */

//如果当前的位置就是0x33F80000,既然uboot能够正常执行,起始地址肯定是0x33F80000,所以如果起始地址等于0x33F80000,那肯定现在是从norflash中启动的。

beq    
stack_setup  /*如果R0等于R1,跳到重定位代码。*/



//如果不是从RAM运行的话,则将代码拷贝到_TEXT_BASE标识的RAM中。

/*准备重新定义代码。*/

ldr r2, _armboot_start//_armboot_start=_start

ldr r3, _bss_start  //

sub r2, r3, r2 /* r2得到armboot的大小*/

add r2, r0, r2 /* r2得到要复制代码的末尾地址*/

//kaobei guo cheng

copy_loop:/*重新定位代码*/

ldmia r0!, {r3-r10} /*从源地址[r0]复制,r0指向_start(=0)*/

stmia r1!, {r3-r10} /*复制到目的地址[r1],r1指向_TEXT_BASE(=0x33F80000)*/

cmp r0, r2 /* 复制数据块直到源数据末尾地址[r2]*/

ble copy_loop

最新文章

  1. iOS开发--ChildViewController实现订单页的切换
  2. 检测Linux VPS是Xen、OpenVZ还是KVM真假方法
  3. spring MVC原理
  4. git工作区、暂存区、版本库之间的关系
  5. 去掉UItableview headerview黏性(sticky)
  6. 岛屿(洛谷 U5399)
  7. Linux 实现自动安装服务组件以及优化内核参数 (转)
  8. mysql查询差集
  9. StructureMap Exception Code: 207 Internal exception while creating Instance '06fc8bd7-76db-47c1-8d71-31090a074f5e' of PluginType QIMS.Repository.IComStaffRepository. Check the inner exception for more
  10. javaCV:爱之初体验
  11. 建立Hibernate二级Cache
  12. java变量初始化
  13. css:cdata
  14. 移植Iperf到android 用来学习linux移植到安卓的例子
  15. 微信小程序教学第四章第二节(含视频):小程序中级实战教程:详情-视图渲染
  16. python 异常 反射
  17. Python-Django 模型层-多表查询
  18. MYSQL--三大范式
  19. Docker初次使用与安装过程
  20. 聊天软件项目TCP升级版

热门文章

  1. 提供的STC89C52RC单片机GPS在LCD1602液晶只显示welcome to use问题?
  2. 升级pip3后出现importerror:cannot import name main
  3. Sqlserver与Mysql触发器之间的差别
  4. springboot5
  5. 让win10登陆时不再要求手动输入用户名
  6. MySQL存储过程入门教程
  7. Git 远程仓库 git remote
  8. Java 环境变量设置 -- JAVA_HOME CLASSPATH
  9. 在CentOS安装CMake
  10. Luogu P1377 [TJOI2011]树的序:离线nlogn建二叉搜索树