Chinaunix首页 | 论坛 | 博客
  • 博客访问: 326951
  • 博文数量: 72
  • 博客积分: 1730
  • 博客等级: 上尉
  • 技术积分: 743
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-27 18:49
文章分类

全部博文(72)

文章存档

2012年(72)

我的朋友

分类: 系统运维

2012-04-01 08:33:11

转载yu:http://yuweixian4230.blog.163.com/blog/static/13246867520102190272365/

这几天一直在 摸索s3c2440的MMU,发现了一个生词叫“steppingstone”.查了下资料,加上自己的理解,总结了一些arm启动的问题,下面详细分析 一下它的最前面的启动过程.
   1.在板子上电的一开始,首先自动判断是否是autoboot模式(这是由硬件设计阶段,由硬件工程师对mcu的引脚连线决定的),我所使用的 s3c2410是带有nandflash的,并切被设置成autoboot,从nandflash开始启动. 
   2.在判断是autoboot模式后,mcu内置的nandflash控制器自动将nandflash的最前面的4k区域(这4k区域存放着 bootloader的最前面4k代码)拷贝到samsung所谓的"steppingstone"里面(steppingstone是在S3C2440 中,实际上是一块4k大小的SRAM,).
   3.在拷贝完前4k代码后,nandflash控制器自动将"steppingstone"映射到arm地址空间0x00000000开始的前4k区域.
   4.在映射过程完成后.nandflash控制器将pc指针直接指向arm地址空间的0x00000000位置,准备开始执 行"steppingstone"上的代码.
   5.而"steppingstone"上从nandflash拷贝过来的4k代码,是程序员写的bootloader的前4k代码.这个 bootloader在之前写好,并已经被烧写到nandflash的0x00000000开始的最前面区域..而这"steppingstone"上的 4k代码就是bootloader的前4k代码.
   6.在pc指向arm地址空间的0x00000000后,系统就开始执行指令代码.这4k代码的任务是:初始化硬件,设置中断向量表,设置堆栈,然后一个 很重要的任务是,将nandflash的最前面区域的bootloader(包含4k启动代码)拷贝到SDRAM中去,bootloader代码的大小是 写好bootloader就确定的.然后只需要确定bootloader想映射到SDRAM的起始位置就ok.
   7.在完成对nandflash上的bootloader搬移后,找到4k代码的搬移代码最后一个指令的下一个指令在SDRAM的bootloader的 地址,然后跳转到该位置,继续执行bootloader的剩余代码(引导系统).

注意:S3C2440先从nandflash上启动的,而不是SDRAM上!
     感谢:ion-blogdetail-uid-3973-id-13515.html

阅读(1217) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~