阿甘奔跑ing

像阿甘一样奔跑,抛弃一切不必要的纠缠.前面就是终点!

原创 s3c2410的启动过程分析(最前面部分)收藏

        这几天一直在摸索s3c2410的启动过程,几天的困惑终于在昨天晚上基本解决.下面详细分析一下它的最前面的启动过程.

       1.在板子上电的一开始,首先自动判断是否是autoboot模式(这是由硬件设计阶段,由硬件工程师对mcu的引脚连线决定的),我所使用的s3c2410是带有nandflash的,并切被设置成autoboot,从nandflash开始启动. 

      2.在判断是autoboot模式后,mcu内置的nandflash控制器自动将nandflash的最前面的4k区域(这4k区域存放着bootloader的最前面4k代码)拷贝到samsung所谓的"steppingstone"里面(实际上是一块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的剩余代码(引导系统).

       目前还有不清楚或含混的地方就是中断向量表的具体设置,好象要经过几个跳转,这里比较含混.还有就是SDRAM在arm地址空间位置的确定,这个搞清是很必要的.以上就是这几天搞的事情.

发表于 @ 2006年09月21日 09:17:00|评论(loading...)

新一篇: 最近准备开始读linux内核的一些东东 | 旧一篇: 一个老程序员的成长道路

用户操作
[即时聊天] [发私信] [加为好友]
阿甘
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
阿甘的公告
文章分类
收藏
    常去看看
    codeguru
    codeproject
    Gameres社区中心
    linuxquestions(RSS)
    VC大本营(RSS)
    VC知识库(RSS)
    中国UNIX技术区(RSS)
    操作系统资料
    看雪学院(RSS)
    向高手致敬
    xiaoke 2005
    土星(RSS)
    存档
    软件项目交易
    Csdn Blog version 3.1a
    Copyright © 阿甘