2011-03-12 17:03:17

把map文件也仔细看了下。代码及map文件及段分配的关系,可以参考我总结的图。暂时堆栈我就不放在ZI上了。不是今天的重了点

今天重点研究2440的nandflash启动后是如何搬运代码的。参考代码如下。
 ldr r0, =BWSCON
 ldr r0, [r0]
 ands r0, r0, #6  ;OM[1:0] != 0, NOR FLash boot
 bne copy_proc_beg  ;do not read nand flash
 adr r0, ResetEntry  ;OM[1:0] == 0, NAND FLash boot
 cmp r0, #0   ;if use Multi-ice,
 bne copy_proc_beg  ;do not read nand flash for boot
 ;nop
;===========================================================
nand_boot_beg                                              
跳到c语言RdNF2SDRAM函数段,实现将nandflash中
 [
{TRUE}                                                      
代码搬运到SDRAM
  bl RdNF2SDRAM
 ]

ldr pc,
=copy_proc_beg
;===========================================================
copy_proc_beg
 adr r0, ResetEntry
 ldr r2, BaseOfROM
 cmp r0, r2
 ldreq r0, TopOfROM
 beq InitRam 
 ldr r3, TopOfROM
0                            
==========================
 ldmia r0!, {r4-r7}        此段暂时不研究,据说是nor启动用的
 stmia r2!, {r4-r7}
 cmp r2, r3
 bcc %B0
 
 sub r2, r2, r3
 sub r0, r0, r2    
                     
============================
InitRam                            
此段是把topofrom上面的RW段数据搬运到正确的地址,即Baseofbss。
 ldr r2,
BaseOfBSS            
Baseofbss是在ads配置里的RW地址。如果rw地址不填写的话,此段删除
 ldr r3,
BaseOfZero            
也可以,如果rw地址填写的值正好是topofro的地址那么,此段删除也可以
0                                       
r3,baseofzero,即是RW Data段的结尾。     

 cmp r2, r3
 ldrcc r1, [r0], #4
 strcc r1, [r2], #4
 bcc %B0 
                                   
==============================
 mov r0, #0              
此段是把baseofzero,一直到rw段的结尾都初始化为0.注意rw段(可读写段)
 ldr r3, EndOfBSS    包括RW Data段及ZI Date段。都是可读写的。RW Data段数据会保持在目标文
1                            
件中,而ZI Date段只为数据分配空间,记录空间大小,不保存在目标文件。
 cmp r2, r3             
它一般由系统执行时初始化。ZI Data段一般都是自动分配在RW Data段后
 strcc r0, [r2], #4
 bcc %B1

bootloader研究最后一关(上)的更多相关文章

  1. bootloader研究最后一关(中)

    2011-03-12 17:04:13 今天的目的是要把bin文件烧录到nandflash中. 其实我有一个问题一直没弄明白.S3C2440自带的RAM和ROM是多大?看了规格书说它能控制1G的8个b ...

  2. [大数据学习研究]1.在Mac上利用VirtualBox搭建本地虚拟机环境

    1. 大数据和Hadoop 研究学习大数据,自然要从Hadoop开始. Hadoop不是一个简单的软件,而是有一些列软件形成的生态,其核心思想来自Google当初发布的三篇论文,后来做了开源的实现, ...

  3. Laravel5.5.x集成Swagger (L5-Swagger) 只讲Laravel5.5.x的集成,laravel其他版本请自行研究或参考github上的说明

    --------上图 截取自Github 官网上的安装参考----------------------------------------------------------------------- ...

  4. 分享下找到的Github上大神的EmpireofCode进攻策略:反正我是用了没反应,改了代码后单位不进攻,蠢站在那里,我自己的策略调调能打败不少人,这个日后慢慢研究吧,Github上暂时找到的唯一策略

    from queue import PriorityQueue from enum import Enum from battle import commander from battle impor ...

  5. lncRNA研究

    ------------------------------- Long noncoding RNAs are rarely translated in two human cell lines. ( ...

  6. stm32 Bootloader设计(YModem协议) (转)

    源:stm32 Bootloader设计(YModem协议) 相信很多人都希望,不开盖就可以对固件进行升级吧,就像手机那些.下文中的bootload就来实现这样的功能. 前段时间有项目关于Bootlo ...

  7. Bootloader的结构和启动过程

    CPU上电后,会在某个地址开始执行,比如MIPS结构的CPU会从0xBFC00000取第一条指令,而ARM结构的CPU则从0x00000000开始,嵌入式开发板中,需要把存储器件ROM或Flash等映 ...

  8. FastBoot BootLoader Recovery 模式解释

    理论上,所有的Android设备都存在着Fastboot/Bootloader模式,不过,由于Android操作系统的开源特性,各厂商的对 自家的相关Android设备都有着各自不同的Fastboot ...

  9. S5PV210开发系列三_简易Bootloader的实现

    S5PV210开发系列三 简易Bootloader的实现 象棋小子          1048272975 Bootloader是嵌入式系统上电后第一段运行的代码.对于功能简单的处理器,可能并没有Bo ...

随机推荐

  1. phpstorm 破解

    http://idea.lanyus.com/ https://www.imsxm.com/jetbrains-license-server.html [  http://www.activejetb ...

  2. Github恶搞之自定义你的contribution图表

    在正式写程序之前让我先来看看效果: 对了,这个程序的效果就是生成一个具有你想要的“contributions in the last year”图表的html页面. 当然,html文件,而不是你在Gi ...

  3. 四、Sql Server 基础培训《进度4-插入数据(实际操作)》

    知识点: 假设有订单表 CREATE TABLE Order ( ID int identity(1,1) not null primary key, --内码 BillNo varchar(100) ...

  4. 24.redux

    Flux:Flux 是一种架构思想 https://facebook.github.io/flux/ 官网 资料: http://www.ruanyifeng.com/blog/2016/01/flu ...

  5. python __all__

    它不仅在第一时间展现了模块的内容大纲,而且也更清晰的提供了外部访问接口. 若__all__的list中未定义,即便有实现也会找不到.

  6. js获取谷歌浏览器版本 和 js分辨不同浏览器

    // 获取谷歌版本 function getChromeVersion() { var arr = navigator.userAgent.split(' '); var chromeVersion ...

  7. 解决vue单页路由跳转后scrollTop的问题

    作为vue的初级使用者,在开发过程中遇到的坑太多了.在看页面的时候发现了页面滚动的问题,当一个页面滚动了,点击页面上的路由调到下一个页面时,跳转后的页面也是滚动的,滚动条并不是在页面的顶部 在我们写路 ...

  8. ThinkPHP 缓存技术详解 使用大S方法

    如果没有缓存的网站是百万级或者千万级的访问量,会给数据库或者服务器造成很大的压力,通过缓存,大幅减少服务器和数据库的负荷,假如我们把读取数据的过程分为三个层,第一个是访问层,第一个是缓存层,第三个是数 ...

  9. 2018-2019-2 20165330《网络对抗技术》Exp5 MSF基础应用

    目录 基础问题 相关知识 实验目的 实验内容 实验步骤 离实战还缺些什么技术或步骤? 实验总结与体会 实验目的 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路 返回目 ...

  10. TensorRT层和每个层支持的精度模式

    下表列出了TensorRT层和每个层支持的精确模式.它还列出了该层在深度学习加速器(DLA)上运行的能力.有关附加约束的更多信息,请参见 DLA Supported Layershttps://doc ...