代码从stepping stone搬移到内存
为什么要搬移代码?
如何搬移代码?
arm启动流程回顾:
2440:这里我们分析的是从nand flash 启动。2440的启动主要依赖于一个部件(SRAM),又名stepping stone.它的地址为0x0,nand flash是不能参与地址编址的,所以它是在内存以外的,当处理器上电以后,2440会自动地从nand flash 的最前端拷贝4k到stepping stone中。pc指针就会指向0x0这个地址。这里要特别注意4kb这个参数。比较大的u-boot,4k是完全不够的,所以我们把主要的硬件软件的初始化放在这4k中,剩余的则利用这4k的程序自动拷贝内存当中。这部分代码就会在内存中运行。
-----------------------------------------------------------
6410:上电之后,6410会去运行bootloader0(SROM),bootloader0会从nand flash 中拷贝8k到SRAM(stepping stone)中。这8k同样满足不了。我们需将剩下的bootloader拷贝到内存中运行。代码的拷贝工作同样需要在前8k中的代码来完成。
----------------------------------------------------
210:类似于6410
----------------------------------------------------
代码搬移主要三个地方:起点,终点,搬移方式。
我们这里的启点事stepping stone(SRAM)
2440的SRAM起始地址为0x0
6410的SRAM起始地址为S3C6410手册p116页stepping stone:0x0c000000
210:0xd0020000
讲终点之前我们需要理解什么是链接地址(如链接脚本里面的链接起始地址):arm-linux-objdump -D -s gboot.elf > dump
vim dump
reset 前面的地址就是链接地址。pc<=0x30008058
还有一个就是我们可以在汇编代码中直接修改ldr pc,=reset.(这是一个内存地址,而不是SRAM地址,那是不是意味着开发板一上电就跳转到内存中了。为解释这个问题,我们引入了相对跳转和绝对跳转。)
-------------------------------------------------
相对跳转:如b指令,相对跳转不是把连接地址直接赋值给pc,而是
跳转之前的地址+跳转之后地址的差值。
如start的地址是0x30000000,reset的地址为0x30000058,stepping stone的地址为0x0,所以跳转之后的真实地址为0x00000058(pc).
绝对跳转:例如函数调用,直接修改pc指针.
--------------------------------------------------
然后将连接的起始地址作为终点:0x50008000
---------------------------------------------------
搬移:
vi start.S
bl copy_to_ram
bl light_led
copy_to_ram:
ldr r0,=0x0c000000
ldr r1,=0x50008000
add r3,r0,#1024*4 //r0复制4k到r3
copy_loop:
ldr r2,[r0],#4 //读取四字节数据到r2
str r2,[r1],#4 //写入4字节数据到r1
cmp r0,r3 //判断r0的位置是否=r3,如果不等说明没有拷贝完。
bne copy_loop
mov pc,lr
代码从stepping stone搬移到内存的更多相关文章
- 重构改善既有代码设计--重构手法11:Move Field (搬移字段)
你的程序中,某个字段被其所驻类之外的另一个类更多的用到.在目标类建立一个新字段,修改源字段的所有用户,令它们改用新字段. 动机:在类之间移动状态和行为,是重构过程中必不可少的措施.随着系 ...
- 重构改善既有代码设计--重构手法10:Move Method (搬移函数)
你的程序中,有个函数与其所驻类之外的另一个类进行更多的交流:调用后者,或被后者调用.在该函数最常用引用的类中建立一个有着类似行为的新函数.将旧函数编程一个单纯的委托函数,或是将旧函数完全移除. 动机: ...
- uboot搬移部分和重定位部分的代码分析
来看一下搬移部分和重定位部分的代码: relocate: /* 把U-BOOT重新定位到RAM*/ //r0=0; adr r0, _start /* r0是代码的当前位置*/ ld ...
- svn搬移到gitlab及使用
svn是一款非常简便,易用的源代码管理工具,用了这么多年,对它情有独钟.都说习惯最难改,那为何要搬移到gitlab上呢? 喜欢尝试新东西,前提还是git比较强大,svn有的它都有,svn没有的它也有. ...
- 重构第2天:方法搬移(Move Method)
现在就重构来说是非常普通的,虽然我们经常会漏掉或忽略一些需要重构的地方.方法搬移,正如所定义的那样,把方法搬移到更适合他的位置.让我们看看下面这一段重构前的代码: 理解:方法搬移,正如所定义的那样,把 ...
- poj3580 伸展树(区间翻转 区间搬移 删除结点 加入结点 成段更新)
好题.我做了很久,学了大牛们的区间搬移.主要的代码都有注释. #include<cstdio> #include<cstring> #include<iostream&g ...
- 【Java重构系列】重构31式之搬移方法
重构第二式:搬移方法 (Refactoring 2: Move Method) 毋容置疑,搬移方法(Move Method)应该是最常用的重构手段之一,正因为太常用而且较为简单,以至于很多人并不认为它 ...
- Part9---代码搬移不可少
1.回顾ARM启动流程就可知道需要执行代码搬移 2.代码搬移 1)起点:NAND FLASH,今天的起点是SRAM垫脚石.为什么?因为我们要从nandflash取搬移数据需要先对其进行初始化,二而我们 ...
- 嵌入式开发之8127---DM8127如何利用EDMA搬移数据
--------------qq:1327706646 ---------------------author:midu -------------------------------datetime ...
随机推荐
- APP测试时常用adb命令
ADB全称Android Debug Bridge, 是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备(手机),故在其实工作可以给我们 ...
- Oracle_group by分组查询_深入
Oracle_group by分组查询_深入 本文导读:在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析. 创建分 ...
- Java学习笔记22---内部类之成员内部类的继承问题
成员内部类可以继承其他的类,也可以被其它类继承,本文主要说明其它类继承成员内部类的问题. 本文要点如下: 1).成员内部类的子类可以是内部类,也可以不是内部类: 2).当成员内部类的子类不是内部类或子 ...
- WinSCP怎么导入filezilla中的站点?
WinSCP是一款优秀的图形界面,远程文件管理工具,其出色的图形化界面与windows完美集成,是运用在windows上与远程服务器安全传输文件的软件之一 工具/原料 winscp 方法/步骤 下载. ...
- 关于userInteractionEnabled的属性的理解
userInteractionEnabled A Boolean value that determines whether user events are ignored and removed f ...
- MYSQL优化派生表(子查询)在From语句中的
Mysql 在5.6.3中,优化器更有效率地处理派生表(在from语句中的子查询): 优化器推迟物化子查询在from语句中的子查询,知道子查询的内容在查询正真执行需要时,才开始物化.这一举措提高了性能 ...
- 通过psping测试结果,初步判断远端服务器的状态
1.psping的输出结果为如下正常显示时,说明远端服务器的IP及端口可用 C:\Users\he.liming>psping 139.219.66.205:4352 PsPing v2.10 ...
- Web Magic设计思想
1.1 设计思想 1. 一个框架,一个领域 一个好的框架必然凝聚了领域知识.WebMagic的设计参考了业界最优秀的爬虫Scrapy,而实现则应用了HttpClient.Jsoup等Java世界最成熟 ...
- 译-Web Service剖析: XML, SOAP 和WSDL 用于独立于平台的数据交换
本文是翻译内容,原文参见: Anatomy of a Web Service: XML, SOAP and WSDL for Platform-independent Data Exchange We ...
- CSS--开篇
1,什么是CSS? 层叠样式表(Cascading Style Sheet ),定义了如何显示HTML元素,用来控制网页的样式和布局. 引入CSS后:HTML标记专门用于定义网页的内容,而使用CSS来 ...